如何在简单的游戏中使用机器学习?

人工智能 机器学习 深度学习 游戏-ai javascript
2021-11-16 23:11:32

我构建了一个简单的 HTML 游戏。在这个游戏中,目标是当蓝球在红球上方时点击。如果你击中,你得到 1 分,如果你没有击中,你失去 1 分。每次击球时,蓝色球移动得更快。你可以在这里测试游戏

在此处输入图像描述

在不使用机器学习的情况下,我只需在蓝球的 X、Y 位于红球的 X、Y 上时单击即可轻松解决此问题。不管什么时候,知道两个元素的位置,我就可以解决游戏的问题。

但是,如果我想创建一个 AI 来解决这个问题,我可以吗?会怎么样?我真的很想看到人工智能随机游荡直到完美。

我解决问题的方法

我点击了很多次,然后看比分。如果得分下降,则添加到 bad_positions。如果实际位置在 bad_positions,请不要点击。起初他错过了很多次,然后开始无休止地打。这是机器学习?深度学习?只是一个机器人?

var bad_positions = [];
function train(){
  var pos = $ball.offset().left;
  var last_score = score;
  if (!bad_positions.includes(pos)) {
   $('#hit').click();
    if (score < last_score){
      bad_positions.push(pos)
    } 
  }
}
1个回答

您已经实现了一个简单的上下文老虎机求解器,它是一种机器学习算法。一些细节可能与完整的实现有所不同,但关键要素是:

  • 动作选择(点击点击或不点击点击)

  • 每次动作后可以观察到的奖励信号(+1 表示命中,0 表示没有发生,-1 表示未命中)

  • 影响可实现奖励的可观察状态(蓝球的位置)。对于上下文强盗,状态不受所采取的行动的影响。这是真的。

  • 您的问题与经典上下文老虎机的不同之处在于,下一个状态可以从当前状态预测(而在纯老虎机问题中,它应该是完全随机的)。但是,这对您的问题并不太重要,您的求解器肯定遵循上下文强盗方法。

  • 您的求解器通过在每个状态下尝试不同的操作来测试分数,并缩小在每个状态下要采取的最佳操作。对于上下文强盗求解器,您的实现简单且“贪婪”。一个更典型的解决方案是维护每个动作的平均结果,并有一个规则来探索每个状态下的动作,因此它可以测试结果是否可靠(这对于更经常使用强盗求解器的非确定性场景非常有用)。

每次击球,蓝色球移动得更快

除非您以某种方式限制代理的反应时间,否则这与您编写求解器的方式无关。可以更改影响代理的规则,使其以与人类相同的方式相关,例如,决定点击意味着点击发生在 0.1 秒后,状态可以包括刚刚观察到的位置和几个 0.02 秒回去。

一般来说,如果你想更进一步,在更复杂的游戏中学习如何控制智能体动作,你可以看看简单的强化学习智能体,比如 Q-learning。如果您对此类代理的基本理论感兴趣,那么Sutton & Barto 的《强化学习:简介》是一本很好的(免费的)介绍性文本