私はいくつかの基本から始めて、後でもっと難しいものに移ります。
基本的なエージェントとテストフレームワーク
どのようなアプローチを取る場合でも、本当にシンプルで馬鹿げたものから始める必要があります。ダムエージェントの最善のアプローチはランダムなものです(可能なすべての動きを生成し、ランダムに1つを選択します)。これは、他のすべてのエージェントを比較するための開始点として機能します。比較のための強力なフレームワークが必要です。さまざまなエージェントを必要とし、それらの間でいくつかのゲームをプレイすることを可能にし、パフォーマンスのマトリックスを返すもの。結果に基づいて、各エージェントの適合度を計算します。たとえば、関数tournament(agent1, agent2, agent3, 500)
はエージェントの各ペア間で500ゲームをプレイし(最初/ 2番目をプレイ)、次のようなものを返します。
x -0.01 -1.484 | -1.485
0.01 x -1.29 | -1.483
1.484 1.29 x | 2.774
ここでは、たとえば、勝利に2ポイント、ドロースコアリング関数に1ポイントを使用し、最後にすべてを合計してフィットネスを見つけます。agent3
この表は、それが最良であり、実際にagent1
はと変わらないことをすぐに教えてくれますagent2
。
したがって、これら2つの重要な設定が完了すると、評価関数を試す準備が整います。
機能の選択から始めましょう
まず、not a terrible
評価関数を作成する必要があります。これは、この関数が3つの重要な側面(勝ち/引き分け/負け)を正しく識別する必要があることを意味します。これは当たり前のことのように聞こえますが、作成者がこれら3つの側面を正しく設定できなかったボットを大量に目にしました。
次に、人間の創意工夫を駆使して、ゲームの状態のいくつかの機能を見つけます。最初に行うことは、ゲームの専門家と話し、彼がそのポジションにアクセスする方法を尋ねることです。
専門家がいない場合、または5分前にゲームのルールを作成したばかりの場合でも、パターンを検索する人間の能力を過小評価しないでください。いくつかのゲームをプレイした後でも、賢い人はあなたに彼がどのようにプレイすべきかについてのアイデアを与えることができます(それは彼がアイデアを実行できるという意味ではありません)。これらのアイデアを機能として使用してください。
この時点では、これらの機能がゲームにどのように影響するかを実際に知る必要はありません。機能の例:ピースの価値、ピースの可動性、重要な位置の制御、安全性、可能な移動の総数、仕上げへの近さ。
これらの機能をコード化し、それらを個別に使用して、何が最適に機能するかを確認したら(それ自体では適切に機能しない機能を急いで破棄しないでください。他の機能と組み合わせて使用すると役立つ場合があります)、組み合わせを試す準備ができています。
単純な機能を組み合わせて重み付けすることにより、より良い評価を構築します。標準的なアプローチがいくつかあります。
機能のさまざまな組み合わせに基づいてuber関数を作成します。線形eval = f_1 * a_1 + ... f_n * a_n
(f_i
特徴、a_i
係数)にすることができますが、何でもかまいません。次に、この評価関数の重みが完全にランダムな多くのエージェントをインスタンス化し、遺伝的アルゴリズムを使用してそれらを相互に再生します。テストフレームワークを使用して結果を比較し、2、3の明らかな敗者を破棄し、2、3の勝者を変更します。同じプロセスを続けます。(これは大まかな概要です。GAについてもっと読む)
ニューラルネットワークからのバックプロパゲーションのアイデアを使用して、ゲームの終わりからエラーをバックプロパゲーションし、ネットワークの重みを更新します。あなたはそれがバックギャモンでどのように行われたかをもっと読むことができます(私は似たようなものを何も書いていませんので、不足して申し訳ありません)。
評価関数なしで作業できます!これは、ミニマックス/アルファベータについてしか聞いたことがない人にとっては非常識に聞こえるかもしれませんが、評価をまったく必要としない方法があります。それらの1つはモンテカルロ木探索と呼ばれますそして、名前のモンテカルロが示唆しているように、ツリーを生成するために多くのランダムな(ランダムであってはならず、以前の優れたエージェントを使用できます)ゲームプレイを使用します。これはそれ自体が大きなトピックなので、私は本当に高レベルの説明をします。ルートから始めて、フロンティアを作成し、それを拡張しようとします。何かを展開すると、ランダムに葉に移動します。リーフから結果を取得し、結果を逆伝播します。これを何度も行い、現在のフロンティアの各子に関する統計を収集します。最適なものを選択してください。そこには、探査と搾取のバランスをどのように取るかに関する重要な理論があり、UCT(Upper Confidence Boundアルゴリズム)があります。