# On Reinforcement Learning for Full-length Game of StarCraft

> On Reinforcement Learning for Full-length Game of StarCraft

星际争霸II对强化学习提出了巨大挑战。 主要困难包括巨大的状态空间，不同的动作空间，长视野等。在本文中，我们研究了一套星际争霸II全长游戏的强化学习技巧。我们研究一种分层方法，其中层次结构涉及两个抽象层次。一个是从专家的示范轨迹中提取的宏观行动，它可以将行动空间减少一个数量级但仍然有效。 另一种是双层分层架构，它是模块化的，易于扩展。 我们还研究了一种课程转移学习方法，该方法将代理从最简单的对手训练到最简单的对手。在64×64地图上并使用限制性单位，我们在具有4个GPU和48个CPU线程的单台机器上训练代理。我们对难度级别1的内置AI实现了超过99％的获胜率。 通过课程转移学习算法和战斗模型的混合，我们可以在几天内对最困难的非作弊内置AI（7级）实现超过93％的中奖率。 我们希望这项研究能够为未来的大规模强化学习研究提供一些启示。

## 方法

### Hierarchical Architecture

我们的分层架构如图1所示。有两种类型的策略运行无关紧要的时间尺度。 控制器决定基于当前观察的每个长时间间隔选择子策略，并且子策略在每个短时间间隔内选择宏动作。

![](https://2281160879-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LaNHyhKoX7GdL4Ytevq%2F-Lc067wqlXUroL76IGND%2F-Lc06ULdGkeQ3pnGL25a%2Fimage.png?alt=media\&token=4bcd292a-0d0f-4361-b143-3c8d7ceefbff)

Controller根据观察状态选择子策略： $$a\_{t\_{c}}^{c}=\Pi\left(s\_{t\_{c}}^{c}\right), \quad s\_{t\_{c}}^{c} \in S\_{c}$$ ，子策略选择宏动作 $$a\_{t\_{i}}^{i}=\pi\_{i}\left(s\_{t\_{i}}^{i}\right)$$ ，回报函数为一个周期内子策略的总回报 $$r\_{t\_{c}}^{c}=r\_{t\_{i}}^{i}+r\_{t\_{i}+1}^{i}+\ldots+r\_{t\_{i}+K-1}^{i}$$ 。由于控制网络每个固定时间间隔K调用子网，因此高级网络的总执行步长变为T / K step。

### Generation of Macro-actions

我们通过专家轨迹的数据挖掘获得宏观行动空间。

![](https://2281160879-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LaNHyhKoX7GdL4Ytevq%2F-Lc067wqlXUroL76IGND%2F-Lc07Tq6pRJphwHCYcA3%2Fimage.png?alt=media\&token=d3f195ee-10de-4e67-84f6-3398c361b5f3)

### Training Algorithm

我们的体系结构的训练过程在算法1中显示，可以归纳为以下内容。 首先，我们初始化控制器和子策略。 然后我们运行Z次的迭代并在每次迭代中运行M次剧集。 在每次迭代开始时，我们将清除所有重放缓冲区。 在每集中，我们收集控制器和子策略的轨迹。 在每次迭代结束时，我们使用重放缓冲区来更新控制器和子策略的参数。我们使用PPO算法优化网络，并且加入了熵损失。

![](https://2281160879-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LaNHyhKoX7GdL4Ytevq%2F-Lc067wqlXUroL76IGND%2F-Lc07yGaamcvhHNTXMmW%2Fimage.png?alt=media\&token=9d36377c-6b5c-4bdc-82d3-380676c7d1fc)

![](https://2281160879-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LaNHyhKoX7GdL4Ytevq%2F-Lc067wqlXUroL76IGND%2F-Lc07gTew0NZiUw9--My%2Fimage.png?alt=media\&token=e5ce6ec4-53ea-4392-be07-9074e615ff3f)

### Reward Design

本文探讨了三种类型的奖励。赢/输奖励是在游戏结束时收到的三元1(赢)/ 0(平局)/ -1(输)。分数奖励是暴雪从游戏引擎获得的分数。混合奖励是我们设计的奖励函数。

### Curriculum Learning

SC2包含10个难度级别的内置AI，它们都是由规则和脚本精心设计的。 从Level-1到10级，内置AI的能力不断提高。 较高难度级别的训练提供的积极反馈较少，因此代理人难以从头开始学习。 在这项工作中，我们首先训练我们的代理人在较低难度级别，然后使用预训练模型作为初始模型将代理人转移到更高难度级别，遵循课程学习的想法。

## Experiments

### Combat rule

战斗规则是一个简单的战斗策略，战斗规则模型中只有一个动作：攻击一系列固定位置。 虽然地图是不可观测的并且敌人的位置是未知的，但敌人总是住在矿井周围。 我们只需要让我们的军队攻击矿井周围的固定位置。 攻击动作使用内置AI进行自动移动和攻击。 因此，攻击行动的结果取决于建筑物的建造和单元的生产。 只有当代理人学会更好地进行建筑施工时（例如，不建造多余的建筑物，并在供应不足的情况下及时建造更多的挂架），代理才有可能获胜。

### Combat network

虽然简单的战斗规则模型是有效的，但战斗过程有点幼稚或僵化，当移动到更大和更复杂的地图时可能会失败。下面我们介绍一种叫做战斗网络的智能攻击方法。战斗网络的输出由三个动作和一个位置向量组成。这些行动是:都攻击某个位置，都撤退到某个位置，什么都不做。攻击和移动位置由位置向量指定。

战斗网络被构造为卷积神经网络（CNN）。 这个CNN映射了小地图和屏幕，使它能够知道完整地图的信息以及屏幕上的单位和建筑物位置。 此外，我们使用一个简单的策略来决定相机的位置。 当控制器选择基本子策略时，摄像机将移动到代理程序基础的位置。

### Mixture model

虽然战斗网络模型可以在高难度下训练得很好，但它偶尔会错过一些隐藏的敌人建筑。我们可以将战斗网络和战斗规则结合成一个混合模型。当在战斗网络的位置向量中预测到某个值时，军队的攻击位置将变成一系列由先验知识得到的固定位置。

![](https://2281160879-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LaNHyhKoX7GdL4Ytevq%2F-Lc067wqlXUroL76IGND%2F-Lc0926LkRrUuJnJ8Vt9%2Fimage.png?alt=media\&token=db300d53-25f7-4432-8fa2-72332a9886b1)
