Google的DeepMind联合暴雪推出的星际争霸2开发环境PySC2,封装了暴雪提供的机器学习API,为强化学习开发提供了很大的方便。本文简单介绍了如何搭建PySC2开发环境,以及如何使用开源代码重现DeepMind星际2论文中的算法。
搭建开发环境
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 录像的路径
例子
自带的一些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只是提取特征的神经网络架构不同,使用了类似的学习算法和参数。
论文使用了神经网络拟合策略函数和价值函数
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