我为3x3 Tic Tac Toe游戏设计了简单的AI。但是,我既不想做完全搜索,也不想做MinMax。相反,我想到了一种能够评估所有9个字段的值的启发式算法,然后AI会选择具有最高值的字段。问题是,我完全不知道如何确定它是否是一种完美的(无与伦比的)算法。
以下是详细信息: 每个Field在网格上都有几个WinPath。中间有4个(水平,垂直和两个对角线),每个角有3个(水平,对角线和一个垂直),侧面每个只有2个(水平和垂直)。每个Field的值等于其WinPaths值的总和。 WinPath值取决于其内容:
[ | | ]
- 1分[X| | ]
- 10分// can be any symbol in any place
[X|O| ]
- 0分// they can be arranged in any possible way
[X|X| ]
- 100分// arranged in any of three ways
[O|O| ]
- 1000分// arranged in any of three ways
这种方式例如开始情况的值如下:
3 | 2 | 3
---+---+---
2 | 4 | 2
---+---+---
3 | 2 | 3
然而后来的一个可能是这样的(X现在正在移动):
X | 10| O
---+---+---
O | O |110
---+---+---
X | 20| 20
那么有没有可靠的方法来确定这是一个完美的算法,还是有任何缺点?
PS。我正在尝试(从玩家的角度来看)创建一个分叉情况,所以我可以打败这个AI,但我失败了。
答案 0 :(得分:2)
Wikipedia: tic-tac-toe表示只有362,880种可能的tic-tac-toe游戏。证明你的算法的蛮力方法是穷举搜索游戏树,让你的对手在每个回合尝试每个可能的移动,看看你的算法是否曾经失败(如果完美的话,它保证赢或抽奖)。空间足够小,程序可以很快完成。当然,您将面临证明您的测试程序正确的问题。