《星际争霸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, pysc2Successfully 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相同)
sudo pip install pysc2
(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_import from __future__ import division from __future__ import print_functionimport numpy from pysc2.agents import base_agent from pysc2.lib import actions from 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_import from __future__ import division from __future__ import print_functionimport numpyfrom 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有以下几个优点:
对于API封装得很好,可以非常方便的进行RL开发
直接提供了Feature Map信息方便卷积神经网络CNN的使用。
跨平台支持,特别是对Linux平台的支持,非常方便广大深度学习开发者的使用。
提供Replay数据库及Replay接口,为进行imitation learning模仿学习的研究提供了极大的方便。
提供了Mini Game,方便大家从简单入手。
提供了天梯地图,满足大家挑战高难度的欲望!
总的来说,SC2LE真的是非常友好的一个研究平台,值得大家入手研究,也相信未来会有越来越多的人工智能玩星际2的成果出来!
====================================分割线================================
本文作者:思颖
本文转自雷锋网禁止二次转载,原文链接
《星际争霸2》人工智能研究环境 SC2LE 初体验相关推荐
- 多智能体强化学习环境【星际争霸II】SMAC环境配置
多智能体强化学习这个领域中,很多Paper都使用的一个环境是--星际争多智能体挑战(StarCraft Multi-Agent Challenge, SMAC).最近也配置了这个环境,把中间一些步骤记 ...
- win10下星际争霸II和Pymarl环境配置
win10配置星际争霸过程: 下载星际争霸(这里用的是台湾版),设置环境变量,命名为SC2PATH路径,路径为游戏文件所在路径 用conda create创建一个pymarl环境: conda cre ...
- Xcode5 开发入门-环境及初体验
IPhone 的开发有专门的集成开发环境Xcode ,可以在Appstore 上下载最新版本,目前为Xcode 5,下载位置如下: 选择后开始下载,文件比较大,下载需要一段时间. 下载后一般自动完成安 ...
- 人工智能 ChatGPT的使用初体验
文章目录 目录 文章目录 前言 一.ChatGPT是什么? 二.聊天实例 1.代码类问题 2.预测类问题 3.科普类问题 4.唤醒灵魂类问题 5.政策类问题 6.政治类问题 7.尖端技术类问题 8.综 ...
- 探秘AlphaStar:星际争霸人工智能
(声明:此文已发表于<爱上机器人>2019年2月刊,转载请联系作者) 前言 近十年来,人工智能的研究人员们一直在尝试将游戏用作测试和评估人工智能系统的方法.得益于算法的发展和计算能力的 ...
- Win10搭建星际争霸2SC2LE环境
这几天尝试Windows搭建Deepmind的星际争霸2平台,翻了好多博客,感觉都写的不是很好,关键环境和库的下载没有整理出来.https://blog.csdn.net/woaipichuli/ar ...
- Github上重现DeepMind星际争霸强化学习算法的代码调试与问题
最近对于DeepMind应用于星际争霸,训练智能体自发产生游戏策略的问题很感兴趣,因此在网上找了相关资料学习,发现了github上有一个复现的python程序,大喜,遂下之,然python初学,调试过 ...
- 迈向人工智能的下一步-《星际争霸II》
by Daniel Bourke 丹尼尔·伯克(Daniel Bourke) 迈向人工智能的下一步-<星际争霸II> (The Next Step Towards Artificial G ...
- 【转贴】看星际争霸人工智能伯克利如何“主宰”了“2010星际争霸人工智能挑战赛”...
我们集中在伯克利校区里的一个会议室里,局域网的设备散落在我们周围.桌面上堆满了电脑和披萨,屏幕上投影的是一场<星际争霸>的比赛.Oriol Vinyals,一位计算机科学的博士生,正指挥着 ...
- 【星际人工智能】虫群版天网:伯克利如何“主宰”了“2010星际争霸人工智能挑战赛”
我们集中在伯克利校区里的一个会议室里,局域网的设备散落在我们周围.桌面上堆满了电脑和披萨,屏幕上投影的是一场<星际争霸>的比赛.Oriol Vinyals,一位计算机科学的博士生,正指挥着 ...
最新文章
- iOS 实现多个可变 cell 复杂界面的制作
- 逻辑模型设计步骤-粒度层次划分
- html(常用标签)
- 王亚楠:基于强化学习的自动码率调节
- python以下导入包的格式错误的是_ICMP python上的错误数据包
- ROS学习笔记01:安装ROS - 玩小海龟
- PyTorch系列入门到精通——张量操作线性回归
- eclipse报错:“start ruble bundle manager”解决方法
- 150分试卷c语言,连续5道C语言题目一共送150分啊,题目2.一个农场有头母牛,现 爱问知识人...
- RecyclerView 数据刷新的几种方式 局部刷新 notify MD
- STL之容器——介绍
- Python实战:将头像变成动漫风
- 树莓派 博通BCM2835芯片手册
- OPTICS聚类以及python实现
- vue+echarts GL3d中国地图
- 网易云课堂---布尔教育《8小时学会html》 笔记
- php拼音排序,php数组如何按拼音顺序排序
- 爬虫学习(4):自动保存百度云盘资源
- 在网页中使用矢量图标
- 【技术】如何用触摸屏控制变频器?
热门文章
- unturend服务器修改背包,未转变者如何修改背包容量 | 手游网游页游攻略大全
- 计算机应用助理师证,计算机应用助理工程师考的简单吗?吗?
- k8s 1.18.20 kubevirt v0.47.1 创建 windows10 虚拟机
- Linux平台提取DSDT,关于DSDT修改-提取软件以及使用方法【详解】
- Office Word 2016 中Word自带公式编辑器编辑的公式转Mathtype出现omml2mml.xsl 问题的解决方法
- 百度引流推广怎么做?个人如何做百度推广
- phpcms v9摆脱手机门户,轻松搭建wap手机站
- 进击的Libra:路在何方?中国应如何应对?
- Stream Collectors - filtering
- 微软放弃数字图书馆计划