「ミニマックス」の考え方は、2 人のプレーヤーのゲームで、1 人のプレーヤーが何らかの形式のスコアを最大化しようとし、別のプレーヤーがそれを最小化しようとすることです。たとえば、Tic-Tac-Toe では、X の勝利は +1 としてスコア付けされ、O の勝利は -1 としてスコア化される場合があります。X は最大プレーヤーで、最終スコアを最大化しようとし、O は最小プレーヤーで、最終スコアを最小化しようとします。
X は最大プレイヤーと呼ばれます。これは、X の手の場合、X はその動きの後の結果を最大化する動きを選択する必要があるためです。O 人のプレイヤーの場合、O はその手の結果を最小化する手を選択する必要があります。これらのルールは再帰的に適用されるため、たとえば、プレイできるボード ポジションが 3 つしかない場合、X の最良のプレイは、O に可能な限り高い値を持つ最小値の動きを選択させるものです。
言い換えると、ボード位置 B のゲーム理論上の最小値 V は次のように定義されます。
V(B) = 1 if X has won in this position
V(B) = -1 if O has won in this position
V(B) = 0 if neither player has won and no more moves are possible (draw)
それ以外は
V(B) = max(V(B1), ..., V(Bn)) where board positions B1..Bn are
the positions available for X, and it is X's move
V(B) = min(V(B1), ..., V(Bn)) where board positions B1..Bn are
the positions available for O, and it is O's move
X の最適な戦略は常に、V(Bi) が最大になるように B から Bi に移動することです。つまり、ゲーム理論値 V(B) に対応し、O の場合も同様に、最小の後継者の位置を選択します。
ただし、これはチェスのようなゲームでは通常は計算できません。ゲームの理論値を計算するには、ゲーム ツリー全体を最終位置まで列挙する必要があり、そのツリーは通常非常に大きいためです。したがって、標準的なアプローチは、ボードの位置をスコアにマッピングする「評価関数」を作成することです。スコアは、ゲーム理論値と相関することが期待されます。例えば、チェスプログラムでは、評価関数は物質的なアドバンテージ、開いた列などに対して正のスコアを与える傾向があります。ミニマックスアルゴリズムは、ボードの位置の実際の (計算不可能な) ゲーム理論値ではなく、評価関数のスコアを最小化します。
ミニマックスに対する重要な標準的な最適化は、「アルファ ベータ プルーニング」です。ミニマックス検索と同じ結果が得られますが、より高速です。ミニマックスは、検索レベルごとにスコアの符号が反転する「ネガマックス」の観点からキャストすることもできます。これは、ミニマックスを実装する別の方法にすぎませんが、プレーヤーを統一された方法で処理します。その他のゲーム ツリーの検索方法には、反復深化、証明数検索などがあります。