Python 通过蛮力解决tic-tac-toe问题

Python 通过蛮力解决tic-tac-toe问题,python,artificial-intelligence,tic-tac-toe,Python,Artificial Intelligence,Tic Tac Toe,我已经为这个问题挣扎了一段时间。我需要通过蛮力来解决tic-tac-toe问题——也就是说,让计算机通过自己玩几百万次来学习 现在,设置工作-我将简要描述它。我的电脑会自动生成随机移动,直到一方或另一方获胜。然后,它存储代表游戏的列表,并将该列表与1、0或-1关联,表示赢、平或输 我目前使用的算法很简单;我发现在当前棋盘的所有游戏中,棋盘上的移动与最多的赢家和最少的输家相关,然后我移动到那里 这几乎适用于任何情况;除了重要的:叉子 在这种情况下: o - - o - x o

我已经为这个问题挣扎了一段时间。我需要通过蛮力来解决tic-tac-toe问题——也就是说,让计算机通过自己玩几百万次来学习

现在,设置工作-我将简要描述它。我的电脑会自动生成随机移动,直到一方或另一方获胜。然后,它存储代表游戏的列表,并将该列表与1、0或-1关联,表示赢、平或输

我目前使用的算法很简单;我发现在当前棋盘的所有游戏中,棋盘上的移动与最多的赢家和最少的输家相关,然后我移动到那里

这几乎适用于任何情况;除了重要的:叉子

在这种情况下:

o - -       o - x     o - x

- x -   >   - x -  >  - x -

- - o       - - o     o - o
在计算机有下一步行动的地方,计算机总是在一个角落里,然后被叉上


有没有一种方法可以仅通过蛮力解决tic-tac-toe问题,而不使用min/max、启发式、fork硬编码等?

几百万次可能会太多。我认为只有大约362880个可能的游戏统计:第一个玩家有9个选项,下一个玩家有8个剩余选项,然后是7个,以此类推。。那么9!=362880

我建议你不仅要根据最终的胜负,还要根据获胜所需的动作数量来权衡你的选择。更少的动作=更好的决定


此外,一旦你建立了一个完整的地图,你可以在某些情况下将某些移动映射为死亡移动,不可避免地导致损失。一个设计良好的称重指标会发现没有获胜的路线,并且永远不会选择包含叉子的移动。

你确定要在tic-tac-toe上实现机器学习吗?过了一段时间,当计算机学会了最佳动作时,它将永远无法战胜自己:如果两个玩家都做出了最佳动作,那么结果将永远是平局。在我看来,你应该把机器学习应用到另一种游戏中,比如国际象棋或跳棋。谢谢你的回复。如果游戏是随机生成的,是否有几百万倍的超额?我尝试过按比赛长度衡量比赛,但我总是不确定从那里开始。我的直觉——不确定这是否值得信任——也告诉我,如果游戏是随机生成的,那么较短的游戏会发生得更频繁——因此会比不太可能发生的较长游戏更重要。嗯,如果您真的在使用暴力,那么您可以手动生成362880块板中的每一块,并为每种可能的情况构建一个完整的数据库。那么这只是一个数据库搜索问题。对不起,在我点击回车键之前,我没有完全添加这一点。我认为随机生成游戏有一个优势的部分原因是,长度较短的游戏比长度较长的游戏更有可能发生。这个假设正确吗?同样,可能的博弈空间是有限的。。如果你建立了所有可能的数据库,其中很多都会在全部9步之前结束,因此真正的空间将比362880还要小。