井字游戏启发式AI [duplicate]

我为3×3的井字游戏设计了一个简单的AI。不过,我不想使用完全搜索或MinMax算法。相反,我考虑了一种启发式方法来评估所有9个字段的值,然后AI选择值最高的字段。问题是,我完全不知道如何确定这是否是一个完美(无懈可击)的算法。

以下是具体细节:每个字段在网格上有几个获胜路径。中间的字段有4个(水平、垂直和两个对角线),角落的字段每个有3个(水平、对角线和一个垂直),边上的字段每个只有2个(水平和垂直)。每个字段的值等于其获胜路径值的总和。而获胜路径的值取决于其内容:

  • 空:[ | | ] – 1分
  • 一个符号:[X| | ] – 10分 // 可以是任何符号在任何位置
  • 两个不同符号:[X|O| ] – 0分 // 它们可以以任何可能的方式排列
  • 两个相同的对手符号:[X|X| ] – 100分 // 以三种方式中的任何一种排列
  • 两个相同的“我的”符号:[O|O| ] – 1000分 // 以三种方式中的任何一种排列

这样一来,例如,初始情况的值如下所示:

 3 | 2 | 3 ---+---+--- 2 | 4 | 2 ---+---+--- 3 | 2 | 3 

然而,稍后可能如下(现在X在移动):

 X | 10| O---+---+--- O | O |110---+---+--- X | 20| 20

那么,有没有可靠的方法来确定这是否是一个完美的算法,或者它是否有任何缺点呢?

附注:我(从玩家的角度)试图创造一个分叉情况来击败这个AI,但失败了。


回答:

维基百科:井字游戏指出,只有362,880种可能的井字游戏。要证明你的算法,暴力方法是穷尽搜索游戏树,让你的对手在每一回合尝试每个可能的移动,看看你的算法是否会输(如果完美,它保证赢或平局)。这个空间足够小,程序可以很快完成。当然,你接下来将面临证明你的测试程序正确性的任务。

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

发表回复

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