用數學方法分析哪類遊戲中的AI難度最大

遊資網發表於2019-10-12
用數學方法分析哪類遊戲中的AI難度最大

2019年是AI在遊戲領域全面開花的一年。

1月,DeepMind開發的AlphaStar在《星際爭霸II》比賽中以5:0戰勝了職業選手MaNa;4月,OpenAI開發的OpenAI Five在《Dota 2》比賽中2:0戰勝去年的TI 8冠軍OG;7月,Facebook和CMU聯合開發的Pluribus在6人不限注德州撲克比賽中戰勝人類世界冠軍;8月,微軟開發的Suphx在專業麻將平臺“天鳳”上榮升十段,躋身僅10餘位的現役十段選手之列。

自2016年AlphaGo橫空出世、掀起遊戲AI浪潮以來,圍棋、星際爭霸、Dota、德撲、麻將,一座座號稱“人類智慧高地”的遊戲被AI逐一攻克。

一個常見的疑問是,AI挑戰過的這些遊戲,它們的複雜度能否有一個直觀的衡量和對比呢?接下來,我們會從狀態空間和操作序列空間這兩個維度,來嘗試衡量一款遊戲的複雜度。對AI來說,前者反映了輸入資訊的複雜度,後者反映了輸出行為的複雜度。

狀態空間

狀態空間(State Space)反映了遊戲過程中所有符合規則的狀態的總數量。通常情況下,為了便於計算,估算時會包含進一些不會在現實遊戲中出現的情況。比如在估計井字棋的狀態空間時,會考慮所有位置均為X或均為O的極端情況,得到3^9這個結果。(盤面上共有9個位置,每個位置可能的取值有X、O或空缺這3種)

用數學方法分析哪類遊戲中的AI難度最大

用數學方法分析哪類遊戲中的AI難度最大
井字棋狀態空間計算

在圍棋中,考慮到盤面上一共有19*19=361個位置,每個位置可能的取值有黑子、白子或空缺這3種(包含進了棋盤全為黑子或全為白子的極端情況)。因此圍棋的狀態空間為3^361≈10^172

用數學方法分析哪類遊戲中的AI難度最大
圍棋狀態空間計算

麻將的狀態空間會複雜一些,但還是可以做個近似的估算。在不考慮吃碰槓等情況的前提下,在一局麻將中的任一時刻,我們把136張麻將牌分為三類:第一類是遊戲最後剩下的14張牌,由於這些牌不會被用到,所以不用考慮先後順序,這裡的可能情況是C(136,14)種;第二類是四個玩家各自手裡的13張牌,這些牌也沒有順序,所以對應的可能情況有C(122,13)*C(109,13)*C(96,13)*C(83,13)種;第三類是剩餘的70張牌,這些牌要麼還未被翻開,要麼已經被某位玩家打出,這兩種情況都是有先後順序的(因為順序變化會影響到對勝率的預估),對應的情況是先對70張牌取排列數=P(70,70),然後每個排列可以從70個位置中的任一位置形成斷點(斷點前為玩家打出牌的序列、斷點後為未翻出牌的序列),總可能情況是P(70,70)*70。將三類牌的可能情況數做連乘,結果約等於10^184

麻將狀態空間估算

德州撲克的計算方式會更復雜一些。在兩人有限注德撲中,遊戲有4個回合,每回合雙方共有至多4次下注機會,狀態空間為10^17[1]。在兩人不限注德撲中,由於下注額沒有限制,變化會多很多,狀態空間為10^165[1]。(詳細計算過程可參見附錄連結)

而對於Dota2和星際這樣的遊戲來說,由於遊戲本身的狀態是連續的,無法拆分成離散的節點,不能像之前那樣計算。這種連續體現在兩個方面:一是時間層面的連續,遊戲中的行動是即時的(而非回合制的),這導致無法在時間上分別計算不同的狀態空間再做累加。不過鑑於任一時刻的決策其實只依賴於當前狀態(在完全相同的當前狀態下,玩家之前是先造的兵營再造的補給站、還是先造的補給站再造的兵營,並沒有差別),我們可以不考慮歷史狀態、僅計算截面狀態的數量;二是空間層面的連續,座標、移動方向、技能方向等都是任意的(玩家可以左轉30度,也可以左轉30.01度),這導致我們必須對狀態做簡化,否則狀態空間會無窮大。

