如果我在创建一个5×5的井字游戏AI,使用四连胜作为获胜条件,最佳的算法是什么?我们原本计划使用极小化极大算法,但每回合只有10秒的时间限制。
回答:
如果你想构建一个高质量的玩家,有许多重要的改进可以实现。
首先,当然是alpha-beta剪枝,但还有其他几种技术可以使alpha-beta剪枝更加有效。
其次,由于时间限制很重要,你应该添加迭代加深。也就是说,你先搜索到深度1,然后到深度2,依此类推。当时间用完时,你就从之前完成的迭代中选择最佳的移动。因为树是指数增长的,你不会真正失去之前迭代的任何东西。(当分支因子为2时,额外开销是一个因子2,但随着分支因子的增加,这个额外开销会降到零。)
第三,使用历史启发式来排序你的搜索。在小的迭代中,你会学到更好的状态排序,以便在后续的迭代中更接近最优排序(对于alpha-beta剪枝)。
第四,使用转置表来避免重复状态。在搜索树时会发生许多转置,早期检测它们将带来显著的节省。(这可能会比历史启发式产生更大的影响。)
最后,尽可能构建最佳的评估函数。你在评估状态方面的表现越好,你的游戏表现就越好。(在极限情况下,一个完美的评估将只需要一个1层搜索就能完美地玩游戏。)
当然,如果你能直接解决这个游戏,那就去做吧。5×5井字游戏只有3^25(847,288,609,443)种可能的状态,所以用一台性能不错的机器,你可以解决这个游戏,从而得到完美的评估函数。