如何应用强化学习来解决这个小行星游戏?

人工智能 机器学习 强化学习 游戏-ai javascript
2021-10-21 05:41:36

介绍

论文Learning Policies for Embodied Virtual Agents through Demonstration (2017, Jonathan Dinerstein et al.) 中描述了一个有吸引力的小行星游戏:

在我们的第一个实验中,虚拟代理是宇宙飞船飞行员,飞行员的任务是操纵宇宙飞船穿过随机的小行星场

从理论上讲,这个游戏可以通过强化学习来解决,或者更具体地说,可以通过支持向量机 (SVM) 和具有高斯核的 epsilon 回归方案来解决。但正如同一篇论文的作者所写,这项任务似乎比看起来更难

尽管存在许多强大的 AI 和机器学习技术,但仍然难以为具身虚拟代理快速创建 AI。

实现看起来自然的行为是相当具有挑战性的,因为这些审美目标必须整合到健身功能中

问题

我真的很想了解强化学习是如何工作的。我构建了一个简单的游戏来测试这一点。有方块从天而降,你有箭头键可以逃脱。

在此处输入图像描述

我如何编写 RL 算法来解决这个游戏?我可以根据我认为应该发生的情况在 Javascript 中手动执行此操作吗?我怎样才能做到这一点而不必映射矩形的位置和我的位置,只需为代理提供键盘箭头以进行交互和三个信息:

  • 球员生活
  • 生存时间
  • 最长生存时间
1个回答

一个密切相关的问题和一个用 Python 编写的最小实现

该程序实现了强化学习技术“Q-Learning”。

这个想法是让程序接受对环境的观察(如果学习计算机游戏,可能是屏幕截图,或机器人的传感器数据)并以值向量的形式输出决策。该输出向量中的每个单元格对应于一个可能的动作(左、右、射击等),最高值的单元格显示代理/玩家应该采取的动作。该输出向量中的值称为 Q 值,它是从输入数据到我们试图学习的 Q 值向量的映射。在您的情况下,接受环境观察并输出决策选择向量的函数就是您的 SVM。

上面链接的问题包含对训练算法的描述。归结为多次玩游戏,同时存储每个步骤的输入向量、输出向量和输出决策,直到您达到终止条件(即撞到小行星)并获得分数(在这种情况下为负分,因为您想要避免小行星)。然后,向后遍历输出向量,将逐渐减少的输出分数分配给每个输出向量中的特定单元格,这些单元格对应于在该游戏步骤中做出的决定。来自游戏的输入向量数组和您刚刚创建的输出决策向量数组成为机器学习系统的训练数据。一旦你完成了一次训练,用你训练过的系统再次玩这个游戏,并不断重复,直到它达到你需要的好状态,或者它不再变得更好。

为了直接解决您的问题,我认为您无法在提供有关小行星位置的信息的情况下训练您的系统(假设它们是随机定位的)。但是,您可以尝试只使用一个非常简单的输入向量,例如 3 个整数值,其中每个值对应于小行星的存在 (1) 或不存在 (0) 在左上方、上方和右上方的 3 个正方形中播放器。这可能足以鼓励它躲避落下的岩石......

有一些用 JavaScript 实现的支持向量机,虽然我从未使用过它们,但由于 SVM 基本上是两类分类器,因此您必须检查该库是否可以轻松支持多类 SVM。在您的情况下,SVM 将尝试将每个输入分类为特定的玩家选择(左、右、射击等)。