適合AI訓練的遊戲框架

遊資網發表於2021-09-22
筆者在國內一家最早最資深的從事深度學習AI賦能遊戲的公司從事遊戲側的接入開發工作。本文是兩年多來,與AI側同事一起支援了國內外眾多知名大型手遊專案提供智慧AI服務,得到的一些經驗和總結。希望能讓遊戲行業的從業者(尤其是遊戲程式開發人員),瞭解什麼樣的遊戲框架是適合AI訓練的。

在解答之前。需要解釋一下深度學習AI在遊戲中框架中的角色是什麼。可以先簡單的認為深度學習AI最終會是一個特殊“AI客戶端”的存在,它和傳統客戶端一樣,通過協議與伺服器通訊互動。它具體做的事,有點類似於遊戲裡實現“託管離線玩家”用的行為樹(Behaviour Tree)。它用神經網路的預測結果,對映成呼叫遊戲邏輯提供的基礎行為節點,適時的做出合理的行為。

適合AI訓練的遊戲框架

我們先看傳統遊戲框架中最基礎的單機版遊戲的框架設計。會得到下面的結構。

適合AI訓練的遊戲框架

上面的遊戲框架會有以下幾個部分:

  • 遊戲核心邏輯:它負責響應使用者的輸入,以及自定義的Update邏輯。並返回運算結果,並以狀態的形式,給到遊戲的表現層展示出來。
  • 遊戲圖形渲染:表現層的主要邏輯是通過這個部分展示。
  • 輸入控制:專門響應玩家輸入的邏輯,並向核心邏輯傳送指令。
  • 物理引擎(可選)。

使用者輸入可以彙總成:

  • Move:移動玩家在遊戲中控制的角色。
  • Attack:操控玩家在遊戲中的角色產生一個攻擊行為。
  • UseProp:操作玩家在遊戲中的角色產生一個使用道具的行為。

等等行為。

狀態可以彙總成:

  • Position:玩家操作的角色在遊戲世界中的位置。
  • HP:玩家操作的角色血量。
  • UnderAttackEvent:玩家操作的角色被攻擊了的事件。

等等狀態。

考慮到多人線上的遊戲設計,主流的設計思路,有幀同步狀態同步兩個模式。

適合AI訓練的遊戲框架

幀同步的模式,以王者榮耀等MOBA遊戲為代表。

相對單機的那個設計。主要是把使用者輸入的部分,變成了由專門的幀同步伺服器轉發廣播。這樣就能實現“多人遊戲”(當然實際的實現沒這麼簡單)。

適合AI訓練的遊戲框架

狀態同步的模式,以魔獸世界等MMO遊戲為代表。

相對單機的設計。在伺服器接受到了使用者輸入後,會先把部分的核心邏輯在服務端處理(比如攻擊判定,扣血多少等等),最終直接把客戶端需要的狀態資訊同步下去。但不可避免的,依然會有一些操作,尤其是依賴物理引擎的部分,會交由客戶端處理。單機遊戲裡的核心邏輯就分散在了客戶端和狀態伺服器兩個部分裡面。

而更適合AI訓練的遊戲框架。是如下圖所示:

適合AI訓練的遊戲框架

強調遊戲的伺服器端,要有遊戲全部的核心邏輯規則,甚至包括整合遊戲內的物理引擎(可選)。

1.支援到玩家各種行為的後續結果、反饋規則。比如玩家攻擊了一個玩家後,要怎麼扣血。
2.遊戲本身的基礎邏輯。比如玩家包裹裡的食物,會在幾天後會腐敗。
3.場景裡會定期會重新整理出現的道具。

等等,類似這些都是核心邏輯。但不用帶上表現層的部分。

  • 而在介面層面,保持和傳統的C-S協議一致。接收來自客戶端以及AI線上決策伺服器的“使用者輸入”,返回同樣的狀態輸出。
  • 和AI的連線可以用最簡單的TCP socket通訊。AI端做為Server,遊戲伺服器做為Client。這裡的考慮主要是為了利於AI端對於請求的負載均衡。
  • 這樣的適配,最小程度修改了傳統的遊戲框架。

對於強調遊戲的伺服器端,要有遊戲的全套核心邏輯的原因,主要是AI端需要在沒有客戶端的情況下,傳送一個使用者的操作,但伺服器要能處理所有的後續邏輯。比如說AI端說向前跳躍,服務端需要檢測AI端的跳躍是否合法(有無體力,是否被禁錮等等),並且要在真實的物理層面支援跳躍是否中途被障礙物阻擋,落點在哪(可選)。這些都決定了,適合AI訓練的遊戲框架是這樣處理。

目前已知的,符合這種設計的遊戲引擎是Unreal。採用dedicated server的專案,基本上原生支援上述的要求。

以下是更詳細的描述了,做為在強化學習訓練中,做為環境一部分的遊戲伺服器,會被同時啟動大量的(1000+局)單局同時訓練。並且可以支援的不同緯度,更好的適配AI訓練。

適合AI訓練的遊戲框架

監督學習的訓練相對簡單一些。主要是要通過遊戲伺服器,把單局裡的使用者輸入以及狀態的改變,都儲存成記錄(錄影),以便監督學習平臺訓練。常見的問題是傳統伺服器裡並沒有全量的狀態(比如fps遊戲裡玩家攝像機的朝向),會影響訓練效果。

上線後的階段和AI線上決策服是一樣的。

適合AI訓練的遊戲框架

相關文章