これは、stackoverflow に関する私の最初の質問であり、ベイジアン ネットワークを実装するのも初めてです。
私のプロジェクトの目標は、ベイシアン推論を行うポーカー プレーヤーを実装することです。オーストラリアのモナッシュ大学のケビン・コーブ率いるグループによって、これに関するいくつかの作業が行われました。ここで彼らの作品を見つけることができます:
- http://www.scribd.com/doc/55485155/Bayesian-Artificial-Intelligence
- http://www.csse.monash.edu.au/~annn/poker/UAI99.pdf
最初のリファレンスは本で、より役に立ち、詳細です (ポーカーについては Ch.5.5 & 11 を参照してください)。私は、Leduc Hold'em と呼ばれるテキサス ホールデムの簡易版を使用して開始しています。
Leduc Hold'em は 2 人用のポーカー ゲームです。Leduc ホールデムで使用されるデッキには、6 枚のカード、2 つのジャック、2 つのクイーン、2 つのキングが含まれており、ハンドをプレイする前にシャッフルされます。ハンドの開始時に、各プレーヤーはポットに 1 チップのアンティを支払い、1 枚のプライベート カードを受け取ります。その後、プレーヤー 1 から始まる賭けのラウンドが行われます。賭けのラウンドの後、1 枚の公開カードがデッキから公開され、両方のプレイヤーが自分の手札を構築するために使用します。このカードはフロップと呼ばれます。フロップの後、プレイヤー 1 から再びベッティング ラウンドが行われ、ショーダウンが行われます。ショーダウンでは、どちらかのプレイヤーが自分のプライベート カードとパブリック カードをペアにした場合、ポット内のすべてのチップを獲得します。どちらのプレーヤーもペアにならない場合、より高いカードを持つプレーヤーが勝者と宣言されます。
各ベッティング ラウンドは同じフォーマットに従います。最初に行動するプレイヤーは、チェックまたはベットするオプションがあります。賭けをすると、プレイヤーはチップをポットに追加し、アクションは他のプレイヤーに移ります。プレーヤーがベットに直面した場合、フォールド、コール、またはレイズするオプションがあります。フォールドすると、プレーヤーはハンドを放棄し、ポット内のすべてのお金が対戦相手のプレーヤーに与えられます。コールすると、プレーヤーは直面しているベットに一致するのに十分なチップをポットに入れ、ベッティング ラウンドが終了します。レイズする場合、プレイヤーは現在直面しているベットよりも多くのチップをポットに投入する必要があり、アクションは対戦相手のプレイヤーに移ります。最初のプレーヤーが最初にチェックした場合、2 番目のプレーヤーがチェックして、ベッティング ラウンドまたはベットを終了することができます。Leduc ホールデムでは、ラウンドごとに 1 回のベットと 1 回のレイズに制限があります。ベットとレイズは固定サイズです。
185 ページの図 5.14 のセクション 5.5.2.1 を見ると、ポーカーのベイズ ネットの図があります。これは基本的に私が自分のプロジェクトで使用しているものと同じですが、Leduc Hold'em にアップカードがないことを考えると、アップカードに対応する 2 つのノードは適用されません。ノード ペア (BPP_Win、BPP_Fin)、(BPP_Win、OPP_Fin)、(OPP_Fin、BPP_Fin)、(OPP_Fin、OPP_Curr)、および (BPP_Fin、BPP_Curr) 間の結合確率テーブルを計算できましたが、方法がわかりません。 (OPP_Curr, OPP_Action) の同時確率を計算します。私が理解しているように、ある種のサンプリング技術が必要です。
フォローアップの質問として、この同時確率を計算できれば、BP を使用して同時確率を因子として扱うことで、現在のカードが与えられた BPP_win の限界確率を計算できるはずですよね?