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

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

基礎(chǔ) | 自治智能體----類鳥群(一)

2020-03-17 16:59 作者:有木乘舟  | 我要投稿

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

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

  • 平臺:macOS mojave?

  • 編譯器:vs Code / g++

? Boids,類鳥群,最早由Craig Reynolds在1986年BBC的紀(jì)錄片中提出的計(jì)算模型,指在計(jì)算機(jī)中模擬自然界中鳥群和魚群的行為模式,并稱其為操控行為。

? 該操控行為(Steering Behaviors)主要有三種行為模式:

  • 體積排斥:個體占據(jù)一定的體積,且永不相交,即每個個體都會避免與最近的個體發(fā)生碰撞。

Separation: steer to avoid crowding local flockmates
  • 速度對齊:每個個體與其近鄰(如與第k個粒子距離最近的Nk個鄰居)保持速度同步。

Alignment: steer towards the average heading of local flockmates
  • 聚集傾向:粒子不會傾向于獨(dú)立行動(粒子群保持維持),每個個體會盡量與附近個體靠近,以避免孤立。

Cohesion: steer to move toward the average position of local flockmates

Cohesion: steer to move toward the average position of local flockmates

? 個體運(yùn)動是獨(dú)立的,每個個體均獨(dú)立執(zhí)行以上三個行為模式,即每個個體只會根據(jù)附近其他個體的運(yùn)動來調(diào)整自身當(dāng)前的運(yùn)動狀態(tài),而沒有任何“領(lǐng)導(dǎo)”在起作用。

? 在計(jì)算機(jī)模型中,個體(boid)可以獲取整個場景的全部信息,但要發(fā)生群集的行為需要個體的領(lǐng)域(neighborhood)內(nèi)出現(xiàn)一個群體(flockmates)。

? 鄰域有兩個特征:一是距離(從boid的中心測量),二是角度(從boid的飛行方向測量)。

圖1:a boid's neighborhood

? 不在個體鄰域內(nèi)的群體會被忽略掉。鄰域可以被當(dāng)做是一個有限感知模型,但更正確的說法是,領(lǐng)域定義了一個區(qū)域,在這個區(qū)域里,群體影響著個體的航向(行為)。

有關(guān)Boids的所有資料均可在Craig Reynolds的個人網(wǎng)站上查閱到:http://www.red3d.com/cwr/boids/

? 類鳥群是一個很好的有關(guān)自治智能體的樣本,它能幫我們很好的理解和實(shí)現(xiàn)一個自治智能體程序。所謂自治智能體,是指能在一定條件下對周圍的環(huán)境做出有限的自治行為的對象。

一個自治智能體是這樣一個系統(tǒng),它位于一個環(huán)境的內(nèi)部,是環(huán)境的一部分,且能感知該環(huán)境對他它有效實(shí)施的作用,并永遠(yuǎn)按此進(jìn)行,為未來的新感知提供條件。

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

? 自治智能體在游戲中有著很好的應(yīng)用,適用于非常多的場景,如游蕩的怪物自動避開障礙物,巡邏的衛(wèi)兵避開人群等等。

? 當(dāng)然也可以通過編寫硬規(guī)則來實(shí)現(xiàn)上述的功能,但這樣就會讓NPC看起來傻傻呆呆的,同時也會讓游戲失去許多樂趣,不是么。

? 自治智能體的運(yùn)行過程可以分解為三個步驟:

  • 行動選擇:負(fù)責(zé)制定計(jì)劃,選定目標(biāo)。

  • 操控:負(fù)責(zé)分解目標(biāo),發(fā)出控制信號,服務(wù)行動選擇環(huán)節(jié)制定的目標(biāo)和計(jì)劃。

  • 移動:負(fù)責(zé)執(zhí)行操控行為發(fā)過來的控制信號,做出具體的動作。

? 舉個例子,你半夜時候突然感到餓了,決定到冰箱拿點(diǎn)東西吃,于是你掀起被子、下床,打開冰箱拿出了牛奶和面包吃了起來。

? 在這整個過程當(dāng)中,對“感到餓了”這個環(huán)境的變化,大腦會做出“吃東西”這樣的計(jì)劃,并將目標(biāo)定在“冰箱”;之后,大腦中其他部位會將計(jì)劃分解為“下床,打開冰箱,吃東西”這一系列操作,并通過各種神經(jīng)信號發(fā)送給手腳;最后,你的手和腳執(zhí)行這些操控信號,走到了目標(biāo)點(diǎn),開心的吃了一頓。

? 該項(xiàng)目仍然來自《游戲人工智能編程案例精粹》,但是由于各種原因的限制,筆者對其進(jìn)行了大量的修改,并且會按照自己的理解來講解該項(xiàng)目,但其核心思想和內(nèi)容不會改變。

? 具體的演示視頻,筆者已經(jīng)上傳到B站,可以在這里看到。

? 筆者選用了跨平臺的第三方庫SFML來實(shí)現(xiàn)圖形界面的開發(fā),這是一個簡單方便的多媒體庫,??非常適合用來當(dāng)做簡單的2D游戲引擎,開發(fā)小游戲。

? 具體的安裝教程,在這篇文章里有個簡單的介紹。

? 至于SFML的使用教程,推薦直接參考官方文檔:https://www.sfml-dev.org/ ,也可以跟著這本書學(xué)習(xí)《SFML Game Development》。


參考:?

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

  • http://www.red3d.com/cwr/boids/? ??Craig Reynolds

相關(guān)代碼下載:https://github.com/linpeijie/GameToy/tree/master/GameAI

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

分享到微博請遵守國家法律
普宁市| 海伦市| 于都县| 应用必备| 双城市| 钟祥市| 库尔勒市| 富阳市| 如东县| 沭阳县| 新巴尔虎左旗| 襄樊市| 金寨县| 石楼县| 巴林左旗| 张家港市| 广宁县| 繁昌县| 唐海县| 土默特右旗| 新龙县| 崇仁县| 怀来县| 临漳县| 乌拉特前旗| 鄂伦春自治旗| 双城市| 嵊州市| 湟源县| 雷山县| 延寿县| 江孜县| 拜泉县| 钦州市| 台湾省| 贵港市| 罗城| 偃师市| 嘉黎县| 大连市| 麟游县|