專案狀態:不再維護!
不幸的是,我無法再進一步開發該專案或為該專案提供支援。
Reaver 是一個模組化深度強化學習框架,專注於各種基於《星海爭霸 II》的任務,追隨 DeepMind 的腳步,透過玩具有類人介面的現代電玩遊戲和限制。這包括觀察與人類玩家感知相似(儘管不相同)的視覺特徵,並從人類玩家擁有的類似選項池中選擇行動。有關更多詳細信息,請參閱《星海爭霸 II:強化學習的新挑戰》一文。
儘管開發是由研究驅動的,但 Reaver API 背後的理念類似於《星海爭霸 II》遊戲本身 - 它可以為該領域的新手和專家提供一些東西。對於業餘程式設計師來說,Reaver 提供了透過僅修改代理程式的一小部分且孤立的部分(例如超參數)來訓練 DRL 代理程式所需的所有工具。對於資深研究人員來說,Reaver 提供了簡單但效能最佳化的模組化架構程式碼庫:代理程式、模型和環境是解耦的,可以隨意交換。
雖然 Reaver 的重點是《星海爭霸 II》,但它也完全支援其他流行環境,特別是 Atari 和 MuJoCo。 Reaver 代理演算法根據參考結果進行驗證,例如,PPO 代理程式能夠匹配近端策略最佳化演算法。請參閱下文以了解更多詳情。
安裝 Reaver 最簡單的方法是透過PIP
套件管理器:
pip install reaver
您也可以透過輔助標誌安裝其他附加功能(例如gym
支援):
pip install reaver[gym,atari,mujoco]
如果您打算修改Reaver
程式碼庫,您可以透過從原始程式碼安裝來保留其模組功能:
$ git clone https://github.com/inoryy/reaver-pysc2
$ pip install -e reaver-pysc2/
透過使用-e
標誌安裝, Python
現在將在指定資料夾中尋找reaver
,而不是site-packages
儲存。
請參閱 wiki 頁面,以了解有關在 Windows 上設定 Reaver 的詳細說明。
但是,如果可能,請考慮使用Linux OS
- 出於效能和穩定性方面的考量。如果您希望看到代理程式在啟用完整圖形的情況下執行,您可以在 Linux 上儲存代理程式的重播並在 Windows 上開啟它。下面列出的錄影就是這樣製作的。
如果您想在其他受支援的環境中使用 Reaver,則也必須安裝相關軟體包:
您只需四行程式碼即可在多個並行運行的《星海爭霸 II》環境中訓練 DRL 代理程式!
import reaver as rvr
env = rvr . envs . SC2Env ( map_name = 'MoveToBeacon' )
agent = rvr . agents . A2C ( env . obs_spec (), env . act_spec (), rvr . models . build_fully_conv , rvr . models . SC2MultiPolicy , n_envs = 4 )
agent . run ( env )
此外,Reaver 還配備了高度可設定的命令列工具,因此這項任務可以簡化為簡短的一行!
python -m reaver.run --env MoveToBeacon --agent a2c --n_envs 4 2> stderr.log
透過上面的行,Reaver 將使用一組預先定義的超參數來初始化訓練過程,這些超參數專門針對給定的環境和代理進行了最佳化。一段時間後,您將開始在終端機螢幕上看到包含各種有用統計資料的日誌。
| T 118 | Fr 51200 | Ep 212 | Up 100 | RMe 0.14 | RSd 0.49 | RMa 3.00 | RMi 0.00 | Pl 0.017 | Vl 0.008 | El 0.0225 | Gr 3.493 | Fps 433 |
| T 238 | Fr 102400 | Ep 424 | Up 200 | RMe 0.92 | RSd 0.97 | RMa 4.00 | RMi 0.00 | Pl -0.196 | Vl 0.012 | El 0.0249 | Gr 1.791 | Fps 430 |
| T 359 | Fr 153600 | Ep 640 | Up 300 | RMe 1.80 | RSd 1.30 | RMa 6.00 | RMi 0.00 | Pl -0.035 | Vl 0.041 | El 0.0253 | Gr 1.832 | Fps 427 |
...
| T 1578 | Fr 665600 | Ep 2772 | Up 1300 | RMe 24.26 | RSd 3.19 | RMa 29.00 | RMi 0.00 | Pl 0.050 | Vl 1.242 | El 0.0174 | Gr 4.814 | Fps 421 |
| T 1695 | Fr 716800 | Ep 2984 | Up 1400 | RMe 24.31 | RSd 2.55 | RMa 30.00 | RMi 16.00 | Pl 0.005 | Vl 0.202 | El 0.0178 | Gr 56.385 | Fps 422 |
| T 1812 | Fr 768000 | Ep 3200 | Up 1500 | RMe 24.97 | RSd 1.89 | RMa 31.00 | RMi 21.00 | Pl -0.075 | Vl 1.385 | El 0.0176 | Gr 17.619 | Fps 423 |
Reaver 應快速收斂到約 25-26 RMe
(平均劇集獎勵),這與 DeepMind 在該環境中的結果相符。具體訓練時間取決於你的硬體。上面的日誌是在配備 Intel i5-7300HQ CPU(4 核心)和 GTX 1050 GPU 的筆記型電腦上產生的,訓練時間約為 30 分鐘。
Reaver 完成訓練後,您可以透過將--test
和--render
標誌附加到單行程式碼來查看它的效能。
python -m reaver.run --env MoveToBeacon --agent a2c --test --render 2> stderr.log
配套的 Google Colab 筆記本可用於線上試用 Reaver。
許多現代 DRL 演算法依賴在多個環境中同時並行執行。由於Python有GIL,因此該功能必須透過多處理來實現。大多數開源實作都使用基於訊息的方法(例如 Python multiprocessing.Pipe
或MPI
)來解決此任務,其中各個進程透過 IPC 發送資料來進行通訊。對於 DeepMind 和 openAI 等公司所採用的大規模分散式方法來說,這是一種有效且很可能唯一合理的方法。
然而,對於典型的研究人員或愛好者來說,更常見的情況是只能存取單機環境,無論是筆記型電腦還是 HPC 叢集上的節點。 Reaver 透過以無鎖方式使用共享記憶體專門針對這種情況進行了最佳化。這種方法可顯著提高《星海爭霸 II》取樣率高達 1.5 倍的效能(一般情況下可達到高達 100 倍的加速),而瓶頸幾乎完全受到 GPU 輸入/輸出管道的限制。
Reaver 的三個核心模組envs
、 models
和agents
幾乎完全相互獨立。這確保了一個模組中的擴充功能可以無縫整合到其他模組中。
所有設定均透過 gin-config 處理,並且可以輕鬆共用為.gin
檔案。這包括所有超參數、環境參數和模型定義。
在嘗試新穎的想法時,快速獲得回饋非常重要,但這對於像《星海爭霸 II》這樣的複雜環境來說通常是不切實際的。由於 Reaver 是採用模組化架構建構的,因此它的代理實作實際上與《星海爭霸 II》完全無關。您可以對許多流行的遊戲環境(例如openAI gym
)進行直接替換,並首先驗證實作是否適用於這些環境:
python -m reaver.run --env CartPole-v0 --agent a2c 2> stderr.log
import reaver as rvr
env = rvr . envs . GymEnv ( 'CartPole-v0' )
agent = rvr . agents . A2C ( env . obs_spec (), env . act_spec ())
agent . run ( env )
目前 Reaver 支援以下環境:
CartPole-v0
上測試)PongNoFrameskip-v0
上測試)InvertedPendulum-v2
和HalfCheetah-v2
上測試) 地圖 | 掠奪者 (A2C) | DeepMind SC2LE | DeepMind ReDRL | 人類專家 |
---|---|---|---|---|
移動到信標 | 26.3 (1.8) [21, 31] | 26 | 27 | 28 |
收集礦物碎片 | 102.8 (10.8) [81, 135] | 103 | 196 | 177 |
擊敗蟑螂 | 72.5 (43.5) [21, 283] | 100 | 303 | 215 |
尋找並擊敗小狗 | 22.1 (3.6) [12, 40] | 45 | 62 | 61 |
擊敗小狗和爆蟲 | 56.8 (20.8) [21, 154] | 62 | 第736章 | 第727章 |
收集礦物和天然氣 | 2267.5 (488.8) [0, 3320] | 3,978 | 5,055 | 7,566 |
建造海軍陸戰隊 | -- | 3 | 123 | 133 |
Human Expert
結果由 DeepMind 從大師級的玩家收集。DeepMind ReDRL
指的是關係深度強化學習文章中所描述的當前最先進的結果。DeepMind SC2LE
結果發表在《星海爭霸 II:強化學習的新挑戰》一文。Reaver (A2C)
是透過訓練reaver.agents.A2C
代理程式收集的結果,在可用硬體上盡可能複製SC2LE
架構。透過在--test
模式下運行經過訓練的代理100
劇集,計算劇集總獎勵來收集結果。列出的是平均值、標準差(在括號中)以及最小值和最大值(在方括號中)。地圖 | 樣品 | 劇集數 | 大約。時間(小時) |
---|---|---|---|
移動到信標 | 563,200 | 2,304 | 0.5 |
收集礦物碎片 | 74,752,000 | 311,426 | 50 |
擊敗蟑螂 | 172,800,000 | 1,609,211 | 150 |
尋找並擊敗小狗 | 29,760,000 | 89,654 | 20 |
擊敗小狗和爆蟲 | 10,496,000 | 273,463 | 15 |
收集礦物和天然氣 | 16,864,000 | 20,544 | 10 |
建造海軍陸戰隊 | - | - | - |
Samples
是指一種環境中observe -> step -> reward
鏈的總數。Episodes
是指 PySC2 所傳回的StepType.LAST
標誌的總數。Approx. Time
是在配備 Intel i5-7300HQ
CPU(4 核心)和GTX 1050
GPU 的laptop
上的近似訓練時間。請注意,我沒有投入太多時間進行超參數調整,主要專注於驗證代理是否能夠學習,而不是最大化樣本效率。例如,第一次嘗試MoveToBeacon
需要大約 400 萬個樣本,但是經過一番嘗試後,我能夠使用 PPO 代理將其一直減少到 102,000 個(約減少 40 倍)。
平均劇集獎勵與 std.dev 之間填充。點擊放大。
代理商在所有六個迷你遊戲中執行的影片記錄可在線觀看:https://youtu.be/gEyBzcPU5-w。在左邊的影片中,智能體以隨機初始化的權重進行操作,並且沒有經過任何訓練,而在右邊的影片中,他接受了目標分數的訓練。
研究的可重複性問題最近已成為科學界許多爭論的主題,強化學習也不例外。 Reaver 作為一個科學計畫的目標之一是幫助促進可重複的研究。為此,Reaver 捆綁了各種簡化流程的工具:
為了在可重複性方面領先,Reaver 捆綁了所有六個迷你遊戲的預訓練權重和完整的 Tensorboard 摘要日誌。只需從發布選項卡下載實驗存檔並將其解壓縮到results/
目錄即可。
您可以將--experiment
標誌附加到reaver.run
指令來使用預先訓練的權重:
python reaver.run --map <map_name> --experiment <map_name>_reaver --test 2> stderr.log
如果啟動tensorboard --logidr=results/summaries
則可以使用 Tensorboard 記錄。
您也可以透過 Aughie Boards 直接在線查看它們。
掠奪者是星海爭霸遊戲宇宙中一個非常特殊且主觀上可愛的神族單位。在《星海爭霸:母巢之戰》版本中,掠奪者因緩慢、笨拙而臭名昭著,而且由於遊戲中人工智慧的錯誤,如果單獨放置,它往往幾乎毫無用處。然而,在那些投入時間來掌握該單位的專注玩家手中,掠奪者成為遊戲中最強大的資產之一,經常在錦標賽獲勝中發揮關鍵作用。
Reaver 的前身,簡稱pysc2-rl-agent
,是在 Ilya Kuzovkin 和 Tambet Matiisen 的監督下在塔爾圖大學作為學士論文的實踐部分開發的。您仍然可以在 v1.0 分支上存取它。
如果您遇到與程式碼庫相關的問題,請在 GitHub 上開啟一個票證並盡可能詳細地描述它。如果您有更一般性的問題或只是尋求建議,請隨時給我發送電子郵件。
我也是一個活躍且友善的 SC2AI 線上社群的自豪成員,我們主要使用 Discord 進行交流。歡迎各種背景和專業水平的人士加入!
如果您發現 Reaver 對您的研究有用,請考慮使用以下 bibtex 來引用它:
@misc{reaver,
author = {Ring, Roman},
title = {Reaver: Modular Deep Reinforcement Learning Framework},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/inoryy/reaver}},
}