DeepMind星际争霸2开源机器学习平台

DeepMind 之前开源了《星际争霸2》的深度强化学习平台,这是个很好的训练环境,学起来也很有趣。下面是一份有关设置环境和训练模型的教程,基于Mac环境。我们会跑一遍训练脚本,使用Deep Q-Network解决CollectMineralShards这个mini-game。享受学习吧~


//依赖
/*
1 IntelliJ ( or PyCharm)
2 Python3
3 StarCraft II (even Starter Pack is working)
4 GIT

*/

先上结果:

这篇教程的结构:

1)安装pysc2

2)Star&Fork pysc2样本

3)克隆pysc2-examples库

4)下载《星际争霸2》地图

5)安装Tensorflow和baseline库

6)用IntelliJ(或PyCharm)打开项目

7)运行训练脚本

8)运行预训练模型

接下来,我们就开始吧!

1)安装pysc2

首先,我们要安装pysc2库。

在终端上输入命令就好了(由于我们使用的是python3,必须输入pip3)。

pip3 install pysc2

然后,你的pysc2就安装好了。

2)Star & Fork pysc2样本

接下来,打开下面的Github链接:

https://github.com/chris-chris/pysc2-examples

这是最重要的一步!记得给我的库加星哦

Fork也来一下(译注:现在Star和Fork的数量都有所增长,Star已经超过150啦)~

3)克隆pysc2样本库

简单一行命令就能克隆这个库了

git clone https://github.com/chris-chris/pysc2-examples

然后你就能在计算机上看见“pysc2-examples”的目录了。

4)下载《星际争霸2》的任务地图

在运行训练脚本之前,我们必须下载mini-game的游戏地图,并将这些地图保存到星际争霸2D的地图目录StarCraft II/Maps。

下载游戏地图https://github.com/deepmind/pysc2/releases/download/v1.0/mini_games.zip

我是Mac用户,因此我的星际争霸2地图位置是

/Applications/StarCraft II/Maps/mini_games

如果你用Windows,可以将地图保存在StarCraft II/Maps/mini_games。

Linux用户请将地图保存在~/StarCraft II/Maps/mini_games

5)安装Tensorflow和baseline库

我们需要更多库!我们需要Google Tensorflow和OpenAI baselines这些库。

使用以下命令:

pip3 install tensorflow

pip3 install baselines

我使用OpenAI's baselines库实现了强化模型。OpenAI's baselines库依赖于Tensorflow,因此我们需要安装Tensorflow。 我认为OpenAI的基线是Deep Q-Network实现里最漂亮的,这也是我用它的原因!

我猜,看这篇文章的人,你们大多数都已经安装TensorFlow库了吧:)

6)用IntelliJ(或PyCharm)打开项目

输入下面的命令行,训练就开始了

python3 train_mineral_shards.py

提醒一下,我强烈建议你在IDE(集成开发环境)上开发强化学习,因为我接下来会使用Debug mode来解释环境变量:) 我目前在IntelliJ上运行这个项目。

运行 IntelliJ 或 PyCharm,打开我们刚刚克隆的项目的文件夹。

设定Project Structure

选择菜单[File > Project Structure]

在Module SDK上选择Python3 SDK。如果你找不到SDK,单击[New...]添加你自己的python3二进制文件。

7)运行训练脚本

好,接下来开始跑训练脚本。右键点击train_mineral_shards.py,选择菜单[Run 'train_mineral_shards']

然后,你就能在控制台看见运行《星际争霸2》的日志了。

对上面的日志做个简短的说明。

steps:发送到海军陆战队的命令数The number of commands

episodes:我们玩的游戏数The number of games

mean 100 episode reward:最近100次游戏获得的平均奖励

mean 100 episode min…:最近100次游戏采矿的平均值

% time spent exploring:花在探路上的时间比(探路/采矿)

我设置训练脚本运行20,000,000步(如果你想在笔记本电脑上运行,建议你将训练步长设置在50万的样子)

8)运行预训练模型

我编码程序在完成所有训练步骤后,将训练好的模型保存在文件夹mineral_shards.pkl里。

act.save("mineral_shards.pkl")

如果你想用这个预训练模型,只要运行enjoy就行啦

右键enjoy_mineral_shards.py,选择菜单[Run 'enjoy_mineral_shards']

然后,你就能在CollectMineralShards地图上看到预训练好的智能体啦~

原文地址:http://chris-chris.ai/2017/08/30/pysc2-tutorial1/返回搜狐,查看更多



  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Pysc2是一个用于创建人工智能星际争霸2(StarCraft II)理程序的Python库。它允许您通过Python代码与StarCraft II进行交互,并使用Python编写的算法来控制游戏单位。以下是一个简单的Pysc2示例,展示如何使用Pysc2库来控制星际争霸2游戏单位: ```python import numpy as np import cv2 import time import pysc2 from pysc2 import maps from pysc2.lib import actions from pysc2.lib import features # 加载StarCraft II地图 pysc2.maps.get("Simple64") # 定义动作和特征 FUNCTIONS = actions.FUNCTIONS FEATURES = features.features_from_game_version(game_version=pysc2.maps.get("Simple64").game_version) # 定义代理类 class SimpleAgent(pysc2.agents.Agent): def __init__(self): super(SimpleAgent, self).__init__() self.attack_coordinates = None def step(self, obs): super(SimpleAgent, self).step(obs) # 如果没有准备好攻击坐标,则选择一个 if self.attack_coordinates is None: player_relative = obs.observation["screen"][features.SCREEN_FEATURES.player_relative.index] x, y = (player_relative == features.PlayerRelative.ENEMY).nonzero() target = [x.mean(), y.mean()] self.attack_coordinates = target # 如果可以攻击,则攻击 if FUNCTIONS.Attack_screen.id in obs.observation["available_actions"]: player_relative = obs.observation["screen"][features.SCREEN_FEATURES.player_relative.index] x, y = (player_relative == features.PlayerRelative.ENEMY).nonzero() if not y.any(): return FUNCTIONS.no_op() target = [x[0], y[0]] return FUNCTIONS.Attack_screen("now", target) # 如果无法攻击,则移动到攻击坐标 player_relative = obs.observation["screen"][features.SCREEN_FEATURES.player_relative.index] x, y = (player_relative == features.PlayerRelative.SELF).nonzero() if not x.any(): return FUNCTIONS.no_op() player = [int(x.mean()), int(y.mean())] if self.attack_coordinates is not None: return FUNCTIONS.Move_screen("now", self.attack_coordinates) return FUNCTIONS.no_op() # 运行代理 agent = SimpleAgent() try: while True: with sc2_env.SC2Env( map_name="Simple64", players=[sc2_env.Agent(sc2_env.Race.terran)], agent_interface_format=features.AgentInterfaceFormat( feature_dimensions=features.Dimensions(screen=84, minimap=64), use_feature_units=True), step_mul=16, game_steps_per_episode=0, visualize=True) as env: # 运行一局游戏 agent.setup(env.observation_spec(), env.action_spec()) # 重置游戏环境 timesteps = env.reset() agent.reset() # 运行游戏 while True: step_actions = [agent.step(timesteps[0])] if timesteps[0].last(): break timesteps = env.step(step_actions) except KeyboardInterrupt: pass ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值