像AlphoGo一样应用强化学习进行游戏对战( 二 )


像AlphoGo一样应用强化学习进行游戏对战
文章图片
为了正确设计step() , 我必须首先知道什么是动作!在现实生活中的战锤中 , 动作的范围可以从选择一个目标进行射击到使用策略中断战斗 。 由于我们人类能够很好地处理歧义 , 因此我们可以合理地直觉何时需要执行某个动作以及如何理解它 。 对于人工智能 , 事情变得更加棘手!
所有神经网络的输出层都是固定的 。 它们将始终具有相同的尺寸 。 这使得将网络输出与Warhammer40k的动态动作相关联变得棘手 。 游戏有很多来回的互动 。 策略是一个痛苦的例子——有几个可以在掷骰子之前或之后使用 , 甚至可以用来打断战斗解决的顺序 。
即使在正常的回合顺序中 , 也有一些来回决定的决定——拒绝精神力量 , 或者将攻击分配给单位中的哪个模型 , 等等 。 掷骰结果通常会影响玩家随后做出的决定 , 这也可能随时发生 。
让我们考虑以下操作序列 , 如下所示:
像AlphoGo一样应用强化学习进行游戏对战
文章图片
在这种情况下 , 轮到蓝色玩家了 。 蓝色玩家选择向前移动两个单位并向第一个橙色敌人射击远程武器 。 他们选择用不同的敌人模型向第三个单位冲锋 。 橙色玩家选择通过向第三个蓝色单位开火来做出反应 。
让我们探索如何针对此场景构建Actions的不同可能性 。
1.小动作(TrueActions)
在我提议的LittleAction中 , 一个动作就是游戏规则中定义的一个动作——这将是Warhammer规则到代码的最直接的翻译 。 任何时候玩家可以合法地采取行动或对情况做出反应 , 人工智能代理也将被允许这样做 。 这意味着从移动命令到宣布射击目标 , 再到决定战斗顺序的任何事情都将是AI做出的不同动作 。 这为代理提供了在所有时间点做出最佳决策的最大信息 。 这也是AI可以不受任何限制地玩完整的40K游戏的唯一方式(取决于那些讨厌的开发人员是否正确编码!)
像AlphoGo一样应用强化学习进行游戏对战
文章图片
在我自己的非专业意见中 , 最大的缺点是这将变得非常难以为AI建模 。 几乎所有OpenAIGym项目都倾向于只有一种类型的动作可以发出——它们在平台上平衡光束(向左、向右、停止)或击败吃豆人(向上、向右、向下、向左或停止 。 )LittleActions , 我们的模型现在必须了解它处于哪个阶段 , 处于哪种环境(瞄准、传球、移动、分配伤口等)才能开始做出正确的决定 。 它本质上必须学习游戏规则 , 同时还要学习游戏中的最佳策略——也就是说 , 它很可能拥有大量不相关的动作 。 这意味着算法存在很多歧义——传统的学习算法可能无法很好地处理这个问题 。 我们人类很难学习规则 , 我们有一个参考文本可以通读!
在这里形成良好的输出层模式也很困难——我们要么将相同的输出字段重新用于不同的动作 , 要么创建一个同时处理所有可能动作的巨大输出表面 。 这可能会导致非常漫长和困难的学习时间 , 因为学习过程会在大面积的不连贯输出中进行实验 。
2.大动作
有了BigActions , 一个Action就是一个完整的Warhammer回合——每一个集体动作、射击和为玩家回合的冲锋命令都集中在一个巨大的输出中 。 对于我们上面概述的场景 , 所有蓝色命令(移动、射击和冲锋)在蓝色玩家的回合开始时同时输出 。
像AlphoGo一样应用强化学习进行游戏对战
文章图片
这样做的最大好处是每个step()都是相同的——获得一组动作 , 然后进行一整轮 。 这使得训练智能体比SmallActions更容易一些 , 因为它不需要担心不同的“模式”或动作类型 。 每个step()只有一个Action的内容 。 这也使得开发变得容易——我们可以只需要大量的动作输出并一举完成回合 。

相关经验推荐