チェスでは、move1 が move2 よりも優れているかどうかを判断する簡単な方法はありません (あなたの例から)。概算は、「ハード」パラメーターを調べることによって達成されます: ピースの数と値、ダブルまたはフリー ポーンの存在... 通常、このような概算はミニマックス アルゴリズムに組み込まれます。
ミニマックス
簡単に言えば、アイデアは次のとおりです。まず、事前に定義された深さまたは時間制限に達するまで、すべての可能な動きが展開されます (白-黒-白-黒...)。これにより、ボードの位置のツリーが作成され (エッジとしての移動を使用)、葉はヒューリスティックを使用して評価されます (上記のように)。次に、ツリーが折りたたまれ、最後に move1 と move 2 の評価が行われます。
崩壊はどのように機能しますか?ツリーの葉から開始し、各ノード (別名ボード位置) に値を割り当てます。すべての子の値がわかっているノードごとに、子の値が集計されます。白の番の場合は、白の最良の値が取得されます (最大)。黒の番なら最悪(最小)。したがって、ミニマックスという名前です。これをルートに到達するまで繰り返します。
次のボード ポジションのツリーを想定します。
A
| \
B1 B2
| | \
A11 A21 A22
ここで、次の評価を想定します: A11 = 0、A21 = -1、A22 = +1 (正の値は白に適しています)。概算から、位置 A21 は A22 (黒の場合) よりも優れていると想定するため、ノード B2 に -1 を割り当てます。B1 の場合、これは明らかで、その値は 0 です。ここで、B1 は B2 よりも白の方が優れていると仮定します。したがって、A の値は 0 であり、白は位置 B1 を達成するために移動する必要があります。
ここでの考え方は、ツリー全体を構築することではなく、早期のカットオフを達成するために、より有望な手を深さ優先で検索することです。上記の例で、ツリーの深さ優先を左から右 (A-B1-A11-B2-A21-...) にたどると、A21 を評価した後、白の位置 B2 が位置 B1 より悪いことがわかります。したがって、A22 を評価する必要はもうありません。アルファとベータは、現在知られている白の可能な最良の手と、現在知られている黒の可能な最良の応答の評価を単純に保存します。ツリーのノードがウォークされる順序 (初期順序) によって、カットオフが可能かどうか、および可能なカットオフの数が決まります。ウィキペディアから:
通常、アルファベータ期間中、サブツリーは一時的に最初のプレーヤーのアドバンテージによって支配されます (多くの最初のプレーヤーの動きが適切であり、各検索深度で最初のプレーヤーによってチェックされた最初の動きが適切である場合、すべての 2 番目のプレーヤーの応答は反論を見つけようとする)、またはその逆。...
順序付けが最適ではない場合、より多くのサブツリーを完全に調査する必要があります。
反復深化深さ優先探索も参照してください
。
最適化
厳密に言えば、ツリーはDAGです。同じボードの位置は、さまざまな動きの組み合わせ (例:トランスポジション) によって達成できるためです。ハッシュテーブルを使用して同一の位置を検出します。これにより、計算量が大幅に節約されます。