首頁/ 遊戲/ 正文

決策 AI 版 “大球吃小球”Go-Bigger 釋出!無需繁雜程式碼也能設計遊戲 AI 智慧體

多智慧體對抗作為決策 AI 中重要的部分,也是強化學習領域的難題之一。為豐富多智慧體對抗環境,OpenDILab(開源決策智慧平臺)開源了一款多智慧體對抗競技遊戲環境——Go-Bigger。同時,Go-Bigger 還可作為強化學習環境協助多智慧體決策 AI 研究。

與風靡全球的

agar。io、球球大作戰

等遊戲類似,在 Go-Bigger 中,玩家(AI)控制地圖中的一個或多個圓形球,透過吃食物球和其他比玩家球小的單位來儘可能獲得更多重量,並需避免被更大的球吃掉。每個玩家開始僅有一個球,當球達到足夠大時,玩家可使其分裂、吐孢子或融合,和同伴完美配合來輸出博弈策略,並透過 AI 技術來操控智慧體由小到大地進化,憑藉對團隊中多智慧體的策略控制來吃掉儘可能多的敵人,從而讓己方變得更強大並獲得最終勝利。

決策 AI 版 “大球吃小球”Go-Bigger 釋出!無需繁雜程式碼也能設計遊戲 AI 智慧體

四類小球,挑戰不同決策路徑

Go-Bigger 採用 Free For All(FFA)模式來進行比賽。比賽開始時,每個玩家僅有一個初始球。透過移動該球,玩家可吃掉地圖上的其他單位來獲取更大的重量。每個隊伍都需和其他所有隊伍進行對抗,每局比賽持續十分鐘。比賽結束後,以每個隊伍最終獲得的重量來進行排名。

在一局比賽中共有分身球、孢子球、食物球、荊棘球四類球。分身球是玩家在遊戲中控制移動或者技能釋放的球,可以透過覆蓋其他球的中心點來吃掉比自己小的球;孢子球由玩家的分身球發射產生,會留在地圖上且可被其他玩家吃掉;食物球是遊戲中的中立資源,其數量會保持動態平衡。如玩家的分身球吃了一個食物球,食物球的重量將被傳遞到分身球;荊棘球也是遊戲中的中立資源,其尺寸更大、數量更少。如玩家的分身球吃了一個荊棘球,荊棘球的大小將被傳遞到分身球,同時分身球會爆炸並分裂成多個分身。此外,荊棘球可透過吃掉孢子球而被玩家移動。

決策 AI 版 “大球吃小球”Go-Bigger 釋出!無需繁雜程式碼也能設計遊戲 AI 智慧體

分身球

團隊緊密配合,實現合理重量傳遞

在 Go-Bigger 中,團隊內部的合作和外部的競技對於最終的成績至關重要。因此,Go-Bigger 設計了一系列的規則來提高團隊所能帶來的收益。由於玩家的分身球重量越小,移動速度越快,更多的分身可以保證快速發育,但是會面臨被其他玩家吃掉的風險。同時,冷卻期的存在使得玩家無法靠自身擺脫這樣的風險。因此,同一隊伍中不同玩家的配合尤為關鍵。

為便於團隊內玩家的配合,Go-Bigger 設定了玩家無法被同隊伍完全吃掉的規則。Go-Bigger 還設定了單個分身球的重量上限和重量衰減,使得單一分身球無法保持過大重量,迫使其分裂以減少重量損失。在遊戲後期,團隊內部的重量傳遞會顯得至關重要,合理的重量傳遞可以保證團隊在與其他隊伍對抗時獲得更大的優勢。

支援 RL 環境,提供三種互動模式

此外,為幫助使用者在強化學習領域的多智慧體策略學習,Go-Bigger 也提供了符合 gym。Env 標準的介面供其使用。在一局遊戲中,Go-Bigger 預設設定含有 20 個狀態幀和 5 個動作幀。每個狀態幀都會對當前地圖內所有單位進行模擬和狀態處理,而動作幀會在此基礎上,附加對單位的動作控制,即改變單位的速度、方向等屬性,或使單位啟用分裂、發射或停止等技能。

為了更方便地對環境進行探索,Go-Bigger 還提供了必要的視覺化工具。在與環境進行互動的時候,可以直接儲存本局包含全域性視角及各個玩家視角的錄影。此外,Go-Bigger 提供了單人全域性視野、雙人全域性視野、單人區域性視野三種人機互動模式,使得使用者可以快速瞭解環境規則。

三步走,快速搭建強化學習 baseline

