我应该使用神经网络还是遗传算法来解决五子棋?

人工智能 神经网络 游戏-ai 遗传算法 极小极大 α-β-修剪
2021-10-23 23:21:00

目前,我正在做一个关于创建人工智能来玩五子棋游戏的项目它就像井字游戏,但在 15 15 板上玩,需要连续 5 次才能获胜)。我已经使用 Q-learning 成功实现了一个完美的井字游戏 AI,并将游戏状态/动作存储在一个表格中,但是对于 15 15 棋盘,可能的游戏状态变得太大而无法实现这个项目。

我的问题是,我应该使用神经网络还是遗传算法来解决这个问题?更具体地说,我应该如何实现这一点?

1个回答

对于 Gomoku 来说,使用神经网络或遗传算法似乎有点矫枉过正,因为两者都需要一段时间,而且通常不会按照你的意愿去做。Gomoku 游戏树相当大,但您可以从极小极大、游戏树修剪和良好的启发式函数(包括计算一半和完整的 2 秒、3 秒、4 秒等)获得不错的 AI,而不是映射出整个空间。

如果您不熟悉 alpha-beta 剪枝和 minimax,请参阅这篇文章

如果您真的想使用神经网络或遗传算法,您可以体验学习。关于神经网络,一种方法如下:

  • 定义一个启发式函数,该函数接收板状态输入(空、黑、白的序列为 0、1、2),并输出板状态的“goodness”值。神经网络是我们的启发式函数。
  • 假设这些游戏中的移动是最优的,训练当前最佳移动(根据你当前的参数)和你的数据所说的最佳移动之间的差异。这就是我们定义误差函数的方式!因此,您正在最小化这种差异,以便您的神经网络所说的最强移动在理想情况下就是您的游戏数据所说的最强(这个误差函数的优化可以通过反向传播或遗传算法完成)。
  • 理想情况下,到此为止,您现在可以使用(“强”)基于神经网络的评估函数来进行游戏树移动评估,而不是硬编码的启发式方法。

当然,这只是一种方式,你需要先找到游戏数据。

作为旁注,可以通过几种方式应用遗传算法,例如上面提到的神经网络中的参数优化或游戏树搜索,因此请确保您清楚如何使用它定义问题设置!应用神经网络的替代方法也是如此。

最后,知道五子棋已经解决是很有帮助的。有关其他人的想法和想法,请参阅此帖子