当前位置: 首页 > 资讯

【原创】星际2人工智能环境PySC2入门指南

机器人之家       2017-10-20

Google的DeepMind联合暴雪推出的星际争霸2开发环境PySC2,封装了暴雪提供的机器学习API,为强化学习开发提供了很大的方便。本文简单介绍了如何搭建PySC2开发环境,以及如何使用开源代码重现DeepMind星际2论文中的算法。


StarCraft2


搭建开发环境


PySC2可以直接使用pip安装:


pip install pysc2

如果遇到权限问题,可以在前面加一下sudo.


不是太古老的Python版本(2.7或3.4之前)均支持PySC2。如果操作系统版本不够新的话,可能需要先安装libsdl依赖。


然后是安装3.16.1以上版本的星际争霸2。MacOS或Windows下可以直接通过暴雪官网下载安装。安装到默认位置就可以,PySC2能自动识别。如果需要改变安装位置,需要设置一下SC2PATH环境变量。


因为客户端体积较大(大约30G),如果网速慢的话,可以使用工具通过国服下载。


虽然星际争霸2并不支持Linux, 但暴雪仍为Linux提供了headless客户端。


由于Linux下的星际客户端不显示原始游戏画面,PySC2对Linux平台的兼容性支持也比另外两个平台要弱,因此推荐大家在MacOS或Windows下搭建环境。


最后需要下载地图,包括暴雪提供的最近赛季的天梯地图,以及适用于PySC2的mini-games地图。


下载地图之后,将地图解压到星际2安装位置的Maps文件夹即可:


MacOS: /Applications/StarCraft II/Maps/

Windows: C:\Program Files (x86)\StarCraft II\Maps\

Linux: ~/StarCraft II/Maps/

运行


安装完成后,输入如下命令测试一下安装是否成功:


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

PySC2同时提供了手动玩游戏的接口,主要用于调试:


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

开启手动模式后,按F4可以退出,F5重启,F9保存录像,Pgup/Pgdn调节速度,更多快捷键可以按?查看。


以上快捷键同样适用于录像回放,输入以下命令回放录像:


python -m pysc2.bin.play --replay 录像的路径

例子


examples


自带的一些agent

我们从一个最简单的例子开始,创建一个随处乱跑的agent。


首先,引入要用到的模块:


// numpy用于生成随机数

import numpy


from pysc2.agents import base_agent

PySC2提供了BaseAgent类,直接继承就可以了。


class RandomAgent(base_agent.BaseAgent):

   def __init__(self):

       self.selected = False


   # 随机乱走

   def step(self, obs):

       return numpy.random.rand(6).tolist()

随机乱走的agent有点笨,换一个蒙特卡罗agent吧:


class MonteCarloAgent(base_agent.BaseAgent):

   parameters = ['epsilon', 'gamma']


   def __init__(self,**kwargs):

       super(MonteCarloAgent, self).__init__(**kwargs)

       self.state_action_counter = numpy.zeros((self.n_states, self.n_actions))


   def learn(self):

       for t, (state, action) in enumerate(

               zip(self.observation_path[:, 0].astype(int),

                   self.action_path[:, 0].astype(int))):


           self.state_action_counter[state, action] += 1


           future_return = numpy.sum(

               self.gamma ** numpy.arange(

                   len(self.reward_path[t + 1:])) * self.reward_path[t + 1:])


           alpha = 1. / self.state_action_counter[state, action]

           prediction_error = future_return - self.q[state, action]

           self.q[state, action] += alpha * prediction_error


   def select_action(self):

       return self.select_epsilon_greedy_action_at_t()

重现论文


Google的DeepMind在其论文StarCraft II: A New Challenge for Reinforcement Learning 中介绍了3种强化学习agent, 分别为Atari-net Agent、FullyConv Agent和FullyConv LSTM Agent. 这3种agent只是提取特征的神经网络架构不同,使用了类似的学习算法和参数。


algorithm


论文使用了神经网络拟合策略函数和价值函数

Xiaowei Hu实现了简单重现了论文中的算法(达到基准80%左右),并开放了相关的源代码。


感兴趣的同学可以通过GitHub安装相应实现(除了PySC2外还依赖TensorFlow):


git clone https://github.com/xhujoy/pysc2-agents

运行训练代码:


cd pysc2-agents

python -m main --map=MoveToBeacon

训练代码对机器性能要求较高,代码作者在Nvidia Tesla K40上进行训练,跑了一天才跑完。


机器人网原创文章,未经授权禁止转载。详情见转载须知

本文来自机器人网,如若转载,请注明出处:https://www.jqr.com/news/008083


关键词:人工智能