简单井字游戏AI

我知道这个问题已经被问过很多次了,我已经查看了其他代码,但大多数我看到的似乎都不是完美的(从不输),而且简单、优雅和高效。我无法决定哪种解决方案符合这些描述。

我看到的解决方案有:

(1) 使用带有alpha-beta剪枝的minimax算法。这对我来说似乎很复杂,对于这样一个简单的游戏可能是不必要的?它可能太复杂了吗?如果不是,我需要做很多硬编码还是我误解了这个算法?

(2) 使用维基百科上的伪代码策略编写代码… 我不是很确定如何实现这个。例如,它只是说“检查分叉”。这些检查中的大多数是通过有一个winningLines数组并检查它们是否会被填满来完成的吗?如果不是,有人能给我一些关于使用哪些数据结构或关于如何实现伪代码中提出的检查的基本提示吗:http://en.wikipedia.org/wiki/Tic-tac-toe#Strategy。我还看到了一些算法,这些算法给’X’方块和’O’方块赋予数值,然后使用总和来决定赢家,但我不知道为什么这特别有用。

还有其他合理的解决方案吗?


回答:

老实说,在处理AI和启发式方法时,最简单的任务也会很快变得复杂。minimax方法将给你最好的结果,而且考虑到你正在实现AI,它应该不会太难。这是2人回合制游戏逻辑的既定标准。

查看这个网站… 它提供了一些关于井字游戏AI和minimax实现的有用见解。

http://www.ntu.edu.sg/home/ehchua/programming/java/JavaGame_TicTacToe_AI.html

编辑:

注意到有人写了“暴力法”… 这将成为实现minimax中涉及的启发式方法的低效方式。基于其他玩家最后一步迭代所有可能的移动只是实现启发式方法的另一种方式… 但在我看来,这似乎需要更多的工作。minimax实现将简单而有效。

编辑2:

“更简单的实现”在某种程度上是相对的。minimax是标准的,正如我在评论中所说,你可以操纵启发式方法以适应你正在寻找的情况…

我希望我能告诉你最简单的方法,但有太多变量取决于你游戏在代码中的实现方式。

接受这些建议,查看你的游戏实现,然后看看什么最适合你!

对一个人来说简单的东西,对另一个人来说可能很复杂。我只是想给你一些选择,minimax相当可靠。也许试着调整它以适应你的需求。

编辑3:

如果你需要更多指导,请告诉我。我很乐意帮助。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注