演算法 baseline 的目的是驗證某個問題環境使用強化學習演算法的初步效果,對各個環節的資訊做簡單梳理和分析,熟悉之後便可輕鬆上手比賽,在環境、演算法、算力上逐步增加複雜度,設計迭代效果更強的智慧體。

Go-Bigger 環境的強化學習演算法 baseline 主要分為環境瘦身、基礎演算法選擇、定製訓練流程三部分。其中,環境瘦身即將原始遊戲環境簡化成適用於強化學習的標準環境格式;基礎演算法選擇指根據環境的基本資訊選擇合理的基礎 RL 演算法;定製訓練流程指根據環境的特殊特徵定製訓練流程。

環境瘦身人類視角的 Go-Bigger(上)S。 翻譯成遊戲引擎中的結構化資訊(下):

決策 AI 版 “大球吃小球”Go-Bigger 釋出!無需繁雜程式碼也能設計遊戲 AI 智慧體

決策 AI 版 “大球吃小球”Go-Bigger 釋出!無需繁雜程式碼也能設計遊戲 AI 智慧體

這些人理解起來很簡單的資料表示,對計算機和神經網路卻非常不友好,因此需要專門對這些資訊做一定的加工,並根據強化學習的特性設定成標準的強化學習環境觀察空間。

特徵工程:

原始的遊戲資料需要表達遊戲內容,其數值範圍波動便會較大(比如從幾十到幾萬的球體大小),直接將這樣的資訊輸入給神經網路會造成訓練的不穩定,所以需要根據資訊的具體特徵進行一定的處理(比如歸一化,離散化,取對數座標等等)。

對於類別資訊等特徵,不能直接用原始的數值作為輸入,常見的做法是將這樣的資訊進行獨熱編碼,對映到一個兩兩之間距離相等的表示空間。

決策 AI 版 “大球吃小球”Go-Bigger 釋出!無需繁雜程式碼也能設計遊戲 AI 智慧體

對於座標等資訊,使用絕對座標會帶來一些對映關係的不一致問題,相對座標通常是更好的解決方式。

從 RGB 影象到特徵影象層

決策 AI 版 “大球吃小球”Go-Bigger 釋出!無需繁雜程式碼也能設計遊戲 AI 智慧體

直接將原始的 RGB 2D 影象資訊輸入神經網路,儘管結果尚可,但需要更多的資料、更長的訓練時間,以及更復雜的訓練技巧。更為簡明並有效的方式是進行 “升維”,即將耦合在一起的影象資訊離解成多個分離的特徵影象層。最終根據遊戲內容定義出具體的特徵影象層,並區分各個玩家的區域性視野,拼接後構成總體的特徵影象層。下圖為一玩家視野中食物球的特徵影象層:

決策 AI 版 “大球吃小球”Go-Bigger 釋出!無需繁雜程式碼也能設計遊戲 AI 智慧體

可變維度

Go-Bigger 環境中存在很多可變維度的地方,為了簡化,baseline 環境中強行截斷了單位數量,用統一的方式來規避可變維度問題。

設計動作空間

Go-Bigger 對於人類來說操作起來十分簡單,包括上下左右 QWE,這些基本的按鍵組合起來便可以誕生出許多有趣的操作,如十面埋伏、大快朵頤等。但是,遊戲引擎中實際的動作空間是這樣的(動作型別 + 動作引數):

決策 AI 版 “大球吃小球”Go-Bigger 釋出!無需繁雜程式碼也能設計遊戲 AI 智慧體

遊戲引擎的這種形式在強化學習中被稱作混合動作空間,也有相應的演算法來處理該問題。但基於 baseline 一切從簡這一核心,透過使用比較簡單粗暴的離散化處理,將連續的動作引數(x,y 座標)離散化為上下左右四個方向。針對動作型別和動作引數的組合,也簡單使用二者的笛卡爾積來表示,最終將環境定義為一個 16 維的離散動作空間。

決策 AI 版 “大球吃小球”Go-Bigger 釋出!無需繁雜程式碼也能設計遊戲 AI 智慧體

設計獎勵函式

獎勵函式定義了強化學習最佳化的目標方向。Go-Bigger 是一項關於比誰的隊伍更大的對抗遊戲,因此獎勵函式的定義也非常簡單,即相鄰兩幀整個隊伍的大小之差。

如下圖所示兩張表示相鄰兩個動作幀,右側計分板顯示各個隊伍實時的大小數值,將當前幀的大小減去上一幀的大小,就定義得到了獎勵值。而對於整場比賽,則使用每一步獎勵的累加和作為最終的評價值。評價值最大的隊伍,將贏得本局比賽。此外,在訓練時,還透過縮放和截斷等手段將獎勵值限制在 [-1, 1] 範圍內。

