项目状态:不再维护!
不幸的是,我无法再进一步开发该项目或为该项目提供支持。
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}},
}