应用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

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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