Algorithm 了解alpha-beta剪枝算法中的截止条件
我很难理解我在维基百科上为alpha-beta删减找到的伪代码:Algorithm 了解alpha-beta剪枝算法中的截止条件,algorithm,search,artificial-intelligence,alpha-beta-pruning,Algorithm,Search,Artificial Intelligence,Alpha Beta Pruning,我很难理解我在维基百科上为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 α :=
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 β
让我困惑的是ifPlayer=MaxPlayer
条件。我理解整个过程,使用not(Player)
递归调用函数以获得最小值,然后使用Player
递归调用函数,重复直到达到深度限制或找到目标状态。然而,我不明白这是怎么回事
if β ≤ α
break
声明。我对这一点的理解是,找到了比上一次调用(
β
)中找到的最小值高的第二个值,即所使用的值。但是因为这是函数的最大部分,我们不想要最高的值,而不仅仅是任何大于beta的值吗 这是算法的微调阶段,在MaxPlayer
子句中(检查此节点中播放器的最大值时):
Beta是函数的参数,即“微调因子”。它代表到目前为止您所找到的最低分数。这意味着当前节点的父节点(最小化节点)已经找到了一个beta解决方案
现在,如果我们继续迭代所有子级,我们将得到至少与当前alpha一样好的结果。由于beta=6
,我们可以在不继续计算的情况下返回6,因为上层的最小计算量将是MIN(5,MAX(6,8,4))=MIN(5,6)=5
这是一个层次的直觉,当然是递归地“流动”到具有相同想法的所有层次
最小顶点中的修剪条件也是如此。也许我的困惑在于初始化值。alpha和beta是初始化为空的,还是分别初始化为-infinity和-infinity?@user1427661:是的,它们被初始化为infinity和-infinity,并在递归调用过程中被修改。
MIN
/ \
/ \
/ \
/ \
5 MAX
/ | \
/ | \
/ | \
6 8 4