決策 AI 版 “大球吃小球”Go-Bigger 釋出!無需繁雜程式碼也能設計遊戲 AI 智慧體

決策 AI 版 “大球吃小球”Go-Bigger 釋出!無需繁雜程式碼也能設計遊戲 AI 智慧體

基礎演算法選擇

在完成對 RL 環境的魔改之後,會呈現如下基本資訊:

多模態觀察空間:影象資訊 + 單位屬性資訊 + 全域性資訊

離散動作空間:16 維離散動作

獎勵函式:稠密的獎勵函式,且取值已經處理到 [-1, 1]

終止狀態:並無真正意義上的終止狀態,僅限制比賽的最長時間

對於這樣的環境,可用最經典的 DQN 演算法 + 多模態編碼器神經網路來實現。對於各種模態的觀察資訊,使用資料對應的經典神經網路架構即可。例如,對於影象資訊,選擇一個帶降取樣的卷積神經網路將 2D 影象編碼為特徵向量;對於單位屬性資訊,需要建模各個單位之間的聯絡,獲得最終的單位特徵向量;對於全域性資訊,則使用由全連線層構成的多層感知機。在各部分編碼完成之後,將三部分的特徵拼接在一起,將構成時間步的觀察特徵向量,以複用最經典的 Dueling DQN 結構。以特徵向量為輸入,輸出這一步選擇 16 個動作的 Q 值,並使用 N-step TD 損失函式即可完成相應訓練的最佳化。完整的神經網路結構如下圖所示。

決策 AI 版 “大球吃小球”Go-Bigger 釋出!無需繁雜程式碼也能設計遊戲 AI 智慧體

決策 AI 版 “大球吃小球”Go-Bigger 釋出!無需繁雜程式碼也能設計遊戲 AI 智慧體

定製訓練流程

DQN 通常只用來解決單智慧體的問題,而在 Go-Bigger 中一支隊伍會存在多個玩家,且一局比賽為多個隊伍混戰,因此會涉及多智慧體之間合作和對抗等問題。在多智慧體強化學習領域,針對該問題可展開諸多的研究方向,但為簡化設計 Go-Bigger 使用了 Independent Q-Learning(IQL)+ 自我對戰(Self-Play)的方式來實現訓練流程。

例如,對於一個隊伍中的多個智慧體,團隊的最終目標是讓整個隊伍(總體積/總體量/總重量)的大小最大,因此在 baseline 中可使用 IQL 演算法來實現,以高度並行化地實現整個最佳化過程;對於實際一局比賽中存在多個智慧體的情況,則可使用樸素的自我對戰(Self-Play)這一相當簡單且非常節省算力的方式來參與比賽。評測時,會將隨機機器人和基於規則的機器人作為比賽的對手,測試驗證目前智慧體的效能。

Tips:

使用更高階的自我對戰(Self-Play)演算法(比如儲存智慧體的中間歷史版本,或使用 PFSP 演算法);

構建 League Training 流程,不同隊伍使用不同的策略,不斷進化博弈;

設計基於規則的輔助機器人參與到訓練中,幫助智慧體發現弱點,學習新技能,可作為預訓練的標籤或 League Training 中的對手,也可構造蒸餾訓練方法的老師,請玩家盡情腦洞。

從零開始實現上述演算法和訓練流程非常複雜,而透過決策智慧框架 DI-engine可大大簡化相應內容。其內部已經集成了支援多智慧體的 DQN 演算法實現和一系列相關訣竅,以及玩家自我對戰和對抗機器人的訓練元件,只需實現相應的環境封裝,神經網路模型和訓練主函式即可。

幾個有意思的發現

透過上述簡單基線演算法訓練出來的初級 AI 在在發育階段會將球儘量分開,以增大接觸面加快發育;在面對潛在的危險時,會避開比自身大的球,並使用分裂技能加快移動速度,防止被吃掉。這些操作都是在人類玩家的遊戲過程中經常用到的小技巧。

為了進一步推動決策智慧相關領域的技術人才培養,打造全球領先的原創決策 AI 開源技術生態,OpenDILab(開源決策智慧平臺)將發起首屆 Go-Bigger 多智慧體決策 AI 挑戰賽(Go-Bigger: Multi-Agent Decision Intelligence Challenge)。本次比賽將於 2021 年 11 月正式啟動,使用由 OpenDILab 開源的 Go-Bigger遊戲環境。希望集結全球技術開發者和在校學生,共同探索多智慧體博弈的研究。歡迎對 AI 技術抱有濃厚興趣的選手踴躍參加,和全球的頂尖高手一決勝負!

相關文章

頂部