5×5 井字游戏AI的最佳算法,使用四连胜

如果我在创建一个5×5的井字游戏AI,使用四连胜作为获胜条件,最佳的算法是什么?我们原本计划使用极小化极大算法,但每回合只有10秒的时间限制。


回答:

如果你想构建一个高质量的玩家,有许多重要的改进可以实现。

首先,当然是alpha-beta剪枝,但还有其他几种技术可以使alpha-beta剪枝更加有效。

其次,由于时间限制很重要,你应该添加迭代加深。也就是说,你先搜索到深度1,然后到深度2,依此类推。当时间用完时,你就从之前完成的迭代中选择最佳的移动。因为树是指数增长的,你不会真正失去之前迭代的任何东西。(当分支因子为2时,额外开销是一个因子2,但随着分支因子的增加,这个额外开销会降到零。)

第三,使用历史启发式来排序你的搜索。在小的迭代中,你会学到更好的状态排序,以便在后续的迭代中更接近最优排序(对于alpha-beta剪枝)。

第四,使用转置表来避免重复状态。在搜索树时会发生许多转置,早期检测它们将带来显著的节省。(这可能会比历史启发式产生更大的影响。)

最后,尽可能构建最佳的评估函数。你在评估状态方面的表现越好,你的游戏表现就越好。(在极限情况下,一个完美的评估将只需要一个1层搜索就能完美地玩游戏。)

当然,如果你能直接解决这个游戏,那就去做吧。5×5井字游戏只有3^25(847,288,609,443)种可能的状态,所以用一台性能不错的机器,你可以解决这个游戏,从而得到完美的评估函数。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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