《星际争霸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

pip install pysc2

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

sudo pip install pysc2

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

 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-protohttps://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相同)

sudo pip install pysc2

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

(3)下载Map Packs,mini-game:Blizzard/s2client-protohttps://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_import
from __future__ import division
from __future__ import print_function

import numpy
from pysc2.agents import base_agent
from pysc2.lib import actions
from pysc2.lib import features

class 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_import
from __future__ import division
from __future__ import print_function

import numpy

from pysc2.agents import base_agent
from pysc2.lib import actions
from 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的成果出来!

====================================分割线================================

本文作者:思颖

本文转自雷锋网禁止二次转载,原文链接

时间: 2024-08-04 14:25:36

《星际争霸2》人工智能研究环境 SC2LE 初体验的相关文章

堪比沃森的游戏AI星际争霸用于人工智能

昨日,由IBM和美国德克萨斯大学联合研制的超级电脑"沃森(Watson)"在美国最受欢迎的智力竞猜电视节目<危险边缘>击败了该节目有史以来最成功的两个选手肯·詹宁斯和布拉德·拉特,这是自1997年"深蓝"战胜国际象棋世界冠军卡斯帕罗夫之后,超级电脑又一次在"人机大战"中战胜了人类. 科学家们一直在孜孜不倦的研制人工AI,希望有朝一日电脑也能像人类一样思考.其实我们所玩的众多游戏里,也有不同程度的AI设计,并有人对此展开了研究. IBM

DeepMind发布《星际争霸 II》深度学习环境

上个月,DeepMind和暴雪终于开源了<星际争霸II >的机器学习平台.本文介绍了基于星际争霸II游戏的强化学习环境SC2LE(<星际争霸II >学习环境). 论文描述<星际争霸II >行动和奖励规范,并提供一个开源的Python界面,用于与游戏引擎进行通信.暴雪提供游戏输入输出的API,DeepMind又做了层基于Python的封装. 除了主要的游戏地图,他们提供了一套专注于<星际争霸II >游戏不同元素的迷你游戏.对于主要的游戏地图,还提供了一个伴随专

以《星际争霸》为例,阿里多智能体协作网络BiCNet展现人工集体智能无限潜力

阿里巴巴认知计算实验室与伦敦大学学院计算机系合作,以游戏"星际争霸1"(下简称"星际")中的微观战斗场景为测试环境,深入地研究了多个 AI 智能体之间的协作问题,旨在通过协作智能解决人类不擅长的问题.该研究引入的多智能体双向协调网络(BiCNet )可以自动学习各种最佳策略来使多个智能体协同作战,从无碰撞移动到基本的攻击和逃跑策略,再到复杂的掩护攻击和集中火力攻击.该研究所用的方法优于目前已有的最先进方法,多智能体协作完成复杂任务,显示出了在现实世界中电商.游戏.健

星际争霸2韩国联赛9月开启奖金达56万人民币

8月6日最新消息,据韩国媒体报道, 韩国gretech公司将举办<星际争霸2:自由之翼>联赛.今年举办三次公开赛,冠军奖金1亿韩元(约合人民币56万) 韩国gretech公司8月5日发布了,今年9月开始的"全球星际争霸2联赛(英文缩写:GSL)"计划."星际争霸2联赛"以两种形式进行.一是正式联赛,第一届正式联赛2011年开始:二是选拔正式联赛选手的"星际争霸2 OPEN(公开)联赛". 今年将有共三次的"星际争霸2 OPE

DT科技评论第14期:暴雪《星际争霸2》将进行AI开源

DT科技评论 Data Technology Review 第 14 期           人民网研究院,阿里云研究中心 本期目录 CEO对话:阿里.英特尔携手 深度布局人工智能 与漏洞赛跑 美安全专家给出9点经验和建议 英特尔收购VR技术公司Voke 进军沉浸式体育赛事市场 Adobe推出Sensei人工智能平台 让软件变智能 暴雪<星际争霸2>将进行AI开源 并与AlphaGo合作 日本力推自动驾驶 要在2030年实现交通事故"零死亡" Facebook发布手机版机器

专访阿里研究员袁全:从 AI 玩《星际争霸》谈认知智能的现状与趋势

不同于以提升点击率和转化率等优化指标为主的机器学习模型,认知计算以实现算法和智能化为核心,训练智能体的自主学习能力,以及多个智能体之间的协作和配合能力,和原来优化大数据和算法具有很大的区别.近日,笔者就认知计算.应用场景.算法优化.深度学习以及云计算&大数据技术的关系等问题与阿里认知计算实验室研究员.资深总监袁全进行了深入探讨. 阿里认知计算实验室研究员.资深总监袁全(左一) 深耕细作,瞭望人工智能新征程 "人工智能时代,我们专注认知计算研究,以积累核心算法系统为首要目标"--

中科院自动化所拿下星际争霸AI竞赛第四名,顺便发布了一个训练AI“大局观”的数据集

上周日,互动数字娱乐AI大会(AIIDE)2017中的星际争霸AI竞赛落下帷幕.这一竞赛是即时战略(RTS)游戏AI比赛中最重要的比赛之一,暴雪.DeepMind和Facebook人工智能研究院等机构也有赞助.两周的车轮战中共进行了41580场1v1比赛,28个参赛AI中每两个之间也平均比赛了110场. DeepMind 和 Facebook 近两年在星际争霸AI研发上动作频频,Facebook 也拿出名为 CherryPi 的机器学习AI亲自参加了这场比赛,但只以69%的胜率拿到第6名.面对这

【阿法狗只是小儿科】5年内,AI将问鼎星际争霸,横扫人类玩家

本文讲的是5年内,AI将问鼎星际争霸,横扫人类玩家,对于人类来说,星际争霸是难度系数最高的游戏.而这一切即将改变.星际争霸AIIDE AI大赛负责人表示,五年内AI将能打败人类玩家,占据星际争霸主导权.这将会给医疗.技术中海量数据处理方式带来巨变. 接下来两周,纽芬兰纪念大学的一个小房间,将会成为银河系争霸的战场. 这既是银河系克普鲁星区主导权的争夺赛:也是AI掌握人类复杂性的一种探索. 纽芬兰纪念大学的一位计算机科学教授 David Churchill说,"这是我们对人工智能做过的最复杂尝试.

重磅 | 阿里推出多智能体双向协调网络BicNet,玩《星际争霸》堪比人类

过去十年中,人工智能取得了长足的进步,在图像和语音识别上已经在某种程度上超越了人类.而通过反馈奖励,单个的AI智能体也能在雅达利这样的视频游戏和围棋中战胜人类. 但人类真正的智能还包括了社会和集体智能,这也是实现通用智能必不可少的.就像虽然单个蚂蚁的智能有限,但通过协作它们能狩猎,能筑巢,能发动战争.毫无疑问,人工智能的下一个挑战就是让大规模的AI智能体学习人类水平的协作与竞争. 协作的一个例子就是星际这样的即时战略游戏.雷锋网消息,最近阿里巴巴与伦敦大学的研究人员们,就在一篇论文中展示了如何用