web-dev-qa-db-ja.com

カードゲームのAIに最適なテクニック

カードゲーム用のAIを開発しようとしていますが、使用する手法やアルゴリズムに少しこだわっています。ここでは、ゲームに関するいくつかの仮定を示します。

  • カードがプレイヤーに配布された後、ランダム性はありません。つまり、すべてのプレイヤーは自分がプレイするカードを選択できますが、ゲームの開始時にカードを配布するときのようにランダムなプロセスは発生しません。
  • すでにカードがプレイされている場合、プレイできるカードには制限があります。
  • トリックに勝ったプレーヤーが最初にプレイします。例えば。プレイヤー1がカードをプレイし、プレイヤー2がカードをプレイして勝利します。次に、プレーヤー2がカードをプレイし、次にプレーヤー1がプレイします。

私は多くのヒント/ルールを知っています(たとえば、プレイヤーがカードA、B、Cを持っていることがわかっていれば、Dをプレイする必要があります)。したがって、私は最初にベイジアンネットワークを使用してこれらのルールを記述したいと考えました。問題は、割り当てる確率がわからないことですが、(人間に対して)プレイしたゲームの履歴を使用してヒューリスティックを計算できました。 2つ目の問題は、すべてのルールを知っているわけではなく、AIが最適なプレーを見つけるために必要な暗黙のルールがあることです。

これがそのようなカードゲームのAIを開発するための良い方法であるかどうかわかりませんか?

また、問題に最適なテクニックが他にあるかどうかも疑問に思っています。たとえば、私はミニマックス(おそらく剪定アルゴリズムを使用している)を見ましたが、この問題の良いオプションでしょうか?最も重要なプレーは、ゲームの開始時に未知のパラメーターが最も高い(ほとんどのカードがまだプレーされていない)ときなので、私にはまったくわかりません。

27
LaurentG

あなたの例は Bridge のように聞こえます。トップブリッジプレーイングシステムは、動きを選択するために モンテカルロ法 を使用します。高レベルで:

  • 特定の手札にある各カードの確率を決定します。手札にあるカードとプレイされたカードが確実にわかります。プレイされたカードに基づいて他のすべてのカードの確率を決定し、入札がある場合はプレーヤーの入札を決定します。まず、カードが一部のプレイヤーの手札にあるという単純で平等な確率を使用できます。
  • ここで、できるだけ多くの「仮想」ゲームを実行します。手札のカードをシミュレートし、ゲームのルールと確率を使用して対戦相手の応答を決定します。仮想ゲームごとに、確率を使用してカードをプレーヤーに割り当て、すぐにゲームをシミュレートします。各プレーヤーが能力を最大限に発揮すると仮定します。あなたは仮想ゲームのすべてのカードを知っているので、各プレイヤーに完璧にプレイさせることができます。
  • 確実なサンプリングがある場合(または時間切れになった場合)、最も頻繁に最良の結果をもたらした法的措置を選択します。

何かがうまくいったら、あらゆる種類の強化された戦略を追加できます。たとえば、プレーヤーの過去のプレーに基づいて確率を変化させたり、プレーヤーのスタイル(パッシブ、コーシブ、アグレッシブ)に基づいて確率を変化させたり、特定のプレーヤーが一緒にプレイする効果を考慮したりします。


LaurentGのコメントごとに編集:

最終的には、すべてのプレイヤーにとって完璧なプレイのアイデアを捨て、より現実的なものに置き換えることができます。概念的には、誰かの手札にあるカードの確率(カードの分配)を、プレイヤーが手札の間に所定の正当なカードをプレイする確率(カードの選択)から分離します。

カードの選択は学習に適しています。ゲーム全体のプレイを追跡する場合、特定のプレーヤー、または一般的なプレーヤーが、自分の手札のカードとプレイされたカードに基づいてどのようにプレイする傾向があるかを知ることができます。あなたは空想を得て、彼らから隠されたカードについて彼らの仮定をモデル化することさえできました。

カード配布の学習機会もあります。プレーヤーのハンド中の過去のビッドとカード選択は、ハンドに隠されているものについての「教え」を明らかにするかもしれません。各仮想ゲームを構築するときに、履歴データを使用して確率を調整できます。

11
Corbin March

最近の個人的な経験の例:

私は自分でカードゲーム(2プレイヤーポルトガル語ゲーム、ビスカ)に取り組んでおり、特に最近の情報セットモンテカルロツリー検索アルゴリズム(ISMCTS、 Python at http://www.aifactory.co.uk/newsletter/2013_01_reduce_burden.htm )のソースコードの例.

それは、ゲームルールの知識があるだけで、時折不正確な動きがあり、かなりうまく機能します。私は現在、それ(およびその「親」MCTS)について読んだ情報によると、ヒューリスティック( http ://www.orangehelicopter.com/ed/papers/aiide13.pdf )および対戦相手のカード推論。

7
Black Cat

ゲームのルールによると思います。

これはあなたの質問から私が理解していることです:

  • ゲームはラウンドでプレイされ、各プレイヤーはラウンドごとに1枚のカードをプレイします
  • 最初に行くプレイヤーは自分の好きなカードをプレイできます
  • 2番目に行くプレイヤーは、最初にプレイしたものに応じて、特定のカードしかプレイできません
  • ラウンドに勝ったプレイヤーが次のラウンドに最初に行く
  • すべてのカードは最初のラウンドの前に配布されます

仮定:

  • 他のプレイヤーのカードを完全に理解している場合、最初に行くプレイヤーは、自分のそれぞれについて、カードがラウンドに勝つかどうかを決定できます(最初のプレイヤーは確実に勝利カードをプレイできます)
  • このラウンドで最初にプレイしたときにカードAとBの両方が勝つ場合、このラウンドでAをプレイして(そして勝って)、次のラウンドでBをプレイすると、Bも勝つことになります(カードの価値は失われません)。
  • 他のプレイヤーのカードを完全に理解している場合、2番目に行くプレイヤーはカードがこのラウンドで勝てるかどうかを決定できますが、次のラウンドで最初にプレイすると負けます(最悪の勝者カードを選択します)。

これらのルールに従うゲームの例:

最初のプレイヤーはカードをプレイします。 2番目のプレーヤーは、同じスイートのカードをプレイするか、負ける必要があります。スイートが一致した場合、最も高いカードが勝ちます。

現在、このゲームはドローの運と、対戦相手のハンドを知るためにどのカードがプレイされたかを記憶できることによって決定されます。
この状況では、プレイしたカードの一部のみをAIに記憶させます。つまり、記憶されたリストからランダムにプレイしたカードのパーセンテージ(数字が小さい=難易度が高いAI)をランダムに削除します。エースまたはキング。このように、たとえば、AIはハートのクイーンをプレイしても安全であることを認識します。これは、相手がエースまたはキングを持たないことを覚えているが、10をプレイする場合は確率を計算する必要があるためです。ジャックがまだプレーしているかどうか彼は覚えていないかもしれないからです。
これは人間の注意の持続時間を模倣しています。

TL; DR
AIが知っている量を制限して、AIの決定が完全ではなく、十分であるようにします。

3
Cezar Moise