カードゲーム用のAIを開発しようとしていますが、使用する手法やアルゴリズムに少しこだわっています。ここでは、ゲームに関するいくつかの仮定を示します。
私は多くのヒント/ルールを知っています(たとえば、プレイヤーがカードA、B、Cを持っていることがわかっていれば、Dをプレイする必要があります)。したがって、私は最初にベイジアンネットワークを使用してこれらのルールを記述したいと考えました。問題は、割り当てる確率がわからないことですが、(人間に対して)プレイしたゲームの履歴を使用してヒューリスティックを計算できました。 2つ目の問題は、すべてのルールを知っているわけではなく、AIが最適なプレーを見つけるために必要な暗黙のルールがあることです。
これがそのようなカードゲームのAIを開発するための良い方法であるかどうかわかりませんか?
また、問題に最適なテクニックが他にあるかどうかも疑問に思っています。たとえば、私はミニマックス(おそらく剪定アルゴリズムを使用している)を見ましたが、この問題の良いオプションでしょうか?最も重要なプレーは、ゲームの開始時に未知のパラメーターが最も高い(ほとんどのカードがまだプレーされていない)ときなので、私にはまったくわかりません。
あなたの例は Bridge のように聞こえます。トップブリッジプレーイングシステムは、動きを選択するために モンテカルロ法 を使用します。高レベルで:
何かがうまくいったら、あらゆる種類の強化された戦略を追加できます。たとえば、プレーヤーの過去のプレーに基づいて確率を変化させたり、プレーヤーのスタイル(パッシブ、コーシブ、アグレッシブ)に基づいて確率を変化させたり、特定のプレーヤーが一緒にプレイする効果を考慮したりします。
LaurentGのコメントごとに編集:
最終的には、すべてのプレイヤーにとって完璧なプレイのアイデアを捨て、より現実的なものに置き換えることができます。概念的には、誰かの手札にあるカードの確率(カードの分配)を、プレイヤーが手札の間に所定の正当なカードをプレイする確率(カードの選択)から分離します。
カードの選択は学習に適しています。ゲーム全体のプレイを追跡する場合、特定のプレーヤー、または一般的なプレーヤーが、自分の手札のカードとプレイされたカードに基づいてどのようにプレイする傾向があるかを知ることができます。あなたは空想を得て、彼らから隠されたカードについて彼らの仮定をモデル化することさえできました。
カード配布の学習機会もあります。プレーヤーのハンド中の過去のビッドとカード選択は、ハンドに隠されているものについての「教え」を明らかにするかもしれません。各仮想ゲームを構築するときに、履歴データを使用して確率を調整できます。
最近の個人的な経験の例:
私は自分でカードゲーム(2プレイヤーポルトガル語ゲーム、ビスカ)に取り組んでおり、特に最近の情報セットモンテカルロツリー検索アルゴリズム(ISMCTS、 Python at http://www.aifactory.co.uk/newsletter/2013_01_reduce_burden.htm )のソースコードの例.
それは、ゲームルールの知識があるだけで、時折不正確な動きがあり、かなりうまく機能します。私は現在、それ(およびその「親」MCTS)について読んだ情報によると、ヒューリスティック( http ://www.orangehelicopter.com/ed/papers/aiide13.pdf )および対戦相手のカード推論。
ゲームのルールによると思います。
これはあなたの質問から私が理解していることです:
仮定:
これらのルールに従うゲームの例:
最初のプレイヤーはカードをプレイします。 2番目のプレーヤーは、同じスイートのカードをプレイするか、負ける必要があります。スイートが一致した場合、最も高いカードが勝ちます。
現在、このゲームはドローの運と、対戦相手のハンドを知るためにどのカードがプレイされたかを記憶できることによって決定されます。
この状況では、プレイしたカードの一部のみをAIに記憶させます。つまり、記憶されたリストからランダムにプレイしたカードのパーセンテージ(数字が小さい=難易度が高いAI)をランダムに削除します。エースまたはキング。このように、たとえば、AIはハートのクイーンをプレイしても安全であることを認識します。これは、相手がエースまたはキングを持たないことを覚えているが、10をプレイする場合は確率を計算する必要があるためです。ジャックがまだプレーしているかどうか彼は覚えていないかもしれないからです。
これは人間の注意の持続時間を模倣しています。
TL; DR
AIが知っている量を制限して、AIの決定が完全ではなく、十分であるようにします。