1

私は、オセロ ゲームで最良の動きを得るために使用されるアルファ ベータ プルーニング アルゴリズムを実装しています。アルゴリズムがリーフ ノードに到達すると (つまり、有効な動きがないか、最大深度に達した場合)、これに基づいてそのノードのヒューリスティック値を計算します。

最大化プレイヤー (アルゴリズムを実行していて、アルゴリズムが返す動きを使用するプレイヤー) は、このノードでボード上にいくつのレンガを持っていますか? (レンガごとに+1)

最大化プレイヤーがこのノードで持っている有効な手数は? (移動ごとに+10)

最大化したプレイヤーは角のブロックをいくつ持っていますか? (角のレンガごとに+100)

問題は次のとおりです: プレイヤーが葉ノードで最大化を回していない場合、どうすればよいですか? その場合、彼の番ではないため、彼の有効な動きを計算することは不可能です。私は、アルファ ベータ プルーニング アルゴリズム全体、または少なくともヒューリスティック関数がどのように機能するかを誤解している可能性があります。誰かが私にヒントを教えてもらえますか?

ありがとう

4

1 に答える 1

0

アルゴリズムの従来のミニマックス定式化を使用しているか、ネガマックス定式化を使用しているかにかかわらず、移動する側のビューでボードを評価することになっています。

次に、両方のアルゴリズムが異なる方法で値を処理します。minimax には、MAX または MIN プレーヤーのターンであるかどうかにかかわらず、個別のコードがありますが、negamax は「val = - negamax(child)」を割り当てます。

ChessProgrammingWiki には、適切な説明と疑似コードがあります: MinimaxNegamax

于 2014-02-21T03:32:30.520 に答える