DB/R/統計/データサイエンス/投資話についてつらつらと

世のため自分のためのアウトプット

Poker Python

pythonでテキサスホールデムのシミュレーション1

投稿日:

pythonでテキサスホールデムのシミュレーションコードを作成しました。
コードは以下のgithubに置いています。

https://github.com/T-A0K1/texas_holdem_python

おいおい更新していきますが、まずは作ったところまでをメモがわりに記載しておきます。

~目次~

1. 概要

2. カード表記について

3. 役について

4. サンプル実行例

5. 今後について

1. 概要

大きく以下の要素で作成しています。

  1. 52枚の山札を作成
  2. 7枚のカードの役を返す
  3. 2つ以上のハンドでの勝負の結果を返す。

2. カード表記について

カードは2〜3桁の数字で表現し、末尾の1桁がマーク、残りが数字です。
また、エース(1)は14としています。
[例]
141:エースでマークが1
132:K(キング)でマークが2
33:3でマークが3
フラッシュの5枚:141, 21, 31, 51, 71
フルハウス:141, 142, 144, 32, 33

3. 役について

judge_hand()等では、役を以下の数字で表現して居ます。
8: straight flush
7: 4card
6: full house
5: flush
4: straight
3: 3card(three of a kind)
2: 2 pair
1: a pair
0: high card

4. サンプル実行例

サンプル1

githubにもあげたサンプルを回すと以下のような結果が返ってきます。

player0's hand: [91, 44]
player1's hand: [42, 23]
field card: [134, 144, 24, 114, 142]
player0's role: [5, 14, 13, 11, 4, 2]
player1's role: [2, 14, 2, 13]
win player: [0]

プレイヤー0はハンドの数字が9,4でマークが1,4。
プレイヤー1はハンドの数字が4,2でマークが2,3。

場のカードがK, 1, 2, 11, 1でマークが4,4,4,4,2です。

プレイヤー0はフラッシュ(5)で、構成数字が、14, 13, 11, 4, 2。
プレイヤー1は2ペア(2)で、14と2のペアでキッカーがKになります。

この結果、勝者はプレイヤー0(win player: [0])となります。

サンプル2

これは、ジャッジハンドを10000回回した結果になります。

Counter({1: 4414, 2: 2335, 0: 1732, 3: 527, 4: 454, 5: 291, 6: 234, 7: 7, 8: 6})

1(ワンペア)は44%, 2(2ペア)は23.3%、また、フルハウス(6)は2.34%となっています。

試行回数が少ないので少しずれて居ますが、1000000回ぐらい回すと、だいたいwikiに記載の確率と同じになります。

組み合わせ 確率
ストレートフラッシュ 4324+37260 0.031%
フォー・オブ・ア・カインド 224848 0.17%
フルハウス 3473184 2.6%
フラッシュ 4047644 3.0%
ストレート 6180020 4.6%
スリー・オブ・ア・カインド 6461620 4.8%
ツーペア 31433400 23.5%
ワンペア 58627800 43.8%
ハイカード 23294460 17.4%
合計 133784560 100%

3.3 7枚のときの確率

5. 今後

色々なシミュレーションやAIの開発が目標です。

-Poker, Python

Copyright© 世のため自分のためのアウトプット , 2020 All Rights Reserved Powered by STINGER.