Alpha Beta 剪枝,alpha 等于或大于 beta。为什么等于?

Alphabeta pruning, alpha equals or greater than beta. Why equals?

虽然我理解 MiniMax 树和 alpha-beta 剪枝概念,但我不明白为什么在许多(例如维基百科)关于 alpha-beta 剪枝的资源中存在像 α >= β 这样的条件。具体来说,equals 令人困惑。据我了解,alpha beta returns 会移动 minmax return,但大多数情况下会更快。但是这个例子与之矛盾:

        .
      / |  \
    1   3*   2
  / |  / \   | \ \
  1 1 5   3  4 3 2

以上是原始的最小-最大树。正如我们所看到的,它会选择得分为 3 的一步。现在让我们进行 alpha-beta:

        .
      / |  \
    1   3*   3*
  / |  / \   | \
  1 1 5   3  4 3

它切断了最右边的移动,因为 3 >= 3。但是算法可以在 2 个移动之间进行选择,因为它们具有相同的分数,但正如我们在 min-max 中看到的那样,正确的选择稍差.如果算法简单地指定 α > β 就不会发生这种情况,因此它也需要搜索 2。

那是维基百科伪代码(以及许多其他资源)中的拼写错误吗?或者我在这里误解了一些非常重要的东西。

维基百科上的算法没有return一步,它return是根节点的分数3。这个分数与minimax结果相同。您将需要稍微修改算法以获得移动而不是得分。

这样做的一种方法是 运行 alphabeta 函数在当前状态的每个可能移动上运行,并播放得分最高的一个。按照维基百科上的链接给出了执行此操作的 implementation

我认为您还可以跟踪在 alphabeta 函数中找到的最佳着法,但如果多个节点在同一级别具有相同分数,那么 return 找到的第一个。这可能会更好,因为需要评估的节点更少。

通常使用 equals,因为它可以带来明显的性能提升,而且您的返回值不会从 equal 分支改变。

唯一至少有用的地方是在第一层搜索深度,但性能损失在这里是最严重的。

Minimax 依赖于对手总是走最好的棋步,而不是猜测他是否犯了错误。如果您包括一些特殊评估以选择两个相等分支中较好的一个,您将花费资源进行推测(由于它的定义,您不会在 minimax 中这样做)。

所以总而言之,不使用 equals 是没有意义的。