如何测试我的Tic Tac Toe A.I.是完美的?

时间:2012-12-01 23:34:07

标签: python recursion artificial-intelligence greedy

我做了一个tic tac toe A.I.鉴于每个董事会成员国,我的A.I.将返回1个准确移动的地方。 (即使移动同样正确,每次选择相同的移动,也不会选择随机移动)

我还创建了一个函数,循环使用A.I。

进行所有可能的播放

所以它是一个递归函数,让A.I.为一个给定的棋盘移动,然后让另一个游戏进行所有可能的移动,并在每个可能的移动中使用新的棋盘自己调用递归函数。

我这样做的时候A.I先行,而另一个先行......然后将它们加在一起。我结束了418次可能的胜利和115次可能的关系,以及0次可能的失败。

但现在我的问题是,如何最大限度地赢得胜利?我需要将这个统计数据与某些东西进行比较,但我无法弄清楚要将它与之进行比较。

3 个答案:

答案 0 :(得分:5)

您是否阅读过维基百科上的文章? link

终端位置数

当仅考虑电路板的状态时,并在考虑电路板对称性(即旋转和反射)后,只有138个端子板位置。假设X每次都做出第一步:

  • (X)
  • 赢得91个独特的位置
  • (O)
  • 赢得了44个独特的位置
  • 绘制了3个独特的职位

可能的游戏数量

如果不考虑对称性,可以手动确定可能的游戏数量,确切的公式可以导致255,168种可能的游戏。假设X每次都做出第一步:

  • 131,184完成的比赛由(X)
  • 赢得
  • 完成了77,904场比赛(O)
  • 绘制了46,080个已完成的游戏

您可以从第一段生成138个终端板位置

Yo可能会对随机字段进行足够的测试,并将结果与​​此处的统计信息进行比较link

Win in 5 moves    1440     0.6%
Win in 6 moves    5328     2.1%
Win in 7 moves    47952   18.8%
Win in 8 moves    72576   28.4%
Win in 9 moves    81792   32.1%
Draw              46080   18.1%    
Total             255168 100.0%

答案 1 :(得分:0)

你实际上可以强制游戏,并证明每次有获胜策略,你的A.I.选择正确的举动。然后,你可以证明每个位置,你的A.I.选择最大化获胜策略机会的举动,假设其他玩家正在随机游戏。没有那么多的可能性,所以你应该能够消除所有这些。

通过假设其他玩家实际上有点智能,例如,你也可以显着减少可能性的空间。总是试图阻止一次立即获胜的举动。

答案 2 :(得分:0)

akaRem回答的一个问题是,最佳玩家不应该看起来像整体分布。例如,我刚写的一个玩家大约90%的时间会赢得一个随机玩的人,并且有10%的时间都会打结。如果你有两个玩家互相攻击,你应该只期望akaRem的统计数据匹配。两个最佳球员总能打成平局。