最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

基礎 | 自治智能體----類鳥群(五)

2020-03-24 11:05 作者:有木乘舟  | 我要投稿

本系列為筆者初學c/c++和游戲AI開發(fā)的學習過程,算法為主,不涉及到具體的游戲開發(fā)軟件學習(如unity,虛幻4等),若有錯誤請在評論區(qū)留下批評意見。

  • 語言:c/c++ (11及以上)

  • 平臺:macOS mojave

  • 編譯器:vs Code / g++

四、Separation和Alignment

4.1 Separation

? 該行為產(chǎn)生一個向外的力,操控智能體離開他的鄰域中的其他智能體。也就是不讓兩個智能體相撞。

? 我們需要計算出鄰域中所有智能體對當前智能體的合力,然后讓智能體朝著這個合力運動。該合力的計算方式是該智能體到鄰域其他智能體的距離的相反方向。

圖20:Separation方法

4.2?Alignment

? 該方法使智能體與鄰域內(nèi)的群體的速度保持一致,重點是航向一致。

? 我們通過遍歷鄰域,計算出他們的平均速度,該速度的方向就是我們需要的航向,因此只要將這個速度減去智能體當前速度,就可以求出智能體往這個方向航行所需的受力。

圖21:Alignment方法

4.3 存儲鄰域內(nèi)的智能體

? 在這之前,我們修改了之前的Cohesion方法,在里面添加了一個哈希表neighbor,用來記錄出現(xiàn)在只能鄰域內(nèi)的其他智能體,并將這個哈希表傳遞給其他方法,這樣就不需要遍歷全部的智能體,可以降低計算開銷。

圖22:neighbor數(shù)組

? 當其他智能體出現(xiàn)在鄰域內(nèi)時,將其索引標記為1,否則為0。

4.4 一些有趣的現(xiàn)象

? 項目到這里,已經(jīng)可以完整的實現(xiàn)一個簡單的Boids類鳥群,自治智能體。它們會四處游蕩,當身邊有其他群體時,就會靠近那個群體,并與其他個體保持一定距離。

? 但是其實如果去掉seek方法和cohesion方法,只保留其他兩個行為模式,該自治智能體還是能表現(xiàn)出一定的群集行為,只是會更加混亂一些,四處亂飛。

? 在計算最終運動軌跡的時候,為每個行為模式分配權(quán)重是一件非常重要的事情。每個行為模式在整個群集中的占比不同,會影響到最終的運動軌跡。

??我們現(xiàn)在只是粗糙的將所有受力合并起來,這會產(chǎn)生非常大的計算開銷。如果我們將群體數(shù)量擴大到100以上,就會發(fā)現(xiàn)群體速度變得十分的緩慢。

? 筆者暫時不知道這是因為cpu計算開銷太大,導致幀率下降,還是因為群體受力發(fā)生改變導致速度變小。如果有小伙伴知道的話,歡迎留言答復。

4.5 結(jié)果演示


參考:

  • 《游戲人工智能編程案例精粹》

  • 相關(guān)代碼下載? ??https://github.com/linpeijie/GameToy


基礎 | 自治智能體----類鳥群(五)的評論 (共 條)

分享到微博請遵守國家法律
会东县| 涿鹿县| 海城市| 江西省| 长沙市| 福州市| 信丰县| 平舆县| 千阳县| 清水河县| 崇仁县| 垦利县| 阜宁县| 集贤县| 大连市| 仙游县| 兴安盟| 永和县| 海林市| 伊通| 奈曼旗| 阜宁县| 荆门市| 荣昌县| 红原县| 宁南县| 长治市| 澜沧| 乌恰县| 江孜县| 习水县| 江北区| 连平县| 孝感市| 仙居县| 白玉县| 德兴市| 界首市| 来宾市| 红安县| 娄烦县|