アルファベータ法のアルゴリズムは次のとおりです。
function ALPHA-BETA-SEARCH(state) returns an action
v <- MAX-VALUE(state, -∞, +∞)
return the action in ACTIONS(state) with value v
function MAX-VALUE(state, α, β) returns a utility value
if TERMINAL-TEST(state) then
return UTILITY(state)
v <- -∞
for each a in ACTIONS(state) do
v <- MAX(v, MIN-VALUE(RESULT(state, a), α, β))
if v ≥ β then
return v
α <- MAX(α, v)
return v
function MIN-VALUE(state, α, β) returns a utility value
if TERMINAL-TEST(state) then
return UTILITY(state)
v <- +∞
for each a in ACTIONS(state) do
v <- MIN(v, MAX-VALUE(RESULT(state, a), α, β))
if v ≤ α then
return v
β <- MIN(β, v)
return v
アルゴリズムは、ACTIONS
関数が特定ので使用可能なすべてのアクションのリストを提供することを示していますstate
。
たとえば、チェッカーのゲームを見てみましょう。あるチェッカー、たとえばA
、が別のチェッカー、たとえば、と対角線上にあるとしますB
。A
を実行できる場合B
、それは(可能であれば、他のチェッカーを実行する必要があるため、避けられない)アクションです。または、複数のテイクがある場合、これらはすべてアクションです。この状況は、実際には鉛筆と紙を使用して描くことができます。より具体的には、状況はツリーを使用して表すことができます。各ノードは状態を表し、その子ノードへのエッジはその状態からの可能なアクションを表します。
ツリーデータ構造を明示的に格納する必要はないと思います。ただし、上記のアルゴリズムには次のステートメントが含まれていますreturn the action in ACTIONS(state) with value v
。これで、ACTIONS(state)
は特定の状態から可能なアクションを返します(たとえば、どこでA
プレイする必要があるか)。
すべてのアルゴリズムを実行すると、値が取得され、ターミナルノードから渡されv
た値でノードを追跡します。v
ここで、すべての状態からのすべての可能な移動またはアクションの完全なツリーを保存しないと仮定します。がreturn the action ACTIONS(state) with the value v
実行されると、次の状態につながるアクションのみが取得され、アクションの1つが可能な限り最良のパスにつながることがわかります。しかし、ツリー全体など、追加の簿記がない場合、アクションを値と一致させることができますv
か?