そこで、2 人用のボード ゲームで単純なコンピューター プレーヤーを作成するために、最小最大木をいじってみました。アルゴリズムの基本はわかっているのですが、私の七面鳥注入脳をすり抜けてしまうケースが… MINが2段で勝てたらどうなるでしょうか?
例として、2 人のプレーヤーのうちの 1 人だけが正方形を所有できる connect4/tic-tac-toe タイプのゲームを想定します。MIN が正方形を取得できないようにするためだけに、MAX に正方形を占有させるにはどうすればよいですか?
オプションが Left と Right である簡単な例 (気の利いた ASCII アートで示されています) を試してみましょう。ツリーが大きすぎて最終状態まで移動できないと仮定すると、中間値はヒューリスティック関数に基づいて計算されます (下に * でマークされています)。・INFはMINが勝つ終末状態。
MAX (a)
/ \
A B
/ \
MIN (b) MIN (c)
/ \ / \
A B A B
/ | | \
-INF *5 *22 *20
MIN は状態 (b) のアクション A を -INF のスコアで
選択しようとしている MIN は状態 (c) のアクション B を選択しようとしている +20 のスコアに対して
MAX は状態 (a) のアクション B を選択しようとしている+20のスコア
もちろん、問題は、MAX が B を選択した場合、MIN がアクション A を実行し (その正方形がまだ使用可能であるため)、MIN が勝つことです。MIN が次の手で -INF を取得するのを防ぐために、状態 (a) でアクション A を選択することの価値を MAX に認識させる必要があります。
MIN が勝つことができるかどうかを確認するためにコードに一連のテストを入れますが、アルゴリズムがこれを処理する必要があるように思えます。これを引き起こしているMAXに関する値の決定に欠けていると思います。
(明確にするために編集)