
一、編程里面的行為樹指的是什么應用場景有哪些
行為樹主要用四種節點(還有諸如:裝飾節點等其他能更豐富功能的節點)來描述行為邏輯,順序節點、選擇節點、條件節點、執行節點。每一棵行為樹表示一個AI邏輯,要執行這個AI邏輯,需要從根節點開始遍歷執行整棵樹;遍歷執行的過程中,父節點根據其自身類別選擇需要執行的子節點并執行之,子節點執行完后將執行結果返回給父節點。節點從結構上分為兩類:組合節點、葉節點,所謂組合節點就是出度大于0的節點,葉節點一般用來放置執行邏輯和條件判斷。
--順序節點(Sequence):組合節點,順序執行子節點,只要碰到一個子節點返回FALSE,則返回FALSE;否則返回TRUE。
--選擇節點(Selector):組合節點,順序執行子節點,只要碰到一個子節點返回TRUE,則返回TRUE;否則返回FALSE。
--條件節點(Condition):葉節點,執行條件判斷,返回判斷結果。
--執行節點(Action):葉節點,執行設定的動作,一般返回TRUE。
一般用于游戲開發中
參考:
二、西山居AI技術專家黃鴻波:游戲中強化學習與行為樹融合實戰
強化學習與行為樹結合讓游戲更豐富的方式如下:
強化學習讓游戲智能體更智能
強化學習是一種機器學習范式,通過訓練代理的策略使其做出一系列決策。智能體(如角色或機器人)需觀察環境狀態(如玩家位置、游戲目標),并根據獎勵機制優化行為策略。智能體可通過反復試驗學習“受攻擊時如何反擊”或“如何達成特定目標”,從而提升游戲策略的復雜性和適應性。這種能力使游戲角色行為更貼近真實邏輯,增強玩家沉浸感。
行為樹提供結構化AI框架
行為樹通過邏輯節點(如Selector、Sequence)和行為節點(如攻擊、逃跑)構建樹狀結構,將游戲場景抽象為可復用的節點模塊。當智能體需要執行行為時,從根節點遍歷至匹配當前條件的分支。叢林巡邏的AI遇到半獸人時,若判斷無法戰勝則觸發“逃跑”節點(執行Run動作),若可戰勝則觸發“攻擊”節點(執行Fight操作)。行為樹的優勢在于降低代碼耦合度,避免重復開發,同時便于維護和擴展。
兩者結合的兩種實現方式
以強化學習為主,行為樹為輔:行為樹作為基礎框架接收游戲客戶端的觀測輸入(obs),在特定決策節點調用強化學習模型。在FPS游戲中,行為樹處理基礎動作(如移動、跳躍),而強化學習模型負責復雜決策(如火力分配、目標選擇)。這種方式適用于需要動態策略優化的場景。
以行為樹為主,強化學習為輔:訓練多個強化學習模型分別執行特定策略(如不同武器使用、不同敵人應對方式),再嵌入行為樹中。行為樹根據游戲狀態選擇調用“近戰模型”或“遠程模型”,強化學習模型則負責具體動作的精細化調整。這種方式適用于行為邏輯相對固定但需局部優化的場景。
結合方式的選擇需考慮游戲類型
兩種方式無絕對優劣,需根據游戲需求選擇。FPS游戲因策略復雜度高,更適合強化學習主導;而平臺跳躍類游戲因行為邏輯簡單,行為樹主導更高效。西山居通過技術框架整合兩者,結合實際案例驗證了結合方案的有效性,相關分享可參考AISummit大會視頻。
三、競技游戲的團隊AI如何實現
很多人問游戲AI該怎么做?隨著游戲類型的多元化,非 MMO或者卡牌的游戲越來越多,對AI的需求也越來越強了。而市面上關于 AI的書,網上找得到的文章,也都流于一些只言片語的認識,理論化的套路,和一些簡單的 DEMO,離真正的項目差距甚遠,無法前后銜接成一條線,更無法真正落地到編碼。
國內真正做過游戲AI的少之又少,東拉西扯的人很多,真正做過項目的人很少,因為國內主要以MMO為主,RTS比較少,體育競技類游戲更少,而從AI的難度上來看,應該是:MMO< FPS< RTS<體育競技。作為實際開發過AI的人,給大家科普一下,什么叫做硬派AI。硬派游戲AI,不是虛無縹緲的神經網絡,用神經網絡其實是一個黑洞,把問題一腳踢給計算機,認為我只要訓練它,它就能解決一切問題的懶人想法。更不是遺傳算法和模糊邏輯,你想想以前8位機,16位機上就能有比較激烈對抗的足球游戲、籃球游戲,那么差的處理器能做這些計算么?硬派游戲AI,就是狀態機和行為樹。狀態機是基本功,行為樹可選(早年AI沒行為樹這東西,大家都是hard code的)。大部分人說到這里也就沒了,各位讀完還是無法寫代碼。因為沒有把最核心的三個問題講清楚,即:分層狀態機、決策支持系統、以及團隊角色分配。下面以我之前做的籃球AI為例,簡單敘述一下:
方法/步驟
1
何為分層狀態機?
每個人物身上,有三層狀態機:基礎層狀態機、行為層狀態機、角色層狀態機。每一層狀態機解決一個層次的復雜度,并對上層提供接口,上層狀態機通過設置下層狀態機的目標實現更復雜的邏輯。基礎狀態機:直接控制角色動畫和繪制、提供基礎的動作實現,為上層提供支持。行為狀態機:實現分解動作,躲避跑、直線移動、原地站立、要球、傳球、射球、追球、打人、跳。角色狀態機:實現更復雜的邏輯,比如防射球、籃板等都是由N次直線運動+跳躍或者打人完成。
每一層狀態機都是通過為下一層狀態機設定目標來實現控制(目標設定后,下層狀態機將自動工作,上層不用關心動畫到底播到哪了,現在到底是跑是跳),從而為上層提供更加高級擬人化的行為,所有狀態機固定頻率更新(如每秒10次),用于判斷狀態變遷和檢查底層目標完成情況。最高層的角色狀態機的工作由團隊AI來掌控,即角色分配的工作。而行為狀態機以上的狀態抉擇,比如回防,到底是跑到哪一點,射球,到底在哪里起跳,路徑是怎樣的,則由決策支持系統提供支持。
2
何為決策支持系統?
狀態機為角色的大腦,而決策支持系統為角色的眼睛和耳朵,常見的工具有勢力圖(Influence Map)和白板(相當于不同角色間喊話),其中勢力圖比較常用,籃球游戲AI勢力圖可以用下面幾張圖來表示:
勢力圖1:于防守籃板距離的map,每格分值為最遠距離減去該格到籃板所在格子的距離
3
勢力圖2:進攻籃板距離的map,每個分值為最遠距離減去該格到籃板距離,籃板后為0
勢力圖3:同敵人距離,每個敵人有影響范圍,范圍內,離敵人越近分越低,范圍重疊選低的。
勢力圖4:同所有隊友目標位置距離map,打分方法類似上圖。
勢力圖5:與每個隊友目標位置距離的map,標識單個隊友目標位置距離的map
勢力圖6:現實傳球可行性的map,分數越高,越容易把球傳到該格子上。
勢力圖7:容易把球傳出的位置map,越容易直接傳球給隊友的區域分數越高。
勢力圖8:綜合map,把以上map按一定加權求和。球員有合法目標區域,便于實現內線游走和外線游走。
每個球員性格不同,權值也不同,有保守的球員,有喜歡冒險的球員,權值不同而已。這些勢力圖都是為了給上面的三層狀態機和團隊狀態機提供決策支持的。
何為團隊角色分配?每一層狀態機為下一層設定一個目標,讓下層自動工作,頂層角色層的目標則由最高層的團隊ai進行戰術指導。
團隊狀態機跟據當前的游戲情況確定當前首要目標(進攻或者防守),又根據當前的勢力圖等信息,確定進攻或者防守的具體戰略(比如中路突破、盤路包抄、下底傳中等),最終為當前己方的所有角色分配一個新的任務,即設定角色層狀態機的新目標,確定他是做主攻還是做助攻,還是聯防還是策應。具體該怎么聯防,怎么策應,那就是角色層狀態機的事情了。
話題總結其實團隊AI沒那么玄乎,任何問題就是一個編程的建模問題,而最復雜的體育競技類游戲的AI策略,上文已經給出模型,相信各位略加修改即可使用。寫狀態機是游戲AI的硬功夫,如果狀態機邏輯經常改變或者項目規模大了以后可以考慮引入決策樹來控制狀態機,程序提供一系列接口,然后用可視化的編輯器進行更改,感興趣的人可以參考決策樹相關文章。
概率統計如果上面這些邏輯都實現了,這時候才可以輔助與概率統計來讓角色具備學習特性,比如統計某個策略對對手的成敗情況,用來支撐下一次決策,這樣能夠逐步發現對手的弱點,還可以統計所有用戶的大數據,來確定某種情況下,選擇什么策略,能夠對付60%的用戶。
神經網絡在上面所有邏輯都實現了,你調試玩著比較順暢的時候,再在團隊角色分配處嘗試使用神經網絡或者模糊邏輯,同樣是學習大數據,來引入一些不可控的人性化的成分,讓游戲更加有意思。(EA的 FIFA 20XX號稱引入神經網絡,Call of Duty的AI也號稱引入了神經網絡和學習機制)。確實讓游戲更有趣一點,但僅僅如此而已。PS:關于棋牌類 AI的相關話題,和這個不一樣,因為棋牌AI是要尋求最佳解的,使用博弈樹等工具進行解決,感興趣的話,可以參考我另外一篇文章:TINY-GOBANG最精簡的五子棋人機對戰PS:當你看到屏幕的角色好似被你賦予了生命的樣子,一個個單獨而有整體有序的活動著,偶爾還能做出你意料之外的事情,你將充滿了創造的喜悅。










