星期五, 9月 15, 2017

[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 利用共同的 framework 一起學習,他們將這個架構簡稱為 BiCNet。

Attribute of BiCNet

  • Vectorised Actor-Critic: vectorised 指的是一個 input 可以輸入多個 agents的資訊。
  • Deterministic Policy
  • Use bidirectional RNN as their actor network and critic network
  • Dynamic Grouping 機制
  • Shared Parameter among all agents
他們使用 BRNN 利用 hidden layer 來 Model agents 之間彼此溝通的行為,這是這篇論文的創新點之一。不過他們團隊並不知道為什麼這樣可行,而僅僅解決了 how 的問題,還不知道 why?

另外精彩的地方我覺得是數學的 Model,他們分為兩個視角來看 Starcraft Combat 問題:

  1. 將 Combat 看作 zero-sum stochastic games (recycle) 定義出整體 Combat 的 reward (隨 step 變化)
  2. Model agents 之間彼此合作緊密度,是否完成共同目標。利用 Top-K list 記錄和當下 agent 合作的其他 agents。在這裡我稱為一個小 group,後續對應的是 dynamic grouping。在這樣的情況下,他們會共享 reward,好像一個小隊生死與共一樣。
最後,他們利用這樣的 framework 學習到了各種互動的策略

  • Coordinated moves without collision
  • Hit and Run tactics
  • Coordinated cover attack
  • Focus fire without overkill
  • Collaborations between heterogeneous agents
雖然這篇論文有些地方寫的不是很清楚而且沒有上 NIPS,但是我覺得裡面有一些想法還是值得我們學習。像是它定義的 action 是針對一個 unit, per unit per agent 並且 action space 的表示法是連續的: [-1. ~ 1, -1. ~ 1., -1. ~ 1.] 對應到 [attack or move, degree, radius]

demo:

  1. youtube: https://www.youtube.com/watch?v=kW2q15MNFug
  2. 騰訊: https://v.qq.com/x/page/a0389j004kk.html
另外,如果你熟知日語的話,也可以看這份投影片: https://rl-tokyo.github.io/resource/20170719-ikki407.pdf

星期一, 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 之旅吧!


學習資源




[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...