多智能体对抗作为决策人工智能的重要组成部分,也是强化学习中的难点问题之一。为了丰富多智能体对抗环境,OpenDILab开辟了多智能体对抗竞技游戏环境——Go-Bigger。同时,Go-Bigger还可以作为强化学习环境,辅助多智能体决策AI研究。
与agar.io、球战等热门游戏类似,在Go-Bigger中,玩家控制地图中的一个或多个圆球,通过吃掉食物球和其他比玩家球小的单位来获得尽可能多的体重,避免被更大的球吃掉。每个球员开始只有一个球。当球足够大时,玩家可以对其进行分裂、孢子或融合,与同伴完美配合输出游戏策略,利用AI技术控制智能体从小到大的进化,通过控制团队中多智能体的策略吃掉尽可能多的敌人,从而使自己的团队变得更强,赢得最后的胜利。

四种球,挑战不同的决策路径
Go-Bigger使用免费模式进行竞争。游戏开始时,每个玩家只有一个初始球。通过移动球,玩家可以吃掉地图上的其他单位来增加更多的体重。每个队都要和所有其他队比赛,每场比赛持续十分钟。比赛结束后,各队将根据最终权重进行排名。
在一场比赛中,有四种球:二重身球、孢子球、食物球和刺球。忙碌球是玩家在游戏中控制移动或释放技能的球。你可以通过覆盖其他球的中心来吃比自己小的球。孢子是玩家的头像球产生的,会留在地图上,可以被其他玩家吃掉;食物在游戏中是中性资源,其数量会保持动态平衡。如果玩家的分身吃了一个食物球,食物球的重量会转移到分身球上;荆棘球也是游戏中的中立资源,体积更大,数量更少。如果玩家的分身吃了一个刺球,刺球的大小就会转移到分身球上,分身球就会爆炸分裂成多个分身。另外,荆棘球可以被玩家通过吃孢子球来移动。
栅栏球
与团队紧密合作,实现合理的重量转移。
在Go-Bigger中,团队内部的合作和外部的竞争对最终的结果至关重要。所以Go-Bigger设计了一系列的规则来提高团队能带来的收益。由于玩家的分身球重量更轻,移动速度更快,更多的分身可以保证快速发展,但会面临被其他玩家吃掉的风险。同时,冷静期的存在使得玩家无法自行摆脱这样的风险。因此,同一支球队中不同球员的配合就显得尤为关键。
Go-Bigger为了方便团队中玩家的配合,设定了玩家不能完全被同一个团队吃掉的规则。Go-Bigger还设置了单个分身球的重量上限和重量衰减,使单个分身球无法保持过多的重量,迫使其分裂以减少减重。在比赛后期,队伍内部的重量转移将至关重要,合理的重量转移可以保证队伍在与其他队伍对抗时获得更大的优势。
支持RL环境,提供三种交互模式
此外,为了帮助用户学习强化学习领域的多智能体策略,Go-Bigger还提供了符合gym的界面。Env标准供他们使用。在一个游戏中,Go-Bigger的默认设置包含20个状态帧和5个动作帧。每个状态框会模拟处理当前地图中所有单位的状态,而动作框会在此基础上给单位增加动作控制,即改变单位的速度、方向等属性,或者使单位能够使用分裂、发射或停止等技能。
为了更方便的探索环境,Go-Bigger还提供了必要的可视化工具。在与环境交互时,可以直接保存我们局的视频包括全局视角和每个玩家的视角。此外,Go-Bigger提供单全局视野、双全局视野、单局部视野三种人机交互模式,让用户快速了解环境规则。
三步走,快速建立并强化学习基线
算法基线的目的是在一个问题环境下验证强化学习算法的初始效果,简单的整理分析各个环节的信息,熟悉之后你就可以轻松的玩游戏了,逐渐增加环境、算法、计算能力上的复杂度,设计迭代效果更强的代理。
基线(baseline)是Go-Bigger环境下的一种强化学习算法,主要分为三个部分:环境瘦身、基础算法选择和定制训练过程。其中,环境瘦身是将原有的游戏环境简化为适合强化学习的标准环境格式;基本算法选择是指根据环境的基本信息选择合理的基本RL算法;定制培训流程是指根据环境的特殊特征定制培训流程。
从环境瘦身的角度看Go-BiggerS。翻译成游戏引擎中的结构化信息;
这些人理解的数据很简单,但对计算机和神经网络很不友好。所以需要对这些信息进行特殊处理,根据强化学习的特点设置为标准的强化学习环境观察室空。
特点:游戏原始数据需要表达游戏内容,其数值范围会有较大波动。如果将这样的信息直接输入神经网络,训练会不稳定,所以需要根据信息的具体特征进行处理。对于类别信息等特征,我们不能直接用原始数值作为输入。通常的做法是仅通过热量对这种信息进行编码,并将其映射到线对之间距离相等的表示空。
对于坐标等信息,使用绝对坐标会带来一些映射关系的不一致,相对坐标通常是更好的解决方案。从RGB图像到特征图层

