开发 | 星际争霸2人工智能研究环境 SC2LE 初体验

1 前言

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

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

2 测试使用设备

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

3 安装方法

3.1 Mac环境下的安装

(1)安装pysc2

如果权限不够,就加上sudo:

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

Installing collected packages: google-apputils, pygame, future, pysc2
Successfully installed 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)下载Map Packs,mini-game和replay:Blizzard/s2client-proto,https://github.com/deepmind/pysc2/releases/download/v1.0/mini_games.zip

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

(6)创建Maps文件夹

(7)将Map Packs和mini-game压缩包都解压到Maps目录下,密码是iagreetotheeula

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

下面为示意图:

大家可以看到在Mac下既显示了原始的游戏画面,又显示了feature的画面。

3.2 Ubuntu环境下安装

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

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

(3)下载Map Packs,mini-game: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下没有原始游戏画面。

4 测试

(1)基本测试

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

(2)更改Map如使用天梯的Map

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

注意天梯的Map 名称没有LE!

(3)不使用agent,手动玩

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

(4)使用特定agent来玩(比如MoveToBeacon这个mini game)

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

(5)播放replay

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

5 如何进行RL开发

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

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

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

那么如何来编写这个agent呢?

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

基本的程序架构如下:

from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionimport numpyfrom pysc2.agents import base_agentfrom pysc2.lib import actionsfrom pysc2.lib import featuresclass OurAgent(base_agent.BaseAgent):

  def step(self, obs):
    super(OurAgent, self).step(obs)
    #----------------------------------#
    RL Algorithm Here
    #----------------------------------#
    return action

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

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

from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionimport numpyfrom pysc2.agents import base_agentfrom pysc2.lib import actionsfrom pysc2.lib import features_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]class MoveToBeacon(base_agent.BaseAgent):
  """An agent specifically for solving the MoveToBeacon map."""

  def step(self, obs):
    super(MoveToBeacon, self).step(obs)
    if _MOVE_SCREEN in obs.observation["available_actions"]:
      player_relative = obs.observation["screen"][_PLAYER_RELATIVE]
      neutral_y, neutral_x = (player_relative == _PLAYER_NEUTRAL).nonzero()
      if not 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])
    else:
      return actions.FunctionCall(_SELECT_ARMY, [_SELECT_ALL])

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

下面总结一下state , action, reward的获取方式:

(1)state,也就是各种feature map,通过obs.observation["screen"][feature_map_name] 获取

(2)action,可以使用的action,通过obs.observation["available_actions"] 获取

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

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

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

5 小结

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

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

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

原文地址:https://zhuanlan.zhihu.com/p/28471863

原文发布于微信公众号 - AI科技评论(aitechtalk)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏哲学驱动设计

CQRS讨论

今天和同事一起讨论了CQRS(Command Query Responsibility Segregation),过程中,我产生了一些疑问,先记录在这里,以后有...

1887
来自专栏BIT泽清

教你如何提审iOS马甲包不会遇到2.1大礼包或4.3正确姿势分享

App Store 搜索关键词 世界杯 或者 通过链接下载 皇冠Ьet365-世界杯体育赛事直播吧:https://itunes.apple.com/cn/ap...

8885
来自专栏零基础使用Django2.0.1打造在线教育网站

零基础使用Django2.0.1打造在线教育网站(十六):列表分页功能

努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

1831
来自专栏北京马哥教育

余生只够写50行代码,这么写绝对赚翻了

学Python最简单的方法是什么?推荐阅读:Python开发工程师成长魔法 假如有一天死神来找你,警告你最多只能再写50行代码,然后就得随他而去,应该写点什么...

3278
来自专栏一个会写诗的程序员的博客

《Kotlin极简教程》第1章 Kotlin简介

我们这里讲的Kotlin,就是一门以这个Котлин岛命名的现代程序设计语言。它是一门静态类型编程语言,支持JVM平台,Android平台,浏览器JS运行环境,...

962
来自专栏Vamei实验室

协议森林02 小喇叭开始广播 (以太网与WiFi协议)

“小喇叭开始广播啦”,如果你知道这个,你一定是老一辈的人。“小喇叭”是五十年代到八十年代的儿童广播节目。在节目一开始,都会有一段这样的播音:“小朋友,小喇叭开始...

20010
来自专栏张善友的专栏

Entity Framework Code First 支持存储过程

存储过程(Stored Procedure)不仅仅是将多得简直荒唐的业务逻辑塞入数据库的一种方式;它还是避免将多得简直荒唐的存储逻辑塞入应用程序层(applic...

2058
来自专栏進无尽的文章

地图| 高德地图源码级使用大全

高德地图提供包括:web前端、Android、iOS、服务器、小程序等平台的地图服务, 地图功能众多,本文记载的只是自己遇到的一些问题,绝大部分功能只要参照官...

5952
来自专栏令仔很忙

新手学HighCharts(一)----基本使用

最近做的项目需要用到数据分析,图表显示,之前做项目的时候用到过highcharts,不过也只是简单的会用而已,然后再网上查了查highcharts的优点:

1531
来自专栏Python数据科学

这些世界杯球星你真的认识吗?不如通过Python来认识一下吧

回到我们的正题,对于世界杯的球星们,人们知道的一般都是C罗,梅西,德罗巴等巨星,而对一些其它球星却很少了解。对于这些球星,你认识的有多少呢?下面就跟我一起认识一...

962

扫码关注云+社区

领取腾讯云代金券