还有什么可以通过 alpha-beta 修剪来促进迭代深化?

人工智能 游戏-ai 启发式 α-β-修剪 组合游戏 对抗搜索
2021-11-08 03:37:31

我读到了极小极大,然后是 alpha-beta 剪枝,然后是迭代深化。与单独的 alpha-beta 相比,迭代深化与 alpha-beta 修剪相结合证明是非常有效的。

我已经实现了一个游戏代理,它使用带有 alpha-beta 修剪的迭代加深。现在,我想打败自己。我该怎么做才能更深入?就像 alpha-beta 修剪减少了动作一样,还有什么其他的小变化可以击败我的旧 AI?

我的目标是比我目前的 AI 更深入。如果您想了解游戏,这里有一个简短的摘要:

有 2 名玩家、4 个棋子和一个 7×7 的方格。在游戏开始时,第一个玩家将两个棋子放在任意两个不同的方格上。从那时起,玩家轮流移动两个棋子,就像国际象棋中的皇后(垂直、水平或对角线的任意数量的空心方块)。当棋子移动时,先前占据的方格被挡住。该方块不能用于剩余的游戏。棋子不能通过被阻挡的方格。第一个无法移动任何一个皇后的玩家输了。

所以我的目标是减少不需要的节点并进行更深入的搜索。

4个回答

您要添加的第一件事可能是转置表,这也是 SmallChess 所建议的。

之后,我会研究Aspiration Search和/或Principal Variation Search(另请参阅此页面)。

然后我会研究诸如Killer Move Heuristic之类的东西,也许还会看看您是否可以更有效地实现引擎的现有部分(例如,使用位板来表示您的状态)。

除此之外,国际象棋编程维基可能还有许多其他有趣的页面。

尝试缓存或转置表。没有它,您的搜索树可能会爆炸。

要通过 alpha-beta 修剪来提高迭代加深,您可以使用 SSS* 搜索算法,它是最好的第一策略算法。SSS*算法可以提高整体算法的时间效率,但会增加空间复杂度。我将 wiki 链接到它https://en.wikipedia.org/wiki/SSS* 我将在获得更好的解决方案后立即更新答案。

您可以尝试移动排序,我们将值存储到深度 d,对它们进行排序并以特定顺序使用它们,然后再进行深度 d+1 ...