ゲームツリーを生成するときは、リーフノードでない限りノードを評価しないでください。つまり、ゲームの終了状況に対応するノードに到達しない限り、レベルN(ボードの現在の状態よりもN移動するボードに対応)までツリーを生成します。評価関数を使用してボードゲームの状態を評価する必要があるのは、これらのノードのみです。それがミニマックスアルゴリズムです。すべてのプレーヤーが移動した後にノードを評価する唯一のケースは、 使用していないように見える反復深化アルゴリズムです。
評価関数は、特定のポジションの「スコア」、つまり、どちらの側が勝っているのか、そしてどれだけ勝っているのかをすばやく評価する役割を果たします。特定のボード構成のみを調べるため、静的評価関数とも呼ばれます。そうです、レベルNに達すると、コンピューターとユーザーの両方の可能な動きを数え、それらを差し引くことができます。たとえば、結果が正の場合はコンピューターが有利であることを意味し、0の場合は同点を意味し、負の場合はモビリティの観点からユーザーにとって不利な状況を表します。ゲームボード構成の終了を表すノードのスコアリングは簡単です。勝った場合は最大値を割り当て、負けた場合は最小値を割り当てます。
モビリティは、ほとんどのボードゲーム(それが価値のあるもの)の評価関数で考慮される最も重要な機能の1つです。そしてそれを評価するために、次のターンに関係なく、静的なボード構成が与えられた場合の各プレーヤーの可能な動きを数えます。プレーヤーが最近移動した場合でも、同じプレーヤーが最後の移動を行ったときにツリーの同じレベルNにあるボードにスコアを付け(したがって、同じ条件でスコアを付けます)、最高のスコア。
評価で検討している機能は非常に優れています。通常、あなたはそれらが非常に価値のあるゲームで(あなたがいる)素材と機動性を考慮したいと思います(しかし、素材がオセロで常に利点であるかどうかはわかりませんが、それはあなたのゲームなのでもっとよく知っている必要があります勝利の状況のために取り組んでいるので、あなたは正しい道を進んでいると思います。
編集:注意してください!リーフノードでは、ボード構成に特定のスコアを割り当てるだけです。そのスコアが返され、他のスコア(他の子に対応)と比較されるのはその親ノードです。特定のプレイヤーが利用できる最良の動きを選択するには、次のようにします。親ノードが対戦相手の動きに対応している場合は、 (最小)値が最小のノードを選択します。コンピューターが移動する番である場合は、このプレーヤーにとって可能な限り最高の移動を表すように、(最大)値が最も高いスコアを選択します。