6

私は現在、ミニマックス法とアルファベータ法を使用してオセロ用のシンプルなAIを開発しています。

私の質問は、ボードの状態の評価関数に関連しています。

私は現在、以下を見て評価しようとしています。

  1. ディスク数(パリティ)

  2. 法的な動きの数

  3. 特定のポジションの重要性

つまり、ルートノードがゲームの初期状態であるとしましょう。最初のアクションはAIのアクションであり、2番目のアクションは対戦相手のアクションです。

                   0    
                  / \           AI's Action
                 1   1
                / \   \         Opponent's action
               2   2   2

ノードレベル1で、AIのチップのディスク数と、アクションが完了した後の時点でAIが実行できる合法的な移動の数を評価しますか?

ノードレベル2で、対戦相手のチップのディスク数と、対戦相手がアクションを完了した後の時点で実行できる合法的な移動の数を評価しますか?

意味AI移動->対戦相手の移動==>この時点で、対戦相手のディスク数と対戦相手が作成できる合法的な数を評価します。

4

2 に答える 2

10

ゲームツリーを生成するときは、リーフノードでない限りノードを評価しないでください。つまり、ゲームの終了状況に対応するノードに到達しない限り、レベルN(ボードの現在の状態よりもN移動するボードに対応)までツリーを生成します。評価関数を使用してボードゲームの状態を評価する必要があるのは、これらのノードのみですそれがミニマックスアルゴリズムです。すべてのプレーヤーが移動した後にノードを評価する唯一のケースは、 使用していないように見える反復深化アルゴリズムです。

評価関数は、特定のポジションの「スコア」、つまり、どちらの側が勝っているのか、そしてどれだけ勝っているのかをすばやく評価する役割を果たします。特定のボード構成のみを調べるため、静的評価関数とも呼ばれます。そうです、レベルNに達すると、コンピューターとユーザーの両方の可能な動きを数え、それらを差し引くことができます。たとえば、結果が正の場合はコンピューターが有利であることを意味し、0の場合は同点を意味し、負の場合はモビリティの観点からユーザーにとって不利な状況を表します。ゲームボード構成の終了を表すノードのスコアリングは簡単です。勝った場合は最大値を割り当て、負けた場合は最小値を割り当てます。

モビリティは、ほとんどのボードゲーム(それが価値のあるもの)の評価関数で考慮される最も重要な機能の1つです。そしてそれを評価するために、次のターンに関係なく、静的なボード構成が与えられた場合の各プレーヤーの可能な動きを数えます。プレーヤーが最近移動した場合でも、同じプレーヤーが最後の移動を行ったときにツリーの同じレベルNにあるボードにスコアを付け(したがって、同じ条件でスコアを付けます)、最高のスコア。

評価で検討している機能は非常に優れています。通常、あなたはそれらが非常に価値のあるゲームで(あなたがいる)素材と機動性を考慮したいと思います(しかし、素材がオセロで常に利点であるかどうかはわかりませんが、それはあなたのゲームなのでもっとよく知っている必要があります勝利の状況のた​​めに取り組んでいるので、あなたは正しい道を進んでいると思います。

編集:注意してください!リーフノードでは、ボード構成に特定のスコアを割り当てるだけです。そのスコアが返され、他のスコア(他の子に対応)と比較されるのはその親ノードです。特定のプレイヤーが利用できる最良の動きを選択するには、次のようにします。親ノードが対戦相手の動きに対応している場合は、 (最小)値が最小のノードを選択します。コンピューターが移動する番である場合は、このプレーヤーにとって可能な限り最高の移動を表すように、(最大)値が最も高いスコアを選択します。

于 2012-09-09T04:19:49.767 に答える
5

ゲーム終了評価機能

検索がフルボードに達した場合、評価は単にディスク数に基づいて、誰が勝ったかを判断する必要があります。

ミッドゲーム評価機能

リーガルムーブの数は、オープニングとミッドゲームで役立ちます。通常、あなたのムーブの数が多い(そして対戦相手の数が少ない)ことは、対戦相手が攻撃できない安定したディスクがたくさんある良いポジションにいることを示します。対戦相手のポジションが悪いため、動きが足りなくなり、悪い動きを強いられる可能性があります(たとえば、コーナーでプレーできるようにするため)。

この目的のために、動きを数えるときに誰の番であるかはそれほど重要ではないので、あなたは正しい道を進んでいると思います。

(ゲームの初期段階では、ディスクの数が少ない方が有利な場合が多いことに注意してください。これは通常、対戦相手の安全な動きがほとんどないことを意味します。)

ランダム評価関数

昔々、オセロの評価関数に乱数を使用することも(驚くべきことに)完全に合理的な選択だと聞いていました。

論理的には、選択肢が最も多いプレーヤーがゲームを操作して乱数を最大にすることができるため、このアプローチでも、AIは選択肢が多く、対戦相手が少ない動きを好むことを意味します。

于 2012-09-08T21:51:03.490 に答える