井字游戏启发式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

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

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