ウィキペディアでアルファ ベータ プルーニング用に見つけたこの疑似コードを理解するのに苦労しています。
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
声明。それについての私の理解は、前の呼び出しで見つかった最小値 ( β
) よりも高い 2 番目の値が見つかったということです。これが使用される値です。しかし、これは関数の MAX 部分なので、ベータよりも大きい任意の値ではなく、HIGHEST 値が必要ではないでしょうか?