カードゲームのAIのベストテクニック


27

私はカードゲーム用のAIを開発しようとしていますが、使用すべきテクニック/アルゴリズムに少しこだわっています。ゲームに関するいくつかの前提条件を次に示します。

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

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

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

また、問題に最適な他の手法があるかどうかも疑問に思っています。たとえば、ミニマックス(プルーニングアルゴリズムを使用する場合があります)を確認しましたが、この問題の良い選択肢でしょうか?最も重要なプレーは、未知のパラメーターが最も高いゲームの開始時であるため(ほとんどのカードはまだプレーされていません)、私は非常によくわかりません。


1
いい質問です!完全な答えはありません。2cを追加したいと思います。ゲームが可能な状態をすべて知っている場合、理論的にはMinimaxはそのゲーム状態ツリーをトラバースするのに良い方法です。そのゲームが...ツリーが大きすぎると述べた場合のパフォーマンスの問題に得ることができる
シヴ山のドラゴンを

1
ゲームの目標は何ですか?誰が勝ちますか?プレイヤーがいつでもゲームに勝つチャンスを概算することは可能でしょうか?
から来る

ゲームの詳細を説明することはできません。勝つためには、(他のプレイヤーよりも)最高数のポイントを取得する必要があります。最初は、勝つかどうかを言うのは難しい/不可能です。最後に、もう一方のプレイヤーが既に十分なポイントを獲得している場合、他のプレイヤーはもう十分なポイントを獲得できずに勝つことを確信できます。
-LaurentG

1
ゲームはハートストーンですか?:)
レスカイイオネル

1
私はあなたと非常によく似た状況にあり、カードゲームもローカルゲームもそうです(スイスではありませんが)、どこから始めているのかも理解しようとしています。私がおもしろいと思ったものの1つは、仮想プレイヤーにDNAを割り当ててから、それらを相互に戦わせるエボルバーです。あなたはルーザーを殺し、勝者を育てます。結果は、かなりまともなAIボットになる可能性があります。このtropiceuro.com/puerto-rico-evolverを自分のカードゲームにどのように適応させるかはわかりませんが、これは可能だと思います。
アンドリューサヴィニク

回答:


11

あなたの例はBridgeに似ています。トップブリッジプレイシステムは、モンテカルロ法を使用して動きを選択します。高レベル:

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

何かが機能したら、あらゆる種類の強化された戦略を追加できます。たとえば、プレーヤーの歴史的なプレーに基づいて確率を変えたり、プレーヤーのスタイル(受動的、慎重、攻撃的)に基づいて確率を変えたり、特定のプレーヤーが一緒にプレーする効果を考慮したりします。


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

最終的には、すべてのプレイヤーにとって完璧なプレイというアイデアを捨てて、より現実的なものに置き換えることができます。概念的には、誰かの手にあるカードの確率(カードの分布)と、プレイヤーが手中に特定の合法カードをプレイする確率(カードの選択)とを分けます。

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

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


興味深い答えをありがとう。あなたは正しい、ゲームはブリッジといくつかのルールを共有しています。私が理解しているように、あなたのAIはあなたがコーディングしたものより良くなることはありません。モンテカルロ法を使用してAIに学習させる方法はありますか?(以前のすべてのゲームの)過去のイベントを使用して、各カードに確率を割り当てることは可能でしょうか?
-LaurentG

AIを確実に学習させることができます。トリックは、特定の手札にあるカードの確率と、特定の手札になったプレーヤーが特定の法的カードをプレイする確率とを区別することです。上記で詳しく説明します。
コービン

6

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

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

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


1
この投稿は読みにくい(テキストの壁)。ですが、あなたは気編集をより良い形にそれをINGの?
ブヨ

問題について実際に経験した人からの回答に感謝します。素晴らしいリンク!
ルーベン

3

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

あなたの質問から私が理解したことは次のとおりです:

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

仮定:

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

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

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

さて、このゲームは引き分けの運と、対戦相手のハンドを知るためにプレイされたカードを記憶できることによって決定されます。
この状況では、AIにプレイしたカードを部分的にのみ記憶させます。つまり、プレイしたカードの一部をランダムに記憶リストから削除します(数字が小さいほどAIが高くなります)。このように、例えば、AIは相手がエースやキングを持っていないことを覚えているので、クイーンオブハーツをプレイするのが安全だとわかりますが、10をプレイする場合は確率を計算する必要がありますジャックがまだプレー中かどうか覚えていないかもしれないからです。
これは、人間の注意範囲を模倣します。

TL; DR
AIがどれだけ知っているかを制限して、その決定が完璧ではなく、ちょうど十分であるようにします。


ご回答有難うございます。しかし、質問で述べたように、カードが配布された後は運もランダムもありません。そして、プレイヤーは他のプレイヤーのカードを知りません。彼はすでにプレイされたカードといくつかの「ルール」を使用して仮定をしなければなりません。
LaurentG

2
記憶されたカードをランダムに削除するアイデアのように。これは、イージー、ミディアム、ハードなどのレベルの開発に関するヒントを提供します。
superM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.