应用Alpha Beta剪枝算法到这棵树上遇到困难

我试图将Alpha Beta剪枝算法应用到给定的这棵树上。

enter image description here

当我处理到节点C时遇到了困难,因为在展开B的所有子节点后,我给A的值是>= -4,然后我展开C得到I = -3,这确实大于-4 (-3 >= -4)。因此,我应该将A更新为-3吗?如果是的话,之后我是否应该因为-3 >= -3而剪枝J和K?我在处理这个例子时,剪枝了J、K、M和N。我对此真的很不确定 =(

编辑:

另一个问题:在探索B并将B的值传递给A之后,我们是否将这个值传递给C,从而传递给I?我看到一个例子是这样的。这里是链接:http://web.cecs.pdx.edu/~mm/AIFall2011/alphabeta-example.pdf

然而,在这个例子中,http://web.cecs.pdx.edu/~mm/AIFall2011/alphabeta-example.pdf,似乎没有向下传递值,而是只向上传播值。我不确定哪个是正确的,或者这是否有任何区别。


回答:

在展开B的所有子节点后,Aα=-4, β=∞

当你到达I时,α=-4, β=-3。因为α < β,所以JK不会被剪枝。需要评估它们以确保它们不会低于-3,从而降低C的评估值。在C展开后,A的值更新为α=-3, β=∞。在评估J时,你不能使用A更新后的alpha值,因为它还没有被更新。

如果I是-5,JK就会被剪枝。在这种情况下,JK是什么并不重要,因为我们已经知道C的评估值比B差,因为-5 < -4,而JK只能使情况更糟。

每个节点将其alpha和beta值传递给其子节点。子节点然后会根据轮到谁来更新它们自己的alpha或beta值,并返回该节点的最终评估值。这将用于更新父节点的alpha或beta值。

有关示例,请参见Alpha-Beta剪枝

function alphabeta(node, depth, α, β, Player)             if depth = 0 or node is a terminal node        return the heuristic value of node    if Player = MaxPlayer        for each child of node            α := max(α, alphabeta(child, depth-1, α, β, not(Player)))                 if β ≤ α                break // Beta cut-off        return α    else        for each child of node            β := min(β, alphabeta(child, depth-1, α, β, not(Player)))                 if β ≤ α                break // Alpha cut-off        return β// Initial callalphabeta(origin, depth, -infinity, +infinity, MaxPlayer)

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中创建了一个多类分类项目。该项目可以对…

发表回复

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