【发布时间】:2011-02-28 16:13:49
【问题描述】:
我决定写一个解决井字游戏的小程序,以便在一个小游戏上尝试一些剪枝技术的效果。使用 minimax 解决它的完整博弈树最终只有 549,946 个可能的博弈。通过 alpha-beta 剪枝,需要评估的状态数量减少到 18,297 个。然后我应用了一个转置表,将数字降低到 2,592。现在我想看看这个数字能降到多低。
我要应用的下一个增强功能是战略性缩减。其基本思想是结合具有同等战略价值的国家。例如,在第一步中,如果 X 先下,那么选择一个角而不是另一个角在策略上没有什么不同(假设你的对手打得最好)。在同样的情况下,板壁的中心也是如此,中心也很重要。通过仅减少到重要状态,您最终只会在第一步中评估 3 个状态而不是 9 个。这种技术应该非常有用,因为它会修剪靠近博弈树顶部的状态。这个想法来自 CMU 的一个小组创建的 GameShrink 方法,只是我试图避免编写通用形式,而只是做将技术应用于井字游戏所需的操作。
为了实现这一点,我修改了我的哈希函数(用于转置表)以枚举所有策略上等效的位置(使用旋转和翻转函数),并且只返回每个棋盘的最低值。不幸的是,现在我的程序认为 X 在先走时可以从空棋盘中强制 5 步获胜。经过长时间的调试后,我发现程序总是返回具有最低战略意义的移动(我将最后一个移动存储在换位表中作为我的状态的一部分)。有没有更好的方法可以添加此功能,或者有一种简单的方法来确定适用于当前情况的正确移动方式以及我已经完成的操作?
【问题讨论】:
-
这是一个有趣的问题,据我所知,所有其他浮动实现也使用“检查每个方格”方法,而不是构建决策树。我不确定这是否可以称为 A.I.虽然:s
-
@Codesleuth 小心术语——决策树是一种机器学习技术,不适用于此处
-
@Shaggy Frog:如果你说的是神经网络,那不是我的意思。
-
@Codesleuth 决策树不是神经网络,但它们都是机器学习算法的形式。此外,这里描述的启发式搜索当然是人工智能的一种形式。我建议您花一些时间研究该主题。
-
@Shaggy Frog:什么?你为什么争论这个?我的建议是这可能不是人工智能。是个人观点,因为我不认为预先确定的决策表或增量搜索足够先进以成为智能。我得出这个结论是因为我已经研究过这个话题。
标签: search artificial-intelligence tic-tac-toe