Deepmind的pysc2星际争霸2强化学习教程(1):建立环境与训练模型
2017年09月05日 由 yining 发表
112343
0
去年,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