星期一, 9月 04, 2017

Build Starcraft Learning Environment (using TorchCraft) 中文教學


前言

自從 AlphaGo 戰勝世界棋王李世以來,AI 還有 Deep Learning 至今火紅。DeepMind 將他們下一個研究的目標定錨為 Starcraft 這樣的 Real-Time Strategy Game 即時戰略遊戲。

在 8月的時候,DeepMind 與 Blizzard 合作釋出了適用於 Starcraft 2 的學習套件: pysc2。Blizzard 也是出了相應的 API protocol,目前實作 C++ 的版本。開拓了機器學習專家以及資料科學家的新戰場。

在這裡,我想要分享的是在 Starcraft 1代 如何搭建機器學習的環境,主要是利用 Facebook 發布的 TorchCraft 進行資料的串接處理。

需要的套件軟體

  • Starcraft: Brood War 1.16.1
  • BWAPI 4.1.2
  • TorchCraft 1.3.0/1.0.2
  • Torchcraft-py
  • gym-starcraft
我們將會在 Windows 端安裝遊戲以及 BWAPI 和 TorchCraft (server)。在 Linux 安裝 TorchCraft (client), Torchcraft-py, gym-starcraft

Installation

BWAPI 是與 Starcraft: Brood War 溝通的 API,在研究 RTS Game AI 的時候,主要的遊戲就是 Starcraft: Brood War (以下稱為 SC:BW) 以及 Starcraft2,並且透過自訂遊戲的方式來進行學習及遊玩。

Install Starcraft: Brood War
我們可以到 ICCup 的網站下載遊戲。https://iccup.com/starcraft/content/news/iccup_updated_to_1.16.1.html

Install BWAPI
然後到 BWAPI Github 頁面安裝需要的 API 版本。在這裡,我選定的版本是 4.1.2,因為目前 TorchCraft 尚未支援 BWAPI 4.2.0。在安裝的時候,不管 SC:BW, BWAPI 要安裝到哪一個路徑都可以,但是建議安裝在可以便於修改檔案的路徑下,因為之後再設定的時候,會必須要修改 BWAPI configuration file。

在這裡唯一要注意的事情是 BWAPI 安裝成功後,會將 bwapi-data 這個資料夾安裝在預設的路徑。要怎麼看預設路徑呢?在安裝的資料夾下打開 Chaoslauncher.exe,在 Settings 的部分就會看到 Starcraft 遊戲預設執行的路徑。如果這個路徑跟你的遊戲路徑不相符,並且你的遊戲資料夾內沒有 bwapi-data 這個資料夾的話,你必需要重新安裝 BWAPI。因為 bwapi-data 會安裝載 Installapth 下。

步驟
  1. 在 Chaoslauncher.exe 的 settings 設定 Starcraft Installpath,這樣重新安裝的時候才會把 bwapi-data 安裝在對的地方。
  2. 將 BWAPI 重新安裝一次,安裝在 BWAPI 的原路徑即可,主要是我們要產生 bwapi-data


附帶一提,Networkport 的地方,因為我們使用 TorchCraft 的關係,會跟他的設定無關。不要認為在 Chaoslauncher.exe 設定的 Networkport 就是稍後 TorchCraft 的 port。

安裝完 BWAPI 之後,點選 Config 進行 BWAPI 的設定。這個設定檔會在 $Starcraft/bwapi-data/bwapi.ini。沒有意外,應該會直接跳出記事本。如果檔案不見了則會發生 Exception,此時你可以到這裡複製一份:https://github.com/bwapi/bwapi/blob/master/Release_Binary/Starcraft/bwapi-data/bwapi.ini


按下 Start 如果跳出 SC:BW 的視窗就代表安裝成功啦!


Install TorchCraft 1.3.0/1.0.2 (torchcraft-py 要用舊版 TorchCraft)
你會問我們現在有了 BWAPI 不是就可以開始編寫程式了嗎? 是的,可以寫 C++, JAVA。
那為什麼還需要 TorchCraft? 據我的了解,TorchCraft 是利用 Torch 這個科學運算套件來建構學習的環境,並且對於資料有先做過 Formalization。對我個人而言,最重要的是因為他實作了 Server-Client 的架構,當遊戲執行端作為 Server, Machine Learning 端作為 Client。這樣我們就可以在 Client 端擴充運算資源就好!

TorchCraft 的實作利用了 ZeroMQ 讓 Client, Server 彼此之間可以通訊。
在這裡只要安裝好 BWAPI 後,照著官方的步驟應該不會有太大問題:


如果你是使用Mac的話,在安裝 TorchCraft 是會發生錯誤的。所以 Mac 不能使用TorchCraft 的 Client。不過!因為我們有了 TorchCraft Server (Windows) 所以 ZeroMQ 之間的通訊是可以使用的。在這樣的前提之下,我們可以使用 alibaba/torchcraft-py 作為我們的 Client。

TorchCraft 也是有 Configuration 檔的,如果你有乖乖的按照 TorchCraft 的安裝步驟裝完,應該會看到我們要複製 torchcraft.ini 到 bwapi-data 這個資料夾下面。我們有了 ZeroMQ 總要知道那些資料丟到哪一個 Port 對吧? 這個 Port 就是在 torchcraft.ini 中設定的。跟 Chaoslauncher settings 的 Networkport 是不一樣的設定不要搞混了。

如果你在 Client 端是使用 Lua 來編寫你的 Machine Learning Program 的話,基本上到這裡整個安裝就結束了。但是如果你想要使用 Python 來編寫你的程式的話,就繼續往下看吧!


Install torchcraft-py & gym-starcraft
搭配的 TorchCraft 為 1.0.2
torchcraft-py: https://github.com/alibaba/torchcraft-py
gym-starcraft: https://github.com/alibaba/gym-starcraft

這兩個套件都是 Alibaba 作的,torchcraft-py 實作了 TorchCraft Client 的 Python 2.7 版,gym-starcraft 則是利用 OpenAI gym 作為 Reinforcement Learning 的環境。

使用 Mac 的朋友利用 torchcraft-py 也可以跟 Linux 一樣作為 Client 端來簡易的編寫你的程式! 雖然 torchcraft-py & gym-starcraft 的文件寫的簡略,但是在安裝上應該不會碰到什麼嚴重的問題。

最後,就可以開始寫我們的 Learning Agent 了!


Go Programming

步驟:
  1. 在 Windows 端用系統管理員開啟 Chaoslauncher.exe,進到地圖畫面的時候要等待 Client 連接,這時候可能會讓你誤以為遊戲當機了。
  2. 在 TorchCraft Client 端,執行你要執行的 Example Scripts。在執行的那剎那,你會看到遊戲畫面開始動作了!這時候就是成功了。
  3. 開始你的 AI 之旅吧!


學習資源




1 則留言:

  1. 我自己在測試阿里巴巴做的 API 時,在 BWAPI 4.1.2, Torchcraft 1.0.2 的情況下,restart command 是無效的。這對我來說影響很大,因為初期訓練時,一個 Episodes 可能無法很快的結束,希望利用 restart command 讓遊戲再次重新遊玩,可是目前好像無法 support。

    回覆刪除

[Paper note] Multiagent Bidirectionally-Coordinated Nets for Learning to Play StarCraft Combat Games

Paper:  https://arxiv.org/abs/1703.10069 這篇論文是由 Alibaba & UCL共同發表的,並投稿到 NIPS 2017。他們發表了一個 Multi-agent framework 讓 agents 利用共同的 framew...