具體來說,對於Dota 2,(在簡化後)假設把地圖劃分為100*100個區塊,當前時刻存在10個英雄,假設每個英雄有50個屬性(包含裝備情況、技能CD等)、每個屬性有100個取值,則對應的狀態空間為(100*100*100^50)^10≈10^1000。這裡還沒有考慮進野怪、防禦塔、兵線等資訊。

用數學方法分析哪類遊戲中的AI難度最大
OpenAI Five對單個英雄的觀測內容

對於星際,(在簡化後)假設把地圖劃分為128*128個區塊,假設當前時刻同時存在200個單位、每個單位有20個屬性、每個屬性有10個取值,則對應的狀態空間為(128*128*10^20)^200≈10^5000

用數學方法分析哪類遊戲中的AI難度最大
AlphaStar與人類高手MaNa對戰時的視覺化介面

需要說明的是,對於麻將、德撲、星際、Dota2這類不完美資訊遊戲(Imperfect-Information Games)來說,參與者無法隨時訪問全部遊戲資訊(比如其他玩家的手牌、戰爭迷霧中的情況等),這給AI帶來了更大的挑戰,很難使用傳統的蒙特卡洛樹搜尋方法。

操作序列空間

操作序列空間反映了遊戲中所有不同操作序列的數量。也很難精確計算,一般的估計方式是利用平均動作空間(Action Space)和遊戲長度(Game Length)這兩個引數。前者表示每次操作的平均可執行動作數,後者表示整局遊戲中的總操作次數操作序列空間=平均動作空間^遊戲長度。

圍棋中,平均一局遊戲進行150手、每一手平均有250個解,因此操作序列空間為250^150≈10^360

麻將中,每局遊戲至多會進行17.5輪((136張牌-14張底牌-13張手牌*4家)/每輪出4張牌),考慮吃碰槓帶來的增加和提前胡牌帶來的減少,假設平均進行15輪,每輪從14張手牌中選一張打出,因此操作序列空間為14^15≈10^17

德州撲克中,兩人有限注德撲的操作序列空間≈10^15[1],兩人不限注德撲的操作序列空間≈10^162[1]。(詳細計算過程可參見附錄連結)

Dota 2遊戲中,根據OpenAI在OpenAI Five部落格[2]中披露的資料:遊戲時長45分鐘、每秒鐘30幀,共計80,000幀,AI每4幀進行一次操作,共計20,000次操作,這是遊戲長度。任一時刻每個英雄可能的運算元是170,000,但考慮到其中大部分是不可執行的(比如使用一個尚處於冷卻狀態的技能),平均的可執行動作數約等於1,000,也即動作空間。因此,操作序列空間約等於1000^20000=10^60000

星際遊戲中,根據DeepMind在AlphaStar現場訪談[3]中披露的資料:平均動作空間約等於10^26,遊戲長度在1,000級別,我們假設為2,000,則操作序列空間為(10^26)^2000≈10^52000

下表整理了上述5款遊戲在狀態空間和操作序列空間這兩個維度的複雜程度,我們也加入了一些更簡單的棋牌遊戲作為對照[4]。

用數學方法分析哪類遊戲中的AI難度最大
部分遊戲的狀態空間和操作序列空間大小

總結

從上表不難發現,更大的狀態空間操作序列空間意味著更復雜的遊戲,往往也意味著更高難度的AI訓練。向未來看,伴隨著更大的遊戲地圖、更多的同局玩家數、更復雜的屬性維度,狀態空間會進一步增加;而伴隨著更多的操作選項、更快的操作手速、更長的遊戲時間,操作序列空間也會進一步增加。

百尺竿頭,更進一步。我們期待AI能逐一攻克更難更復雜的遊戲。

作者:可厲兒  
來源:超引數科技
原地址:https://mp.weixin.qq.com/s/g_NKLYp_gQ23YzGNEUeGOg

相關文章