【问题标题】:Understanding negamax with transposition tables使用转置表了解 negamax
【发布时间】:2021-10-31 12:03:50
【问题描述】:

注意:我了解 min-max 的工作原理,并且了解 alpha beta 修剪

即使您只能回答以下我的一个问题,我也会无限感激

无论我如何尝试查看和研究,我都无法理解换位表,特别是为什么我们不能总是使用相同位置的确切值。

我这里指的是伪代码here

我读到我们也无法存储 UPPERBOUND 的移动。为什么会这样?我们已经探索了该节点的所有子节点,所以我们不能保证知道最佳移动吗?为什么我们不能存储最好的移动?

相反,我们可以为 LOWERBOUND 存储最佳移动?分支已被修剪,我们无法获得最佳响应,为什么会出现这种情况?

最后,我理解了为什么我们只能在比根更接近叶的深度使用表(因为我们从更深入的搜索中获得了更准确的信息)。我没有得到与先前计算的(相同哈希)节点相同的节点,为什么我们不能返回找到的值?至少在 UPPERBOUND 的情况下,我们不是已经有了我们将达到的最佳分数(因为我们探索了所有子节点)?

感谢您的帮助,这让我很沮丧很长时间,我似乎无法在网上找到任何可以为我澄清这些的东西

【问题讨论】:

  • 您在哪里读到“我们无法为 UPPERBOUND 存储移动”?在您的链接中,每一个动作都被存储,无论其类型如何。
  • 您可以在此处的答案点 (2) stackoverflow.com/a/30002765/7058803 中阅读有关它的信息,这也是有道理的,因为当 score
  • 好的。这是我第一次看到这个(虽然我是新手)。这很有趣。但是,我不确定存储迄今为止最好的移动是一种损失,即使它是一个下限/上限,因为它仍然可能比已经检查过的其他移动更好。就像您在回答中所说的那样,它不会对移动顺序造成太大影响。

标签: algorithm artificial-intelligence chess alpha-beta-pruning minmax


【解决方案1】:

经过几个小时的思考和更多的研究,我终于能够理解,所以我会在这里为任何像我一样困惑的人提供答案。

对于上限(我们不提高 alpha 值 - 我们希望获得的最佳分数),关键观察是从 EACH 返回的分数孩子是对手希望达到的上限。我会用不同的方式说这个。我们可以保证返回的分数可能不是对手可以回应的最佳分数(所有子节点在分数

这意味着

a) 我们不能假设这是从上限返回时的最佳移动(它可能是最糟糕的移动,其他移动只是被修剪而不考虑)。所以我们不能将这个移动存储在我们的转置表中,我们只会通过使用 that 移动来损害任何移动顺序。

b)

同样,这也意味着也许对手可以做得更好。考虑在国际象棋或任何其他游戏中的情况,在第一个变体中,您已经有一组非常强大的动作可以玩,这会反驳您的对手的动作(为什么首先要修剪它)。

现在想象另一条通往同一位置/节点的路径。这条路径你可能没有相同的机会获得一套强大的移动,这一次可能是半好。现在我们的对手的反应实际上很重要(即使它是相同的位置)。所以我们不得不再次分析这个节点,但是设置我们之前获得的 beta 值,因为我们知道对手在最坏的情况下会做得那么好。

所以在回答我自己的问题时,即使探索了所有节点,返回的值也不是最优值。子节点已被修剪,但现在分析它们很重要。

类似的逻辑也适用于 LOWER BOUND。但在我看来,这个更微不足道。如果我们再次遇到相同的节点但我们上次没有完全探索它,那么我们应该再次探索它。计算这个节点会告诉我们是否真的可以用它来做得更好。

这是很多细节,但这让我困惑了很长时间,所以我想我会留下我的答案,希望能避免其他人的困惑。如果这里有什么稍微不正确的地方,尽管我相当有信心,但请随时发表评论。如有任何问题,请随时问我,我会尽力解答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多