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

    回覆刪除

張貼留言

這個網誌中的熱門文章

Vim 自動 補完 插件 YouCompleteMe 教學 心得 新手入門 C++ C

怎麼建立一個 Https server?

C pointer to function 函式指標 學習心得