web-dev-qa-db-ja.com

ミニマックスAIに複数レベルの難易度を実装するための最良のアプローチ

私は、ミニマックスアルゴリズムを使用してAIを実装したゲーム(グリッドでグリッドに変換)をプログラミングしています(アルファベータ剪定を使用)。それはすべて問題なく機能していますが、AIは良すぎるため、私はそれに勝つことができません。

それでは、ゲームの難しさを紹介したいと思います(簡単、通常、ハードなど)。現状のAIは難しい問題です。

私の質問:ミニマックスAIに複数のレベルの難易度を実装するための最良のアプローチは何ですか。

2つのアイデアのバランスをとっています。

  • 選択した難易度に応じて異なるヒューリスティックを使用する

  • 最善の動きの選択にランダム性を追加します。たとえば、通常の難易度を選択したとします。その場合、x%の確率で、ハードと同じヒューリスティックによって与えられる最高の動きを選択します。

3
Phil-R

あなたが試すことができる多くのアプローチがあります:

  • 評価関数を弱める
    • 評価を2つのコンポーネントに分割します。最初のコンポーネントは標準スコア、2番目のコンポーネントはランダムな値です。次に、skillパラメータを使用して、各コンポーネントが最終スコアにどのように貢献するかを重み付けできます
    • ピースが異なるゲームの場合、ピースの値をランダムに変更します(摂動はskillパラメーターによって多少制御されます)
    • 各ルート移動に制限付きランダム値を追加します(これは "Club Player"オプション であり、EdSchröderのRebel Chessエンジンにあります)
    • ...
  • 検索アルゴリズムを弱める
    • 静止検索/検索拡張機能を無効にします(つまり、チェスで拡張機能を確認します)
    • ランダムな動きを取り除く
    • 検索深度/検索速度を下げる
    • ...

artificial stupidityトピックはチェスで非常によく研究されています(例 Artificial stupidity-プログラムをひどくする または 筋力の低下 他の多くの興味深いアイデアの場合)。

実際の例としては、ロバートハイアットの Crafty engine を見て、ソースでSKILLを検索できます。

とにかくあなたはそれを考慮すべきです:

  • 「最善のアプローチ」はありません。さまざまなテクニックを試してみて混合する必要があります...結果は非常にゲーム固有です
  • 人間に対するプレーの強さを減らすことは非常に簡単ですが、エンジンを楽しく人間らしい方法でプレーするようにすることは非常に困難です。
4
manlio