Deepmind的星際爭霸2強化學習教程(1):建立環境與訓練模型
去年,DeepMind開源將星際爭霸II的強化學習環境公之於眾,很多人都為之興奮。
https://deepmind.com/blog/deepmind-and-blizzard-release-starcraft-ii-ai-research-environment/
我是暴雪遊戲的忠實粉絲,尤其是星際爭霸2,所以我把強化學習環境看成是一個學習的好機會,而且也有很多樂趣。我這篇文章將利用星際爭霸2寫一份建立環境和訓練一些模型的入門教程。
前提
- IntelliJ (或者PyCharm)
- Python3
- 星際爭霸2 (甚至啟動包也在工作)
- GIT
本教程是基於Mac環境的。
在文章中,我們將執行訓練指令碼,以使用深度Q-Network來解決CollectMineralShards的迷你遊戲。
當我們執行訓練指令碼時,你可以在如下視訊中看到訓練結果。
https://m.youtube.com/watch?v=xpdQYnnxAko&ebc=ANyPxKpYz12v2bTrItOMkx_0vJfOp7RM9Eh2d2JedrlgTQSx2jKElQYgkorgvlAFdWmaXCEeFJ7oNG3qyrSfq1CA0_mcpBdf4Q
教程大綱
1)安裝pysc2
2)Star & Fork pysc2-examples
3)克隆pysc2-examples庫
4)下載迷你遊戲星際爭霸2地圖
5)安裝Tensorflow,基線庫
6)使用IntelliJ(或PyCharm)開啟專案
7)執行訓練指令碼
8)執行預先訓練的模型
現在開始。
1)安裝pysc2
首先,我們將安裝pysc2庫。你可以在終端上輸入命令。(因為我們使用的是python3,所以你必須輸入pip3)
pip3 install pysc2
然後pysc2安裝完畢。
2)Star & Fork pysc2-examples
接下來,開啟右邊的Github連結。https://github.com/chris-chris/pysc2-examples
這是最重要的一步!
3)克隆pysc2-examples庫
讓我們克隆這個專案。你可以使用下面這個簡單的命令克隆儲存庫。
git clone https://github.com/chris-chris/pysc2-examples
然後,你將在計算機上看到“pysc2-examples”目錄。
4)下載迷你遊戲星際爭霸2地圖
在執行訓練指令碼之前,我們必須下載迷你遊戲地圖。並將這些地圖儲存到StarCraft II/Maps目錄中。
下載迷你遊戲地圖:https://github.com/deepmind/pysc2/releases/download/v1.0/mini_games.zip
我是Mac使用者,下面是我的星際爭霸2地圖的位置
/Applications/StarCraft II/Maps/mini_games
如果你是一個Windows使用者,可以在StarCraft II/Maps/mini_games目錄中儲存地圖。
對於Linux使用者,在 ~/StarCraft II/Maps/mini_games
目錄中儲存地圖。
5)安裝Tensorflow,基線庫
我們需要更多的庫!比如Google Tensorflow和OpenAI基線庫。你可以通過鍵入下面的命令來安裝這些庫。
pip3 install tensorflow
pip3 install baselines
我使用OpenAI的基線庫實現了增強模型。因為OpenAI的基線庫依賴於Tensorflow,所以我們需要安裝Tensorflow。
我認為OpenAI的基線是Deep Q-Network的最好的實現,這也是我使用它的原因!
我希望閱讀本文的大多數讀者已經安裝了Tensorflow庫:)
6)使用IntelliJ(或PyCharm)開啟專案
通過鍵入下面的命令,訓練將開始。
python3 train_mineral_shards.py
我強烈建議你在IDE(整合開發環境)中開發你的強化學習。這是因為我將使用除錯模式來解釋細節環境變數:)我現在在IntelliJ上執行這個專案。
執行IntelliJ或PyCharm,並且開啟我們克隆的專案資料夾。
然後設定Project Structure
.
選擇[File > Project Structure]
選單.
在Module SDK上選擇Python3 SDK。
如果你找不到SDK,請單擊[New...]
按鈕並新增你的python3二進位制檔案。
7)執行訓練指令碼
然後,讓我們執行訓練指令碼。右鍵單擊train_mineral_shards.py,然後選擇[Run 'train_mineral_shards']
選單。
然後在執行星際爭霸2的時候,你會看到控制檯上的日誌。
這是控制檯日誌的簡要說明。
- steps:我們傳送給海軍陸戰隊(marines)的命令的數量。
- episodes: 我們玩的遊戲的集數。
- mean 100 episode reward:上100集的平均獎勵。
- mean 100 episode min…:上100集的平均礦物。
- % time spent exploring:探索(探索和開發)的百分比。
目前,我設定了執行2000萬步的訓練指令碼。(它花費了很多時間,所以如果你想在你的筆記本上執行,我建議你將訓練步驟設定為50萬步)。
8)執行預先訓練的模型
我編寫了程式,在所有訓練步驟之後將訓練過的模型儲存到mineral_shards.pkl檔案中。
act.save("mineral_shards.pkl")
如果你想使用這種預先訓練的模型,你可以執行enjoy指令碼。右鍵單擊 enjoy_mineral_shards.py
,然後選擇[Run ‘enjoy_mineral_shards’]選單。
然後你就可以看到預先訓練的CollectMineralShards地圖。
結論
在本文中,我介紹了設定環境和對模型進行訓練的方式。
未來的教程
- 瞭解Deep Q-Network演算法
- 瞭解星際爭霸2的環境(觀察和行動)
- 在星際爭霸2的迷你遊戲中,開發Deep Q-Network