人工智能开始玩《星际争霸2》 我们对它的研究环境进行了测试

本文原作者洪水宋,杜克,原文载于作者的知乎专栏 - 智能单元。

8月10号,DeepMind联合暴雪发布了星际争霸2人工智能研究环境SC2LE,从而使人工智能的研究进入到一个全新的阶段。这次,研究人工智能的小伙伴们可以边玩游戏边做研究了。

为了让更多的朋友了解SC2LE研究环境,我们在第一时间对其进行安装测试,并对DeepMind发布的pysc2代码进行分析,初步了解基于pysc2的RL开发方法。下面我们将一一进行介绍。

测试使用设备

  • Macbook Pro 13寸(MacOS Sierra)
  • Alienware 13inch(Ubuntu 14.04)

安装方法

苹果机环境下的安装

(1)安装pysc2

PIP安装pysc2

如果权限不够,就加上须藤:

sudo pip安装pysc2

程序会自动安装各种依赖:

安装收集的软件包:google-apputils,pygame,future,pysc2 成功安装future-0.16.0 google-apputils-0.4.2 pygame-1.9.3 pysc2-1.0

(2)然后在国服下载mac版的星际争霸客户端:https://www.battlenet.com.cn/account/download/,mac版的,然后安装,30个G,3.16.1版本。

(3)下载完毕可以运行游戏就OK

(4)下载地图包,迷你游戏和重播:Blizzard / s2client-proto,https://github.com/deepmind/pysc2/releases/download/v1.0/mini_games.zip

(5)进入星际争霸2的目录

(6)创建地图文件夹

(7)将地图包和小游戏压缩包都解压到地图目录下,密码是iagreetotheeula

(8)打开终端,输入python -m pysc2.bin.agent --map Simple64进行测试。

下面为示意图:

可以大家看到在苹果下既显示了原始的游戏画面,又显示了功能的画面

Ubuntu的环境下安装

(1)安装pysc2(和Mac相同)

sudo pip安装pysc2

(2)下载Linux版本的星际2:Blizzard / s2client-proto并解压在首页目录下,解压密码:iagreetotheeula

(3)下载地图包,迷你游戏:Blizzard / s2client-proto,https://github.com/deepmind/pysc2/releases/download/v1.0/mini_games.zip。将文件解压到〜/ StarCraft2 / Maps下。

(4)打开终端,输入python -m pysc2.bin.agent --map Simple64进行测试。

下面为两个不同地图的示意图:

Linux的下没有原始游戏画面。

测试

(1)基本测试

python -m pysc2.bin.agent --map Simple64

(2)更改地图如使用天梯的地图

python -m pysc2.bin.agent --map AbyssalReef

注意天梯的地图名称没有LE!

(3)不使用代理,手动玩!

python -m pysc2.bin.play --map MoveToBeacon

(4)使用特定代理来玩(比如MoveToBeacon这个迷你游戏)

python -m pysc2.bin.agent --map MoveToBeacon --agent pysc2.agents.scripted_agent.MoveToBeacon

(5)播放重放

python --m pysc2.bin.play --replay <path-to-replay>

如何进行RL开发

前面只是安装,到这里才是最关键的。要知道如何进行RL开发,要首先知道pysc2的代码是如何运行的。

在上一小结测试中,我们看到第四种可以指定代理所以,我们可以自己编写一个代理文件,从而使得环境运行我们自己的代理。:

python -m pysc2.bin.agent --map <map> --agent <Agent>

那么如何来编写这个代理人呢?

pysc2的代码中为什么构建了一个BaseAgent,我们只需要在BaseAgent的基础上,构造一个新的试剂的类,然后在里面的步骤函数中实现我们的RL算法即可。

基本的程序架构如下:

从__future__导入absolute_import 来自__future__进口部门 从__future__导入print_function 进口numpy 从pysc2.agents import base_agent 从pysc2.lib导入操作 从pysc2.lib导入功能 OurAgent类(base_agent.BaseAgent): def step(self,obs): 超级(OurAgent,self).step(obs) #----------------------------------# RL算法这里 #----------------------------------# 返回动作

其中obs包含所有的观察信息,包括特征图,奖励及可执行动作动作等信息.step这个函数的目标是输出动作给环境执行.RL算法需要处理obs然后输出动作。

我们来看一下pysc2提供的MoveToBeacon的非智能算法:

从__future__导入absolute_import 来自__future__进口部门 从__future__导入print_function 进口numpy 从pysc2.agents import base_agent 从pysc2.lib导入操作 从pysc2.lib导入功能 _PLAYER_RELATIVE = features.SCREEN_FEATURES.player_relative.index _PLAYER_FRIENDLY = 1 _PLAYER_NEUTRAL = 3#beacon / minerals _PLAYER_HOSTILE = 4 _NO_OP = actions.FUNCTIONS.no_op.id _MOVE_SCREEN = actions.FUNCTIONS.Move_screen.id _ATTACK_SCREEN = actions.FUNCTIONS.Attack_screen.id _SELECT_ARMY = actions.FUNCTIONS.select_army.id _NOT_QUEUED = [0] _SELECT_ALL = [0] MoveToBeacon类(base_agent.BaseAgent): “”“专门用于解决MoveToBeacon地图的代理”。“” def step(self,obs): super(MoveToBeacon,self).step(obs) 如果_MOVE_SCREEN在obs.observation [“available_actions”]中: player_relative = obs.observation [“screen”] [_ PLAYER_RELATIVE] neutral_y,neutral_x =(player_relative == _PLAYER_NEUTRAL).nonzero() 如果不是neutral_y.any(): return actions.FunctionCall(_NO_OP,[]) target = [int(neutral_x.mean()),int(neutral_y.mean())] return actions.FunctionCall(_MOVE_SCREEN,[_NOT_QUEUED,target]) 其他: return actions.FunctionCall(_SELECT_ARMY,[_SELECT_ALL])

