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
- hdu---(1054)Strategic Game(最小覆盖边)
- Swagger Starter 1.4.0发布:新增swagger功能开源与全局参数的配置。
- Go语言语法汇总
- 整理的一些模版LCS(连续和非连续)
- 以太坊开发实战(第1部分:智能合约)
- spark2 sql读取数据源编程学习样例2:函数实现详解
- hdu---(4310)Hero(贪心算法)
- 数据库容器化|未来已来
- crontab命令详解
- hdu----(4308)Saving Princess claire_(搜索)
- spark2 sql读取数据源编程学习样例1
- golang的一个分页方法
- spark2 sql读取json文件的格式要求
- 容器化RDS|调度策略
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PAT (Advanced Level) Practice 1145 Hashing - Average Search Time (25分)
- Centos 7使用 rpm 安装 MySQL 5.7
- Leetcode 300. 最长上升子序列(n方dp,nlogn贪心+二分查找)
- select 进阶查询
- Codeforces Round #627 (Div. 3) E. Sleeping Schedule (DP)
- PAT (Advanced Level) Practice 1144 The Missing Number (20分)
- JDBC 基础操作
- Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) C. Remove Adjacent
- MySQL 存储过程
- MySQL 约束
- MySQL 中的流程控制语句
- MySQL 权限操作
- MySQL 事务
- Java 随机生成四则运算式并生成答案
- MySQL 常用函数汇总