带有机器学习的井字游戏 AI

机器算法验证 机器学习 算法 强化学习 游戏
2022-04-04 04:35:33

我是机器学习的新手,作为我的第一个项目之一,我决定制作一个井字游戏机器人。到目前为止,我所做的是使用朴素贝叶斯算法进行 rgb/hex 颜色识别,这非常容易制作。现在我正在努力制作一个井字游戏机器人。

我的问题是我应该如何进行,是否有数据集,我应该再次采用朴素贝叶斯,还是决策树更适合井字游戏?(再一次,目的只是我在机器学习中学习和深入研究)

3个回答

我正在做一个与你非常相似的项目,我也在做它作为机器学习的介绍。

我见过的获得井字游戏 AI 的最佳方法之一是本文中描述并在本书中正式讨论的强化学习方法

基本上,您有一个程序运行可能的动作,然后根据与随机玩家比赛时是否最终获胜来更新该动作正确的可能性。

如果玩家不是随机的,或者您想要更正式的分析,您可以使用 minimax 或alpha-beta 剪枝,详见此处然后,我建议您根据收到的数据训练神经网络,以应对额外的挑战。

您还可以使用更高级的方法,例如蒙特卡洛树搜索(类似于上面的强化学习方法)。

大概你不想要一个人工智能,它会向前看一些动作并暴力破解最好的动作。我猜你想要一个 AI 来评估每个可能动作的强度并选择最好的。

解决此问题的一种方法是训练 AI 接受棋盘的输入和接下来要玩的地方的输入,并输出这一举动将导致获胜的概率。

您可以通过与自己或随机播放的玩家玩此 AI 来创建自己的数据。这比使用列出了许多位置的最佳移动的数据集更复杂,如果您找不到这样的数据集或想要挑战,这是一个选择。

创建自己的数据并使用它来迭代改进 AI 的一种可能方法如下:

  1. 让 AI 走几步,然后暂停游戏
  2. 选择一个随机动作来玩(随机让 AI 从它通常不会做出的动作中学习)
  3. 记录游戏状态和新动作
  4. 让AI完成游戏并记录结果

这种方法将创建具有许多位置的游戏数据,并根据预期的赢/输/平结果采取许多行动。您可以使用这些数据来训练 AI 来预测游戏的结果(如果进行了给定的动作)。重复此训练周期以迭代改进 AI。

我刚刚完成了一个tictactoe bot。

我设置它的方式是它从我所做的动作中学习。

因此,如果我在玩 PlayervsAI 或 PlayervsPlayer 游戏,获胜者的每一步都会被记录并保存在一个文件中。所以这些数据本质上是“导致胜利的动作”。该数据的格式是“棋盘状态+所打位置”

因此,当 AI 播放时,它会查看这些数据,查看棋盘的当前状态是否与保存的移动文件中的任何匹配,然后播放该移动。如果它找不到匹配,它只是寻找胜利,或块或只是随机的。

由于井字游戏有最佳策略,从技术上讲,您可以手动输入所有最佳动作,但我发现“教”人工智能更有趣。