Facebook開源遊戲平臺ELF:一個用於實時戰略遊戲研究的輕量級平臺
阿新 • • 發佈:2022-04-28
ELF是一個用於遊戲研究的應用廣泛的(Extensive)、輕量級的(Lightweight)、靈活的(Flexible)平臺,特別適用於實時戰略(RTS)遊戲。在C++方面,ELF採用C++執行緒來併發執行多個遊戲。在Python方面,ELF可以一次性返回一批遊戲狀態,使其對現代RL(強化學習)非常友好。另一方面,在其他平臺(例如OpenAI Gym)中,一個Python介面只能包含一個遊戲例項。這使得遊戲的併發執行有點複雜,而這又是許多現代強化學習演算法的要求。
對於RTS遊戲的研究,ELF配備了一個快速的RTS引擎,以及三個具體的例項環境:MiniRTS、搶旗幟和塔防。 MiniRTS具有實時戰略遊戲的所有關鍵特點,包括收集資源、建築設施和部隊、偵察可感知地區以外的未知地區、防禦或攻擊敵人。使用者可以訪問其內部表現形式,並可以隨意更改遊戲設定。
ELF具有以下幾個特點:
- 廣泛性:任何具有C/C++介面的遊戲都可以通過編寫一個簡單的包裝器來嵌入到這個框架中來。例如,我們已經將Atari遊戲結合到我們的框架中,並可以看到每個核心的模擬速度與單核版本相當,因此這比使用多處理器或Python多執行緒的實現要快得多。
- 輕量級:ELF執行速度非常快,開銷很小。基於RTS引擎的簡單的遊戲(MiniRTS)在MacBook Pro上執行的話,每個核可以跑出每秒40K幀的速度。如果是從頭開始訓練一個模型,則使用6個CPU和1個GPU需花費一天的時間。
- 靈活性:環境和actor(演員,譯者注:可以理解為執行某些固定操作的獨立單元)之間的搭配非常靈活,例如,一個環境對應一個代理(例如Vanilla A3C)、一個環境對應多個代理(例如自動播放/MCTS)的,或多個環境對應一個actor的(例如, BatchA3C、GA3C)。此外,任何構建在RTS引擎頂層的遊戲都可以完全訪問其內部表示和動態。除了高效的模擬器,我們還提供了一個輕巧而又強大的強化學習框架。該框架可以承載大多數現有的RL演算法。在這個開源版本中,我們提供了用PyTorch編寫的最先進的Actor-Critic(演員-評判家)演算法。
程式碼結構
ELF程式碼結構如下。
- 資料夾
elf
下的程式碼用於處理併發模擬,與遊戲無關。 - 資料夾
atari
包含了遊戲Atari(需要ALE)的Python包裝器和模型。 - 資料夾
rts/engine
包含了RTS引擎。rts/game_MC
、rts/game_CF
和rts/game_TD
是基於此引擎構建的三個遊戲。
基本用法
下面是ELF的虛擬碼。
初始化程式碼如下所示:
主迴圈也很簡單:
依賴
需要使用支援C++ 11的C++編譯器(例如,gcc 4.9)。依賴以下庫:
參考文獻
在你使用ELF的時候,請參考arXiv的相關文章(https://arxiv.org/abs/1707.01067)。