On Reinforcement Learning for Full-length Game of StarCraft
Last updated
Last updated
On Reinforcement Learning for Full-length Game of StarCraft
星际争霸II对强化学习提出了巨大挑战。 主要困难包括巨大的状态空间,不同的动作空间,长视野等。在本文中,我们研究了一套星际争霸II全长游戏的强化学习技巧。我们研究一种分层方法,其中层次结构涉及两个抽象层次。一个是从专家的示范轨迹中提取的宏观行动,它可以将行动空间减少一个数量级但仍然有效。 另一种是双层分层架构,它是模块化的,易于扩展。 我们还研究了一种课程转移学习方法,该方法将代理从最简单的对手训练到最简单的对手。在64×64地图上并使用限制性单位,我们在具有4个GPU和48个CPU线程的单台机器上训练代理。我们对难度级别1的内置AI实现了超过99%的获胜率。 通过课程转移学习算法和战斗模型的混合,我们可以在几天内对最困难的非作弊内置AI(7级)实现超过93%的中奖率。 我们希望这项研究能够为未来的大规模强化学习研究提供一些启示。
我们的分层架构如图1所示。有两种类型的策略运行无关紧要的时间尺度。 控制器决定基于当前观察的每个长时间间隔选择子策略,并且子策略在每个短时间间隔内选择宏动作。
我们通过专家轨迹的数据挖掘获得宏观行动空间。
我们的体系结构的训练过程在算法1中显示,可以归纳为以下内容。 首先,我们初始化控制器和子策略。 然后我们运行Z次的迭代并在每次迭代中运行M次剧集。 在每次迭代开始时,我们将清除所有重放缓冲区。 在每集中,我们收集控制器和子策略的轨迹。 在每次迭代结束时,我们使用重放缓冲区来更新控制器和子策略的参数。我们使用PPO算法优化网络,并且加入了熵损失。
本文探讨了三种类型的奖励。赢/输奖励是在游戏结束时收到的三元1(赢)/ 0(平局)/ -1(输)。分数奖励是暴雪从游戏引擎获得的分数。混合奖励是我们设计的奖励函数。
SC2包含10个难度级别的内置AI,它们都是由规则和脚本精心设计的。 从Level-1到10级,内置AI的能力不断提高。 较高难度级别的训练提供的积极反馈较少,因此代理人难以从头开始学习。 在这项工作中,我们首先训练我们的代理人在较低难度级别,然后使用预训练模型作为初始模型将代理人转移到更高难度级别,遵循课程学习的想法。
战斗规则是一个简单的战斗策略,战斗规则模型中只有一个动作:攻击一系列固定位置。 虽然地图是不可观测的并且敌人的位置是未知的,但敌人总是住在矿井周围。 我们只需要让我们的军队攻击矿井周围的固定位置。 攻击动作使用内置AI进行自动移动和攻击。 因此,攻击行动的结果取决于建筑物的建造和单元的生产。 只有当代理人学会更好地进行建筑施工时(例如,不建造多余的建筑物,并在供应不足的情况下及时建造更多的挂架),代理才有可能获胜。
虽然简单的战斗规则模型是有效的,但战斗过程有点幼稚或僵化,当移动到更大和更复杂的地图时可能会失败。下面我们介绍一种叫做战斗网络的智能攻击方法。战斗网络的输出由三个动作和一个位置向量组成。这些行动是:都攻击某个位置,都撤退到某个位置,什么都不做。攻击和移动位置由位置向量指定。
战斗网络被构造为卷积神经网络(CNN)。 这个CNN映射了小地图和屏幕,使它能够知道完整地图的信息以及屏幕上的单位和建筑物位置。 此外,我们使用一个简单的策略来决定相机的位置。 当控制器选择基本子策略时,摄像机将移动到代理程序基础的位置。
虽然战斗网络模型可以在高难度下训练得很好,但它偶尔会错过一些隐藏的敌人建筑。我们可以将战斗网络和战斗规则结合成一个混合模型。当在战斗网络的位置向量中预测到某个值时,军队的攻击位置将变成一系列由先验知识得到的固定位置。
Controller根据观察状态选择子策略: ,子策略选择宏动作 ,回报函数为一个周期内子策略的总回报 。由于控制网络每个固定时间间隔K调用子网,因此高级网络的总执行步长变为T / K step。