當前位置: 華文問答 > 數位

即時戰略遊戲(比如 WAR3)的 AI 是怎樣實作的?

2013-12-31數位

贊同樓上所有答案。

傳統即時戰略 [1] 的AI其實可以分為兩個部份,一個是資源管理AI,一個是戰爭AI。

資源管理AI 就是決定建築、科技樹、建兵的AI。

資源管理AI一般采用的是規則式AI。

規則式AI簡單來說,就是一大堆if-else語句。

它有兩個主要的部份,一個是工作記憶,另一個是規則記憶。[2]

工作記憶儲存已知的遊戲世界資訊,這部份是動態的。

規則記憶儲存設遊戲計師設計的的規則。

正如

@五八

所說,規則都是pre-scripted的。

而當工作記憶符合規則記憶的某一條規則時,相應的行動就會被觸發。

這樣做的好處是,遊戲設計師擁有完全的掌控權。

而它的壞處也是十分明顯的——因為是pre-scripted,所以整個規則是靜止的。

但是畢竟在即時戰略中,「正確合理」的發展方式就那麽幾套方案,所以規則式AI帶來的好處多於壞處。

當然,規則式AI也有一些手段來動態學習。

例如給規則的觸發條件並不是一些具體的「錢多少、兵多少」,而是權重。

每次分析時,根據上一次觸發的結果的好壞來調整所有規則的權重,然後選出權重最高的規則,觸發相應行為。[3]

然而動態有時會帶來不確定性,所以采取與否,需要看遊戲的設計來決定。


戰爭AI 其實可以分為兩層 [4],一層是將軍AI,一層是士兵AI。

將軍AI的工作是分析遊戲世界,然後告訴所有士兵AI 「去哪裏,做什麽」。

士兵AI的工作是分析自己附近的遊戲世界,然後決定相應的行為。

將軍AI 分析遊戲世界時,有可能會采用Planner[8]、Utility-Based AI或者Neural Network[11]等能夠帶來不確定性的AI演算法。

我對Planner不熟悉,就不多說了,大家可以看看[8]連結。

Utility-Based AI是指一套打分系統,根據遊戲世界的資訊對行為庫[5]打分,然後選出或者組合出[6]一套行為[12]。

Neural Network是指幾層神經元,例如經典的三層網路——輸入層、隱藏層、輸出層,世界資訊透過輸入層輸入Neural Network系統,然後輸出層輸出一個結果[7]。

上面提到的這些演算法有一個共同的好處,能夠根據遊戲世界的變化帶來不確定性。

因為即時戰略中的戰爭部份是最難預測的,玩家可以有無窮無盡的戰術變化,所以將軍AI需要更加動態來產生更加動態的戰術。

然而,這些演算法,特別是Nerual Network,它們產生的結果的過程是「黑箱的」——即使是我設計的將軍AI,我也不知道它是怎麽工作的...遊戲設計師可以說失去了掌控權。

不過,有研究表明,神經質AI在即時戰略中表現最好[9]....或許,這也是算是 「出其不意」吧...

相反地, 士兵AI 需要比將軍AI更加靜態。

如果你把士兵拉到敵人旁邊,他卻在那邊Idle的話...

所以樓上都有提到的有限狀態機、行為樹等更加靜態的演算法[10]會更合適,因為遊戲設計師可以設計好士兵的行動規則。

例如弓箭手在距離敵人大於XX米的情況下射箭,距離小於X米的時候肉搏,士氣低於XX的時候走佬。

如果用Neural Network來實作這些設計的話就會哭笑不得...對的,我就用過Neural Network設計過士兵AI,是我們大學的神經網路的作業...


除了上面的提到的演算法,還有另外一些提高遊戲性的演算法可以采用。

模糊邏輯 ,Fuzzy Logic,讓遊戲世界的資訊模糊化,帶來合理的不確定性。

勢力圖 ,Influence Map,讓遊戲世界的資訊視覺化或者是規範化,有助於將軍AI分析。

隨機,Randomization,在適當的時候做出適當的隨機選擇[13]。


註釋或資料來源:

[1]我個人喜歡劃分【星際】【紅警】【帝國】等遊戲為「傳統即時戰略」,通常都有資源管理和戰爭兩部份組成。區別於塔防、即時戰術等即時的策略遊戲。

[2][3]資料來源:【遊戲開發中的人工智慧】第十一章,規則式AI。

[4]也可以是多層,視乎需求而定。

[5]行為庫指的是一個很多單元行為的集合。一個例子就是行為樹裏面的「行為」。

[6]單元行為如果設計得好、相互沒有依賴關系得話,它們之間可以相互組合。

[7]「結果」可以是一個行為的代號,也可以是一個權重。

[8]Planner資料來源:

http:// intrinsicalgorithm.com/ IAonAI/2012/11/ai-architectures-a-culinary-guide-gdmag-article/

[9]資料來源:

Solidot | "神經質"AI在即時戰略遊戲中表現最突出

[10]如

@Freelancer

所說,稱之為框架會更加合適。

[11]

Flanking Total War’s AI: 11 Tricks to Conquer for Your Game

提到【全面戰爭】有用到Neural Network,但是我對文章的說的 「Neural Network用在士兵AI上」 表示懷疑,我猜測是用在將軍AI上的。

[12]一個利用Utility-Based AI的成功例子

http:// christophermpark.blogspot.sg /2009/06/designing-emergent-ai-part-1.html

[13]感謝

@HARDCOREGAME

提醒 :)