この質問は、私が作成し、いくつかのコンピューターゲームで現在使用されているか、使用される予定のコンピューターの対戦相手に対するアプローチに関するものです。
バックグラウンド
昨年、「Minesweeper Flags」と呼ばれるゲームでコンピューターの対戦相手を改善しようとしたとき(簡単な説明:対戦相手よりも多くの地雷を奪わなければならない、ターンベースのマルチプレイヤーバージョンのMinesweeper )、アルゴリズムの動作を大きく変えました。 。if-else-if-elseのようなアプローチを使用する代わりに、指定された重みを持つ「スコアラー」のセットを使用して、最適な動きを決定しています。
マインスイーパフラッグのようなゲームでは、地雷を奪う可能性が最も高いのは動きを作ることだけですが、それほど単純ではありません。通常、コンピューターがどの動きをするかは、現在のゲーム状態での特定の動きのいくつかの機能に依存します。機能の例:
- この動きが地雷を採点する確率はどのくらいですか?
- ここで相手に何かを明かす確率はどれくらいですか?
システムの説明
システムは基本的に次のように機能します。
- 「事前採点者」:現在のゲームの状態に対して事前分析が行われます(掃海艇の旗に関しては、これは通常、すべての確率の計算です)
- 「得点者」:通常の得点者のセットは、各可能な動きの得点を決定するように求められ、各得点者はそれ自身の基準に従って得点を適用します。得点者は、行われた事前分析の結果を確認できます。
- 上記のステップで計算されたスコアは合計され、移動のスコアに設定されます。
- 同じスコアのすべての動きが同じランクになるように、動きはスコアに従ってソートされ、ランク付けされます。
- 「ポストスコアラー」:上記の結果は、ポストスコアラー自身のルールに従って、任意のフィールドのスコアを任意の方法で変更できる「ポストスコアラー」に送信できます。
プリスコアラー、スコアラー(ウェイト付き)、ポストスコアラーの束を組み合わせると、スコア構成と呼ばれるものになります。
結果例
これは、掃海艇旗にスコアが適用された例です。これは得点されたマップです:
そして、これは実際のスコア設定の出力です。可能な動きのランクを示しています。1が最高ランクで、白で強調表示されています。
非常に柔軟なコードを記述したおかげで、このAIへのアプローチは他のゲームにも同様に挿入できます。
長所と短所
以下に、このシステムの長所と短所をいくつか挙げます。
長所
- AIのさまざまな構成を非常に簡単に作成できます。
- 遺伝的アルゴリズムで使用することは可能です:各スコアラーには関連する重みがあり、重みが遺伝子になることができます。
- いくつかのツールを使用して、特定の移動が行われた理由と、その移動の主な責任者を確認できます。
- ツールを使用して、可能な動きの全体的なスコア/ランクのマップを作成することができます(上のスクリーンショットのように)
- 人間のプレイ方法にスコアを適用することにより、人間が行うと思われる動きをしようとする「#AI_Mirror」を作成することができます
短所
- AIを可能な限り良好にプレイするために、スコア構成を「正しく」調整することは非常に困難です。
ご質問
ここで構築したシステムは、AIの世界で広く知られていますか?実際のAI用語では何と呼ばれますか?
このアプローチは理にかなっていますか、または推奨する別のアプローチがありますか?
スコア設定を微調整するプロセスを簡単にする方法はありますか?
最後の質問について、私は遺伝的アルゴリズムを使用する可能性を知っています。SARSAについても少し気づいていますここに)。SARSAの問題は、ゲームが終わるまで報酬がわからないことだと思います。最良の動きは、報酬(地雷)をまったく与えない動きであることが多いです。現在の勝つ可能性は、現在のスコア(あなたと対戦相手が何個の地雷を奪ったか)と、現在のマップがどのようなものかによって異なります。
この質問はもともと、今では機能しない人工知能サイトに投稿されました。
このアプローチに使用される(Java)コードは、現在Code Reviewに投稿されています。