このブログ内を検索可能

2024年7月9日火曜日

テキサスホールデムの確率(4) カードの組に対する勝率実践

 とりあえずプログラムが組みあがったので確認する。

{1,{{1,1},{1,2},{1,3},{1,4},{1,5}},1533905/1533939,64973/64974}

第1要素はID、第2要素はカードの組、第3要素は勝率、第4要素はプレイヤーのカードの組を含めず52枚あると仮定した場合の簡略版(計算時間およそ半分)

一番わかりやすいのはID=1すなわち最弱の柄(1)で1,2,3,4,5のストレートフラッシュである。

第3要素では、このストレートフラッシュに勝てるものはこれ以外のすべてのストレートフラッシュである。

ちなみに例外として同じ柄の1,2,3,4,5vs6,7,8,9,10では5vs10で右の勝利

同じ柄の1,2,3,4,11vs6,7,8,9,10では14(1)vs10で左の勝利

前者はストレート由来なので最大は5という扱い、後者はフラッシュの離散値なので最大は1(A,14)であるということにする。

実際そのようなレアケースは見たことがないのでこの仕様かどうかは不明だが確率計算にもほぼ影響しないレベルなのでこれでよいとする。

この場合第3要素は同じ柄は6~13しか残っていないので6,7,8,9,10…9,10,11,12,13の4通り、他柄には全部負けるので1,2,3,4,5…10,11,12,13,1の10通りが3つずつで合計34通り。

よって第3要素では(47C5-34)/47C5=1533905/1533939の確率で勝利。

第4要素では柄1に対する1,2,3,4,5が存在することを仮定しているのでこの場合のみ引き分け。それ以外は全部負けるので勝率としてはこの1+39パターンのみに勝てない。よって

(2598960-40)/2598960の確率で勝利。

そして出力された結果は先ほどのデータ。

{1,{{1,1},{1,2},{1,3},{1,4},{1,5}},1533905/1533939,64973/64974}

第3要素は一致。

第4要素2598920/2598960=64973/64974なので一致。

これにより勝率が正しく計算できていることが分かる。

すると任意の組に対して勝率を厳密に計算することができた…のだが。

1パターン探索するのにおよそ1分程度かかってしまい、知っての通り総数は52C4=2598960通りある。となるとかかる時間は2598960分=43316時間なので1805日、すなわち5年くらいかかる。PC20台でやれば3か月だがそんなにmathematicaのライセンスを持っていないしPCによりメモリやCPUが違うのでおそらくこれより遅くなる。

なお他のパターンでも実践してみる。

{1,{{1,1},{1,2},{1,3},{1,4},{1,5}},0.999978,0.999985}

{2,{{1,1},{1,2},{1,3},{1,4},{1,6}},0.995872,0.99664}

{3,{{1,1},{1,2},{1,3},{1,4},{1,7}},0.995873,0.99664}

{4,{{1,1},{1,2},{1,3},{1,4},{1,8}},0.995873,0.99664}

{5,{{1,1},{1,2},{1,3},{1,4},{1,9}},0.995874,0.99664}

{6,{{1,1},{1,2},{1,3},{1,4},{1,10}},0.995873,0.99664}

{7,{{1,1},{1,2},{1,3},{1,4},{1,11}},0.995873,0.99664}

{8,{{1,1},{1,2},{1,3},{1,4},{1,12}},0.995872,0.99664}

{9,{{1,1},{1,2},{1,3},{1,4},{1,13}},0.995871,0.99664}

{10,{{1,1},{1,2},{1,3},{1,4},{2,1}},0.913909,0.891241}

{11,{{1,1},{1,2},{1,3},{1,4},{2,2}},0.49752,0.501177}

{12,{{1,1},{1,2},{1,3},{1,4},{2,3}},0.518684,0.533683}

{13,{{1,1},{1,2},{1,3},{1,4},{2,4}},0.53989,0.566188}

{14,{{1,1},{1,2},{1,3},{1,4},{2,5}},0.991489,0.992512}

やはりストレートフラッシュでは強く、フラッシュでは勝てる確率はおよそ99.59%であり、2のワンペア(勝率49.75%)より3のワンペアの方が強い(勝率51.87%)ことが分かり、同じ役でも数字の違いで勝率が大きく変わることが分かる。ちなみにID2→5で勝率があがっているのは同じ柄でのストレートフラッシュを封じているから(ID=5のとき、1,2,3,4,9で構成される場合同じ柄のストレートフラッシュは5~8では4個なので作れず、10~13においても4個なのでまったく作れないからである。ID5→ID9で勝率が下がるのはその作れなかったストレートフラッシュが生成してくるからである。たとえばID6では柄1の5,6,7,8,9のストレートフラッシュが相手側に存在するからである。とはいえその確率は0.0001%程度しか変わらないので正直誤差ではあるが。

おまけにいちいちこんな計算時間をとることもできないので、厳密な勝率を求めることは時間制約的に不可能。

したがって簡易バージョンを考える必要がある。

それは最も弱いカードから最も強いカードまで順にその役の成立確率を並べるというものである。

とにかく相手のパターン総数2000000~3000000通りをいちいち調べ上げるのに1分程度かかるので、ここをどうにかしたいわけである。ランダムに10000回相手の手数を判定してそれでおおまかな勝率を出すという手もあるが、とりあえずそれと相手のカードが52枚からの確率分布と仮定してどの自分のカードに対しても同じとして処理を簡略化するのとどちらが真の勝率に近いのかを、何個か実際に1分かけて出した結果とサンプリングしてその優劣をお互いに判定してみる。

とはいえ、ランダム10000回ならばmathematicaを常に起動して自動化の最中でやりとりしなければならないので他PCでライセンスがなければ使用できないのが残念なところ。なので実践的にはあらかじめ用意した順に配当が強くなる確率分布を作ってそれとの比較が手っ取り早い。ちなみにその分布を自身の手に応じて山札が減ったバージョンで作ろうとすると当たり前だがすさまじい数の処理を要求されるので意味がない。

具体的には{ノーペア(柄1、数字2)、ノーペア(柄1、数字3)、…ロイヤル(柄3)、ロイヤル(柄4)}のように、各役とその同じ役同士での強さまで考慮した確率分布を出す。でないとワンペアのAと2ではかなり勝率が違うことが分かっているからである。

この相手の役の確率分布の配列は常に固定であり(時間の関係上固定せざるを得ない)、自身の役を判定してそれをこれと比較して勝率を計算するだけなので、その数値を格納するエクセルシートでもあれば比較が可能と思われる。

こういうイメージでポーカーの勝率を再構築していくことにする。

とにかくカジプロで強くなる、というより本目的はRMTで稼ぐためにはまずチップを稼げないと話にならないので、そこをどうにかしなければならない。

一応ポーカーではその簡略化したプログラムで勝負できなくもないが、ポーカーだとおそらく勝率計算ツールとかまだ簡単な部類なので同業者が発生している可能性があるため危険。より難易度の高いテキサスホールデムの方が持ち込み金も多いし、まねできる者が少ないという点では有利。