Algorithm Tic Tac Toe启发式人工智能
我为3x3井字游戏设计了简单的人工智能。然而,我既不想做完整的搜索,也不想做MinMax。取而代之的是,我想到了一种启发式方法,它将评估所有9个字段的值,然后AI将选择值最高的字段。问题是,我完全不知道如何确定它是否是一个完美(无与伦比)的算法 详情如下: 每个字段在网格上都有几个WinPath。中间一个有4个(水平、垂直和两条对角线),角落各有3个(水平、对角线和一条垂直),边上各只有2个(水平和垂直)。每个字段的值等于其WinPath值之和。WinPath值取决于其内容:Algorithm Tic Tac Toe启发式人工智能,algorithm,artificial-intelligence,tic-tac-toe,heuristics,Algorithm,Artificial Intelligence,Tic Tac Toe,Heuristics,我为3x3井字游戏设计了简单的人工智能。然而,我既不想做完整的搜索,也不想做MinMax。取而代之的是,我想到了一种启发式方法,它将评估所有9个字段的值,然后AI将选择值最高的字段。问题是,我完全不知道如何确定它是否是一个完美(无与伦比)的算法 详情如下: 每个字段在网格上都有几个WinPath。中间一个有4个(水平、垂直和两条对角线),角落各有3个(水平、对角线和一条垂直),边上各只有2个(水平和垂直)。每个字段的值等于其WinPath值之和。WinPath值取决于其内容: 空:[| |]-
- 空:
-1分[| |]
- 一个符号:
-10点[X | |]
//可以是任何地方的任何符号
- 两个不同的符号:
-0点[X | O |]
//它们可以以任何可能的方式排列
- 两个相同的对手符号:
-100分[X | X |]
//以三种方式中的任何一种排列
- 两个相同的“我的”符号:
-1000点[O|O|]
//以三种方式中的任何一种排列
3 | 2 | 3
---+---+---
2 | 4 | 2
---+---+---
3 | 2 | 3
但是,后面的一个可能是这样的(X正在移动):
那么,有没有可靠的方法来确定这是一个完美的算法,还是有任何缺点
另外,我试图(从玩家的角度)创造一个叉子的情况,这样我就可以打败这个人工智能,但我失败了。说只有362880个可能的井字游戏。证明你的算法的蛮力方法是彻底搜索游戏树,让你的对手在每个回合尝试每一个可能的动作,看看你的算法是否输过(如果完美的话,保证赢或平)。空间足够小,程序可以很快完成这项工作。当然,然后你将面临证明你的测试程序是正确的。要知道你的机器人是否足够好,你必须玩很多游戏,机器人对顶级玩家,机器人对市场上最好的机器人(通常用于象棋或围棋等复杂的游戏) 你试过这个吗(我先玩) 对吧?
| |
---+---+---
| X |
---+---+---
| | O
O |20 |30
---+---+---
20| X |20
---+---+---
30|20 | O
如果我能很好地理解的话,下一步就要开始了
O |20 | X
---+---+---
20| X |20
---+---+---
30|20 | O
从这里我赢了
如果这个传球(如果我错过了什么…)使你的解决方案看起来很完美你可以玩所有的井字游戏,看看你的算法是否强制平局。@Hurkyl+1,感谢你打败了我。我必须回答,因为当时我没有代表评论。好吧,如果我坚持这个选择,我最终会这么做。然而,我试图避免它…:我错过了这个严重。虽然您在第一个表中犯了错误(应该是:
12,2,12 | 2,13,11 | 12,11,O
),但这没有什么区别。我怀疑我应该以某种方式保护自己免受fork攻击,但我无法用这个算法重现fork情况。谢谢:)
| |
---+---+---
| X |
---+---+---
| | O
O |20 |30
---+---+---
20| X |20
---+---+---
30|20 | O
O |20 | X
---+---+---
20| X |20
---+---+---
30|20 | O