我无法理解我在维基百科上找到的用于 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 β
令我困惑的是 ifPlayer = MaxPlayer
条件。我理解整个递归调用函数not(Player)
以获取最小值,然后递归调用函数Player
,重复直到达到深度限制或找到目标状态。但是,我不明白
if β ≤ α
break
陈述。我的理解是,找到比上一次调用()中找到的最小值高的第二个值β
,即使用的值。但是由于这是函数的 MAX 部分,我们不想要 HIGHEST 值,而不仅仅是大于 beta 的任何值吗?