你会用什么算法来解决一个非常大的井字游戏?

时间:2009-10-09 17:46:08

标签: algorithm artificial-intelligence heuristics tic-tac-toe

考虑到所有情况,可以很容易地解决一个小的(3x3,4x4)井字游戏。但是,例如,你有一个30x30的tic-tac-toe。在这种情况下,您将使用什么算法来决定下一个最佳移动?

Minimax + alpha-beta pruning是我所知道的一种方式。

还有其他方式更高效/更高效但更酷吗?


我知道这不是一个非常有趣的游戏。我说30x30只是为了问我想要什么,即哪种算法在这类游戏中效果最好,其中考虑完美解决方案的案例数量非常高,因此不可行。

7 个答案:

答案 0 :(得分:7)

我认为这可能不是一个非常有成效的问题。原因是:

  • 如果你需要获胜的一行中的标记数量很高,那么游戏将(在我看来)以任何合理的技能水平绘制,因为它更容易防止可能的胜利而不是自己实现一个。例如,如果你需要20-in-row来赢取30x30板,那么你需要阻止胜利的是每一行和一列大致靠近电路板中间的标记,并且每个中间附近都有一个标记。长对角线。

  • 如果你需要获胜的一行中的标记数量很少,我怀疑棋盘上的额外空间不会对策略产生太大影响,而且是唯一明智的策略。第二名防守球员将涉及在对手附近进行比赛。因此,某种alpha-beta方法很好。

答案 1 :(得分:4)

对于Go的游戏,difficult for computers因为同样的原因而困扰你30x30井字游戏(请注意,我并不是说30x30 tic-tac-toe和Go一样困难{更多直接技术不适用),Monte Carlo tree search最近取得了良好的效果。

答案 2 :(得分:3)

连续查看Gomoku或五。网上有很多一般策略。维基百科文章也有一篇关于基于威胁的搜索的好文章,你可能会看到gomoku。

答案 3 :(得分:1)

您可以使用Rule-based system

规则比任何树搜索算法都快,并且可以与它们混合使用。 您可以自己创建规则或使用(例如)Genetic algorithm

答案 4 :(得分:0)

使用贪婪算法搜索最后一次移动的邻近空间并尝试在与相邻对手内联的任何空白空间中放下一个块是不是没有问题?只要玩家无法获胜,你就会获胜。

答案 5 :(得分:0)

Alpha Beta绝对是您可以使用的最佳选择。 Alpha beta的重要性在于其评估功能。其中不仅仅返回1/0 / -1(赢/无/丢失)(从一个玩家的角度来看)而且还有位置的质量。

查看这篇文章(他使用tic-tac-toe但主要是国际象棋作为示例游戏) http://www.fierz.ch/strategy1.htm

答案 6 :(得分:-1)

将第一个标记放在第3行第3列。如果对手将其标记放在第3行,则将下一个标记放在第2行第3列,否则放在第3行第2列。您应该能够找出接下来(获胜)搬家。

如果对手开始,请选择一个空的4x4区块并从中间开始,如上所述。如果对手在你之前完成了他的三重奏,你就输了。

我敢说,这是4x4及以上电路板的最佳策略。