Alphabeta pruning, alpha equals or greater than beta. 为什么要等于?

虽然我理解了MiniMax树和alpha-beta剪枝的概念,但我无法理解为什么在许多关于alpha-beta剪枝的资源中(例如维基百科)会出现α >= β这样的条件。特别是“等于”让我感到困惑。据我所知,alpha-beta剪枝会返回与minimax相同的移动,但通常速度更快。然而,这个例子似乎与之相矛盾:

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

上图是原始的min-max树。我们可以看到它会选择得分为3的移动。现在让我们进行alpha-beta剪枝:

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

它剪掉了最右边的移动,因为3 >= 3。但这样一来,算法可以在两个得分相同的移动中选择,但正如我们在min-max中看到的,右边的选择稍微差一些。如果算法只是指定α > β,就不会发生这种情况,这样它还需要搜索2这个分支。

那么,维基百科的伪代码(以及许多其他资源)中这是个打字错误吗?还是我误解了什么重要的东西?


回答:

维基百科上的算法并不返回一个移动,它返回的是根节点的得分,即3。这个得分与minimax的结果相同。你需要稍微修改算法才能得到要执行的移动而不是得分。

一种方法是针对当前状态的每个可能移动运行alphabeta函数,并选择得分最高的那个。按照维基百科上的链接,可以找到一个实现,它就是这样做的。

我认为你也可以在alphabeta函数中跟踪找到的最佳移动,但如果同一层级的多个节点有相同的得分,则返回找到的第一个。这可能更好,因为需要评估的节点更少。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注