将原始的RGB 2D图像信息直接输入神经网络需要更多的数据、更长的训练时间和更复杂的训练技巧,虽然结果是可以接受的。更简洁有效的方法是“升维”,即将耦合的图像信息解离成多个独立的特征图像层。最后根据游戏内容定义具体的特征图层,并区分每个玩家的局部视觉,拼接后形成整体特征图层。下图显示了球员视野中一个食物球的特征图像层:
可变维度
Go-Bigger环境中有很多维度可变的地方。为了简化,在基线环境中强制截断单元数,统一避免了变维问题。
Action 空房间
Go-Bigger对人类来说操作非常简单,包括上下左右QWE。这些基础键组合起来,就可以诞生很多有趣的操作,比如飞刀,盛宴等等。然而游戏引擎中的实际动作空是这样的:
这种形式的游戏引擎在强化学习中被称为混合动作空,有相应的算法来处理这个问题。而以基线为核心,利用简单粗糙的离散化,将连续运动参数离散化为上下左右四个方向。对于动作类型和动作参数的组合,我们简单的用两者的笛卡尔积,最后定义环境为16维离散动作室空。
设计奖励函数
奖励函数定义了强化学习优化的目标方向。Go-Bigger是一个关于谁的队伍更大的对抗游戏,所以奖励函数的定义也很简单,就是相邻两帧中整个队伍的大小之差。
如下图所示,显示两个相邻的动作帧,右边的记分板显示各队的实时大小。通过从当前帧的大小中减去前一帧的大小来定义奖励值。对于整个游戏来说,每一步的奖励累计之和作为最终的评价值。评价最高的队将赢得比赛。此外,在训练过程中,通过缩放和截断的方式将奖励值限制在[-1,1]内。
基本算法选择
完成RL环境的魔变后,会呈现以下基本信息:
多模态观察空房间:图像信息+单位属性信息+全局信息离散动作空房间:16维离散动作奖励函数:密集奖励函数,并且值已经处理到[-1,1]终止状态:没有真正的终止状态,只有比赛的最大时间限制。
对于这样的环境,可以用最经典的DQN算法+多模态编码器神经网络来实现。对于各种模式的观测信息,可以使用与数据对应的经典神经网络架构。例如,对于图像信息,选择带下采样的卷积神经网络对2D图像进行编码,作为特征向量;对于单元属性信息,需要对各个单元之间的关系进行建模,得到最终的单元特征向量;对于全局信息,使用由所有连接层组成的多层感知器。每部分编码完成后,将三部分的特征拼接在一起,形成时间步长的观测特征向量,从而重用最经典的决斗DQN结构。以特征向量作为输入和输出,这一步选取16个动作的Q值,利用N步TD损失函数可以优化相应的训练。完整的神经网络结构如下图所示。
定制培训流程
DQN通常只用于解决单个智能体的问题,但是在Go-Bigger中,一个团队会有很多玩家,一场比赛是很多团队之间的混战,所以会涉及到多智能体之间的合作和对抗。在多智能体强化学习领域,针对该问题的研究方向有很多,但为了简化Go-Bigger的设计,采用独立Q-Learning+自战斗来实现训练过程。
例如,对于一个团队中的多个智能体,团队的最终目标是最大化整个团队的规模,因此可以在基线中使用IQL算法,以高并行性实现整个优化过程;当一个实际游戏中有很多代理的时候,你可以使用简单的自我战斗,这是相当简单的,节省了大量的计算能力,来参与游戏。测评时,将随机机器人和基于规则的机器人作为比赛对手,对当前智能体的性能进行测试和验证。
小贴士:

使用更高级的自战算法;打造联赛训练流程,不同球队使用不同策略,不断进化游戏;基于设计规则的助理机器人参与训练,帮助智能体发现弱点,学习新技能。他们可以在联赛训练中作为训练前的标签或者对手,也可以是蒸馏训练方法的老师,让球员们脑洞大开。
从零开始实现上述算法和训练过程非常复杂,而决策智能框架DI-engine可以大大简化相应的内容。它集成了支持多智能体的DQN算法的实现和一系列相关的诀窍,以及供玩家对抗机器人的训练组件。它只需要实现相应的环境包、神经网络模型和训练主函数。
几个有趣的发现。
以上简单基线算法训练出来的初级AI,会在发育阶段尽量将球分开,以增加接触面,加快发育速度;面对潜在的危险,他们会避开比自己大的球,利用劈分技能加快移动速度,防止被吃掉。这些操作都是人类玩家在游戏过程中经常用到的小技巧。
为了进一步推动决策智能相关领域技术人才的培养,构建全球领先的原创决策AI开源技术生态,OpenDILab将发起首届Go-Bigger多智能体决策AI挑战赛。本次比赛将于2021年11月正式启动,采用OpenDILab开源的Go-Bigger游戏环境。希望聚集全球技术开发者和学生,共同探索多智能体游戏的研究。欢迎对AI技术有浓厚兴趣的玩家积极参与,与世界顶级玩家同场竞技!


