当奖励延迟时,为游戏 AI 选择哪种 ML 方法?

数据挖掘 机器学习 随机森林 决策树 强化学习 游戏
2021-10-13 12:56:33

问题:我应该为我的电脑游戏的 AI 选择哪种机器学习方法,其中 AI 的行为不会导致立即奖励,而是延迟奖励?

关于我: 我是机器学习领域的初学者。这是我自己的第一个机器学习项目。我以前参与过其他包括机器学习在内的项目,但我从来没有完全靠自己从头开始做所有事情。

关于游戏: 游戏类似于《战争年代》:是2d,两个玩家互相对战。两者都拥有一座城堡(一个在左侧,另一个在操场的右侧)并且可以建造单位。这些单位互相战斗,并试图到达对手的城堡并摧毁该城堡。摧毁对手城堡的玩家获胜。 游戏截图

特征和机器学习任务:人工智能应该解决的任务是分类。基于特征向量输入,人工智能应该在以下标签之间进行选择:

  • 没有什么
  • 第一单元(老板)
  • 单元 2(坦克)
  • 第三单元(近战)
  • 第四单元(游侠)
  • 第五单元(法师)

特征向量目前包含大约 60 个特征,包括:

  • 可用资金
  • 最远单位到敌方城堡的距离
  • 单位健康总和
  • 单位数
  • 作为单独特征的每种类型的单元计数
  • 每种单位类型的成本
  • 城堡健康
  • 最近受到的伤害/最近造成的伤害
  • 每种单位类型对当前敌人的当前效力(某些单位对其他单位的效力更高/更低,取决于他们的护甲和攻击等级)

大多数特征都是针对 AI 玩家和 AI 玩家的对手计算的。

游戏特定细节:可以在比赛中实时估计比分,但是,我认为,基本上不可能确定一个特定动作是好是坏。当玩家购买一个单位时,该单位需要一些时间才能到达敌人并攻击敌人,可能会伤害敌人或受到伤害。一大优势:由于最近的架构调整,一场比赛的模拟速度比实时比赛快 100 倍左右。因此,可以在不到 10 秒的时间内模拟完整的比赛(大约需要 5-15 分钟)。可以并行模拟多个匹配。因此,在我的电脑上,每分钟可以模拟近 60 场比赛。我还为机器学习准备了游戏:可以从外部软件调用游戏的独立可执行文件(例如 Python 工具)并将配置文件作为输入。它模拟配置文件给出的比赛,然后生成一个结果输出文件,列出模拟比赛的结果,以及很多关于比赛的细节(例如比赛持续时间,游戏事件的详细列表,例如 EntitySpawn 、EntityDamage、EntityDeath 等)。外部工具可以访问该输出文件,以评估当前 ML 模型的成功与否。

我目前的考虑:对于这个分类任务,我认为决策树模型,比如随机森林,可能很有意义。我的问题主要是,我不知道如何训练以及如何将机器学习工具部分与游戏部分联系起来。由于数据没有真正标记,我猜,强化学习在这里可能是一个不错的选择。我已经阅读了一些关于 Q-Learning 的文章。现在,有两个困难:

  1. “延迟奖励”主题:通常,当 ML 模型做出决定时,可以直接给出分数,说明该决定与其他可能的决定相比是好还是坏。这在这里是不可能的,因为需要一些时间才能知道一个决定是好是坏。此外,即使经过一段时间,也不知道哪个决定以积极的方式促成了当前状态,而哪个没有。
  2. 架构难题:至少在当前架构下,训练过程实际上不可能考虑单一分类过程,因为游戏与机器学习代码是解耦的。机器学习代码只能访问已完成匹配的结果。至少现在,ML 代码在运行比赛期间无法访问游戏。

尽管存在这些限制(如果确实需要,可以调整第二个限制),但我认为成功训练模型应该已经有很多可能性。由于可以在短短几个小时内模拟数千场完整的比赛,因此(我认为)应该可以执行以下操作:

  1. 从随机模型参数开始
  2. 模拟一些比赛并计算结果分数。
  3. 适配一些模型参数
  4. 一次又一次地重复步骤 2 和 3,目标是增加/减少分数。这听起来就像超参数调整,如果有一个可以调整参数的适当模型,这已经成为可能。

请注意,模拟接受 ML 模型作为玩家 AI 的输入。这使得在技术上可以自动尝试不同的模型并进行比较。

这就是我现在所能想到的,我在机器学习领域的知识有限。

如果您有任何想法或知道您认为可能行之有效的方法,请告诉我!

附加说明:这里的目标是创建一个强大的 AI。不应考虑游戏设计主题,例如“与 AI 对抗应该很有趣”。

非常感谢你。

1个回答

我会使用强化学习中的时间差异学习。时间差异学习采用 TD 传播而不是反向传播。不同之处在于 TD 考虑了时间延迟方面。事实上,在这种情况下,结合这两种传播方法可能是最佳的。