このブログ内を検索可能

2024年7月9日火曜日

テキサスホールデムの確率(5) 確率計算簡略化

これまではポーカーの各カードの組の確率を求めたが、よく考えればテキサスホールデムではその確率は変わってくることに気づいたので、改めて一部プログラムを変更して考える。

手元にカードが2枚ありそれを{{1,1},{1,2}}のペアであったとすると残りディーラ札5枚の組み合わせすなわち{{1,3},{1,4},{1,5},{1,6},{1,7}}から{{4,9},{4,10},{4,11},{4,12},{4,13}}の52C5通りが存在し、そのそれぞれに対して作れうる最大の役を取得しなければならない。

そして2+5枚から5枚を選ぶのは7C5=21通りあり、そのそれぞれに対して役の最大値を計算すればよい。

例えば{{1,3},{1,4},{1,5},{1,6},{1,7}}の場合、最大の役はストレートフラッシュであり{{4,9},{4,10},{4,11},{4,12},{4,13}}の場合もそうである。

この情報を役リスト(すべての強さにかかわる役と数字、柄のリスト)に格納する。

役リストは最弱の{0(ノーペア),2(数字の最弱),1(柄の最弱)}から始まり{9(ロイヤルストレートフラッシュ),14(固定),4(柄の最強)}まで存在する。

{{1,1},{1,2}}と{{1,3},{1,4},{1,5},{1,6},{1,7}}の場合、7C5通りに対してこの役リストを作成しその最大値をとる。

実際にプログラムを組むと、これの最大値は最弱の役から数えて407番目、すなわち{8,1,7}であると分かる。つまりストレートフラッシュで柄1(最弱)かつ最大値7である。

確かにディーラーの札5枚を全部使うとそれになり、そしてそれが最も強い手札となる。

他にも実施すると{{1, 1}, {1, 4}, {1, 5}, {2, 2}, {2, 3}, {2, 5}, {3, 5}}の例では柄1,2,3で5のスリーカードも強いが1,2,3,4,5のストレートも作れる。

実際出力は{211,{4,5,3}}となっており最弱から211番目の役、4すなわちストレートで最大の数は5、柄は3であることがわかり確かに{1,1},{2,2},{2,3},{1,4},({1,5}or{2,5}or{3,5})でストレートを形成し、その中でも最も柄の強い3が選ばれていることが分かる。

このプログラムは自身の2枚とディーラーの札5枚に対して最大の役を計算するプログラムであるが、ディーラーの札が見えていない場合は総当たり法により行う。(例えばディーラー3枚なら残り2枚の組み合わせを考えて実施する)

がしかし一つ問題がある。

入力の7つのカードの組から選ばれた5つの組に対してそれをID化しなければいけないのだが、その処理はできるものの1~52C5通りをチェックしなければならないので時間がかかる。そこで、{{1,1},{1,2},{1,3},{1,4},{1,5}}をID1とし、{{4,9},{4,10},{4,11},{4,12},{4,13}}をID52C5にすばやく変換するプログラムが必要。でなければここの操作に時間がかかり十数秒結果を出すのにかかってしまい実用化できなからである。

ということでその変換を行うプログラムを考えるが、このやり方過去にビンゴバルーンの組→ID変換でやったことあるような気がする。