У меня проблемы с пониманием этого псевдокода, который я нашел для альфа-бета-обрезки в Википедии:
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 β
Меня смущает условие if Player = MaxPlayer
. Я понимаю весь рекурсивный вызов функции с not(Player)
для получения минимального значения, которое затем будет рекурсивно вызывать функцию с Player
, повторяя до тех пор, пока не будет достигнут предел глубины или не будет найдено целевое состояние. Однако я не понимаю,
if β ≤ α
break
утверждение. Насколько я понимаю, найдено второе значение, превышающее минимальное значение, найденное в предыдущем вызове (β
), то есть используемое значение. Но поскольку это МАКСИМАЛЬНАЯ часть функции, разве нам не нужно НАИБОЛЕЕ ВЫСОКОЕ значение, а не просто ЛЮБОЕ значение, превышающее бета?