我们可以看到,上面的代码直接获取了beacon的位置信息(neutral_y,neutral_x),从而直接给出动作。但是为了使用RL算法,我们需要获取特征图的图像信息。然后我发现上面代码中的player_relative就是图像信息,可以直接通过OpenCV的或者PLT输出显示如下图最右边的显示:

下面总结一下状态,动作,奖励的获取方式:

(1)状态,也就是各种功能图,通过obs.observation [“screen”] [feature_map_name]获取

(2)动作,可以使用的动作,通过obs.observation [“available_actions”]获取

(3)奖励,通过obs.reward获取。

知道这些RL关键信息的获取,我们也就可以编写RL代码来玩星际2的小任务了。

值得注意的是,星际2的动作的动作非常复杂,pysc2把动作封装成带参数的函数。比如上面的移动动作,需要靶目标位置的2维参数。所以,如果输出动作是一个复杂的问题官方。的论文中使用了自回归自回归的方式,也就是先输出移动这个动作,然后在此基础上再输出目标,从而形成完整的动作,最后输出。

小结

本文对SC2LE进行了初体验,包括安装,测试和RL开发的代码研究整体来看,DeepMind这次联合暴雪确实做了非常精良的代码工作,SC2LE有以下几个优点:

  1. 对于API封装得很好,可以非常方便的进行RL开发
  2. 直接提供了功能地图信息方便卷积神经网络CNN的使用。
  3. 跨平台支持,特别是对Linux的平台的支持,非常方便广大深度学习开发者的使用。
  4. 提供Replay数据库及Replay接口,为进行模仿学习的研究提供了极大的方便。
  5. 提供了迷你游戏,方便大家从简单入手。
  6. 提供了天梯地图,满足大家挑战高难度的欲望!

总的来说,SC2LE真的是非常友好的一个研究平台,值得大家入手研究,也相信未来会有越来越多的人工智能玩星际2的成果出来!

原文发布于微信公众号 - AI研习社(okweiwu)

原文发表时间:2017-08-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

极客DIY:制作一款智能家用温控器(PART 2)

引文 在上一部分,我主要是对于外壳以及如何利用树莓派完成了一些简单的计划任务,下面将会对其余的计划任务进行制作。 写在前面 这里主要是需要了解作者用到了两个部分...

2268
来自专栏二进制文集

思维导图学 Maven

1472
来自专栏工科狗和生物喵

《实时软件控制设计》MATLAB-PIL测试报告基于Qemu Cortex-M 3的环境

正文之前 首先,跟助教说声抱歉,我们组因为一些因素没有按时完成PIL的测试,还要申请延期。另外也感谢助教的催促,让我们能够在今天下午就完成PIL测试,也算是为本...

4218
来自专栏数据和云

Oracle Database 18c 的10大新特性一览

在 2017 Oracle OpenWorld大会上,关于 Oracle 18c 的一系列新特性已经被披露出来,借助分散在各个会场的公开分享主题和内容、OOW提...

58411
来自专栏图形学与OpenGL

《3D建模初步》参考资料

本门课程主要从3D打印角度来介绍3D建模的简单知识。课程采用免费的3D CAD软件Autodesk 123D Design来具体演示一些简单模型的构建方法,并介...

1261
来自专栏ATYUN订阅号

【学术】厉害了我的哥,国外技术大咖仿造了谷歌的Arts &Culture,找到古代的“你”

当我激动的室友第一次向我展示肖像搜索功能时,我对结果感到很惊讶(也觉得有点受侮辱)。对于那些不熟悉它的人来说,谷歌Arts & Culture的这一功能让你可以...

3514
来自专栏大数据

UC Berkeley提出新型分布式执行框架Ray:有望取代Spark

译者|马卓奇 编辑|Natalie AI 前线导读:下一代人工智能应用程序需要不断地与环境交互,并从这些交互中学习。这对系统的性能和灵活性提出了新的要求,而现有...

4148
来自专栏开源FPGA

基于Xilinx FPGA的视频图像采集系统

         本站点博客将逐步迁移至http://ninghechuanblogs.cn/   本篇要分享的是基于Xilinx FPGA的视频图像采集系统,...

5439
来自专栏极客猴

学爬虫之道

Django 已经算是入门,所以自己把学习目标转到爬虫。自己接下来会利用三个月的时间来专攻 Python 爬虫。这几天,我使用“主题阅读方法”阅读 Python...

1072
来自专栏微信公众号:Java团长

对高并发流量控制的一点思考

在实际项目中,曾经遭遇过线上5W+QPS的峰值,也在压测状态下经历过10W+QPS的大流量请求,本篇博客的话题主要就是自己对高并发流量控制的一点思考。

971

扫码关注云+社区

领取腾讯云代金券