PokerKit は、純粋な Python で書かれたオープンソース ソフトウェア ライブラリで、ゲームのシミュレーション、ハンドの評価、統計分析の促進を目的としており、トロント大学コンピューター ポーカー学生研究グループによって開発されました。 PokerKit は広範なポーカー バリアントをサポートしており、ユーザーがカスタム ゲームを定義するための柔軟なアーキテクチャを提供します。これらの機能は、直感的な統合された高レベルのプログラム API を介して公開されます。このライブラリは、ポーカー AI 開発、ツール作成からオンライン ポーカー カジノの実装まで、さまざまなユースケースで使用できます。 PokerKit の信頼性は、静的型チェック、広範な doctest、単体テストを通じて確立されており、99% のコード カバレッジを達成しています。
PokerKit ライブラリには Python バージョン 3.11 以降が必要で、pip を使用してインストールできます。
pip install pokerkit
PokerKit の使用例を以下に示します。
以下は、フィル ヘルムートとルース キャノン アーネスト ウィギンスの 4 ランアウト ハンドを示しています。
リンク: https://youtu.be/cnjJv7x0HMY?si=4l05Ez7lQVczt8DI&t=638
言及されていないため、一部のプレイヤーの開始スタックはmath.inf
に設定されていることに注意してください。
from math import inf
from pokerkit import Automation , Mode , NoLimitTexasHoldem
state = NoLimitTexasHoldem . create_state (
# Automations
(
Automation . ANTE_POSTING ,
Automation . BET_COLLECTION ,
Automation . BLIND_OR_STRADDLE_POSTING ,
Automation . HOLE_CARDS_SHOWING_OR_MUCKING ,
Automation . HAND_KILLING ,
Automation . CHIPS_PUSHING ,
Automation . CHIPS_PULLING ,
),
False , # Uniform antes?
{ - 1 : 600 }, # Antes
( 200 , 400 , 800 ), # Blinds or straddles
400 , # Min-bet
( inf , 116400 , 86900 , inf , 50000 , inf ), # Starting stacks
6 , # Number of players
mode = Mode . CASH_GAME ,
)
以下はプリフロップの取引とアクションです。
state . deal_hole ( 'JsTh' ) # Tony G
state . deal_hole ( 'Ah9d' ) # Hellmuth
state . deal_hole ( 'KsKc' ) # Wiggins
state . deal_hole ( '5c2h' ) # Negreanu
state . deal_hole ( '6h5h' ) # Brunson
state . deal_hole ( '6s3s' ) # Laak
state . fold () # Negreanu
state . complete_bet_or_raise_to ( 2800 ) # Brunson
state . fold () # Laak
state . check_or_call () # Tony G
state . complete_bet_or_raise_to ( 12600 ) # Hellmuth
state . check_or_call () # Wiggins
state . check_or_call () # Brunson
state . check_or_call () # Tony G
以下はフロップのディーリングとアクションです。
state . burn_card ( '??' )
state . deal_board ( '9hTs9s' )
state . check_or_call () # Tony G
state . complete_bet_or_raise_to ( 17000 ) # Hellmuth
state . complete_bet_or_raise_to ( 36000 ) # Wiggins
state . fold () # Brunson
state . fold () # Tony G
state . complete_bet_or_raise_to ( 103800 ) # Hellmuth
state . check_or_call () # Wiggins
以下は振れ数の選定です。
state . select_runout_count ( 4 ) # Hellmuth
state . select_runout_count ( None ) # Wiggins
以下は最初のランナウトです。
state . burn_card ( '??' )
state . deal_board ( 'Jh' ) # Turn
state . burn_card ( '??' )
state . deal_board ( 'Ad' ) # River
以下は2回目のランナウトです。
state . burn_card ( '??' )
state . deal_board ( 'Kh' ) # Turn
state . burn_card ( '??' )
state . deal_board ( '3c' ) # River
以下は3回目のランナウトです。
state . burn_card ( '??' )
state . deal_board ( '7s' ) # Turn
state . burn_card ( '??' )
state . deal_board ( '8s' ) # River
以下は4回目のランナウトです。
state . burn_card ( '??' )
state . deal_board ( 'Qc' ) # Turn
state . burn_card ( '??' )
state . deal_board ( 'Kd' ) # River
以下は最終的なスタックです。
print ( state . stacks ) # [inf, 79400, 149700, inf, 37400, inf]
以下は、トム・ドワンとフィル・アイビーの間で初めてテレビ放映されたミリオンダラー・ポットを示しています。
リンク: https://youtu.be/GnxFohpljqM
言及されていないため、Patrik Antonius の開始スタックはmath.inf
に設定されていることに注意してください。
from math import inf
from pokerkit import Automation , NoLimitTexasHoldem
state = NoLimitTexasHoldem . create_state (
# Automations
(
Automation . ANTE_POSTING ,
Automation . BET_COLLECTION ,
Automation . BLIND_OR_STRADDLE_POSTING ,
Automation . HOLE_CARDS_SHOWING_OR_MUCKING ,
Automation . HAND_KILLING ,
Automation . CHIPS_PUSHING ,
Automation . CHIPS_PULLING ,
),
True , # Uniform antes?
500 , # Antes
( 1000 , 2000 ), # Blinds or straddles
2000 , # Min-bet
( 1125600 , inf , 553500 ), # Starting stacks
3 , # Number of players
)
以下はプリフロップの取引とアクションです。
state . deal_hole ( 'Ac2d' ) # Ivey
state . deal_hole ( '????' ) # Antonius
state . deal_hole ( '7h6h' ) # Dwan
state . complete_bet_or_raise_to ( 7000 ) # Dwan
state . complete_bet_or_raise_to ( 23000 ) # Ivey
state . fold () # Antonius
state . check_or_call () # Dwan
以下はフロップのディーリングとアクションです。
state . burn_card ( '??' )
state . deal_board ( 'Jc3d5c' )
state . complete_bet_or_raise_to ( 35000 ) # Ivey
state . check_or_call () # Dwan
以下はターンの処理とアクションです。
state . burn_card ( '??' )
state . deal_board ( '4h' )
state . complete_bet_or_raise_to ( 90000 ) # Ivey
state . complete_bet_or_raise_to ( 232600 ) # Dwan
state . complete_bet_or_raise_to ( 1067100 ) # Ivey
state . check_or_call () # Dwan
以下は川の取引です。
state . burn_card ( '??' )
state . deal_board ( 'Jh' )
以下は最終的なスタックです。
print ( state . stacks ) # [572100, inf, 1109500]
以下は、Xuan と Phua の間のオールイン ハンドを示しています。
リンク: https://youtu.be/QlgCcphLjaQ
from pokerkit import Automation , NoLimitShortDeckHoldem
state = NoLimitShortDeckHoldem . create_state (
# Automations
(
Automation . ANTE_POSTING ,
Automation . BET_COLLECTION ,
Automation . BLIND_OR_STRADDLE_POSTING ,
Automation . HOLE_CARDS_SHOWING_OR_MUCKING ,
Automation . HAND_KILLING ,
Automation . CHIPS_PUSHING ,
Automation . CHIPS_PULLING ,
),
True , # Uniform antes?
3000 , # Antes
{ - 1 : 3000 }, # Blinds or straddles
3000 , # Min-bet
( 495000 , 232000 , 362000 , 403000 , 301000 , 204000 ), # Starting stacks
6 , # Number of players
)
以下はプリフロップの取引とアクションです。
state . deal_hole ( 'Th8h' ) # Badziakouski
state . deal_hole ( 'QsJd' ) # Zhong
state . deal_hole ( 'QhQd' ) # Xuan
state . deal_hole ( '8d7c' ) # Jun
state . deal_hole ( 'KhKs' ) # Phua
state . deal_hole ( '8c7h' ) # Koon
state . check_or_call () # Badziakouski
state . check_or_call () # Zhong
state . complete_bet_or_raise_to ( 35000 ) # Xuan
state . fold () # Jun
state . complete_bet_or_raise_to ( 298000 ) # Phua
state . fold () # Koon
state . fold () # Badziakouski
state . fold () # Zhong
state . check_or_call () # Xuan
以下はフロップ ディーリングです。
state . burn_card ( '??' )
state . deal_board ( '9h6cKc' )
以下はターンディーリングです。
state . burn_card ( '??' )
state . deal_board ( 'Jh' )
以下は川の取引です。
state . burn_card ( '??' )
state . deal_board ( 'Ts' )
以下は最終的なスタックです。
print ( state . stacks ) # [489000, 226000, 684000, 400000, 0, 198000]
以下は、パトリック・アントニウスとヴィクトール・ブロムの間で行われた史上最大のオンライン ポーカー ポットを示しています。
リンク: https://youtu.be/UMBm66Id2AA
from pokerkit import Automation , PotLimitOmahaHoldem
state = PotLimitOmahaHoldem . create_state (
# Automations
(
Automation . ANTE_POSTING ,
Automation . BET_COLLECTION ,
Automation . BLIND_OR_STRADDLE_POSTING ,
Automation . HOLE_CARDS_SHOWING_OR_MUCKING ,
Automation . HAND_KILLING ,
Automation . CHIPS_PUSHING ,
Automation . CHIPS_PULLING ,
),
True , # Uniform antes?
0 , # Antes
( 500 , 1000 ), # Blinds or straddles
1000 , # Min-bet
( 1259450.25 , 678473.5 ), # Starting stacks
2 , # Number of players
)
以下はプリフロップの取引とアクションです。
state . deal_hole ( 'Ah3sKsKh' ) # Antonius
state . deal_hole ( '6d9s7d8h' ) # Blom
state . complete_bet_or_raise_to ( 3000 ) # Blom
state . complete_bet_or_raise_to ( 9000 ) # Antonius
state . complete_bet_or_raise_to ( 27000 ) # Blom
state . complete_bet_or_raise_to ( 81000 ) # Antonius
state . check_or_call () # Blom
以下はフロップのディーリングとアクションです。
state . burn_card ( '??' )
state . deal_board ( '4s5c2h' )
state . complete_bet_or_raise_to ( 91000 ) # Antonius
state . complete_bet_or_raise_to ( 435000 ) # Blom
state . complete_bet_or_raise_to ( 779000 ) # Antonius
state . check_or_call () # Blom
以下はターンディーリングです。
state . burn_card ( '??' )
state . deal_board ( '5h' )
以下は川の取引です。
state . burn_card ( '??' )
state . deal_board ( '9c' )
以下は最終的なスタックです。
print ( state . stacks ) # [1937923.75, 0.0]
以下は、Yockey と Arieh の間の悪いビートを示しています。
リンク: https://youtu.be/pChCqb2FNxY
from pokerkit import Automation , FixedLimitDeuceToSevenLowballTripleDraw
state = FixedLimitDeuceToSevenLowballTripleDraw . create_state (
# Automations
(
Automation . ANTE_POSTING ,
Automation . BET_COLLECTION ,
Automation . BLIND_OR_STRADDLE_POSTING ,
Automation . HOLE_CARDS_SHOWING_OR_MUCKING ,
Automation . HAND_KILLING ,
Automation . CHIPS_PUSHING ,
Automation . CHIPS_PULLING ,
),
True , # Uniform antes?
0 , # Antes
( 75000 , 150000 ), # Blinds or straddles
150000 , # Small-bet
300000 , # Big-bet
( 1180000 , 4340000 , 5910000 , 10765000 ), # Starting stacks
4 , # Number of players
)
以下はプリフロップの取引とアクションです。
state . deal_hole ( '7h6c4c3d2c' ) # Yockey
state . deal_hole ( '??????????' ) # Hui
state . deal_hole ( '??????????' ) # Esposito
state . deal_hole ( 'AsQs6s5c3c' ) # Arieh
state . fold () # Esposito
state . complete_bet_or_raise_to () # Arieh
state . complete_bet_or_raise_to () # Yockey
state . fold () # Hui
state . check_or_call () # Arieh
以下は最初のドローとアクションです。
state . stand_pat_or_discard () # Yockey
state . stand_pat_or_discard ( 'AsQs' ) # Arieh
state . burn_card ( '??' )
state . deal_hole ( '2hQh' ) # Arieh
state . complete_bet_or_raise_to () # Yockey
state . check_or_call () # Arieh
以下は2回目のドローとアクションです。
state . stand_pat_or_discard () # Yockey
state . stand_pat_or_discard ( 'Qh' ) # Arieh
state . burn_card ( '??' )
state . deal_hole ( '4d' ) # Arieh
state . complete_bet_or_raise_to () # Yockey
state . check_or_call () # Arieh
以下は3回目のドローとアクションです。
state . stand_pat_or_discard () # Yockey
state . stand_pat_or_discard ( '6s' ) # Arieh
state . burn_card ( '??' )
state . deal_hole ( '7c' ) # Arieh
state . complete_bet_or_raise_to () # Yockey
state . check_or_call () # Arieh
以下は最終的なスタックです。
print ( state . stacks ) # [0, 4190000, 5910000, 12095000]
以下は、Wikipedia からのバドゥーギ ハンドの例です。
リンク: https://en.wikipedia.org/wiki/Badagi
開始スタックは言及されていないため、 math.inf
に設定されていることに注意してください。
from math import inf
from pokerkit import Automation , FixedLimitBadugi
state = FixedLimitBadugi . create_state (
# Automations
(
Automation . ANTE_POSTING ,
Automation . BET_COLLECTION ,
Automation . BLIND_OR_STRADDLE_POSTING ,
Automation . HAND_KILLING ,
Automation . CHIPS_PUSHING ,
Automation . CHIPS_PULLING ,
),
True , # Uniform antes?
0 , # Antes
( 1 , 2 ), # Blinds or straddles
2 , # Small-bet
4 , # Big-bet
inf , # Starting stacks
4 , # Number of players
)
以下はプリフロップの取引とアクションです。
state . deal_hole ( '????????' ) # Bob
state . deal_hole ( '????????' ) # Carol
state . deal_hole ( '????????' ) # Ted
state . deal_hole ( '????????' ) # Alice
state . fold () # Ted
state . check_or_call () # Alice
state . check_or_call () # Bob
state . check_or_call () # Carol
以下は最初のドローとアクションです。
state . stand_pat_or_discard ( '????' ) # Bob
state . stand_pat_or_discard ( '????' ) # Carol
state . stand_pat_or_discard ( '??' ) # Alice
state . burn_card ( '??' )
state . deal_hole ( '????' ) # Bob
state . deal_hole ( '????' ) # Carol
state . deal_hole ( '??' ) # Alice
state . check_or_call () # Bob
state . complete_bet_or_raise_to () # Carol
state . check_or_call () # Alice
state . check_or_call () # Bob
以下は2回目のドローとアクションです。
state . stand_pat_or_discard ( '??' ) # Bob
state . stand_pat_or_discard () # Carol
state . stand_pat_or_discard ( '??' ) # Alice
state . burn_card ( '??' )
state . deal_hole ( '??' ) # Bob
state . deal_hole ( '??' ) # Alice
state . check_or_call () # Bob
state . complete_bet_or_raise_to () # Carol
state . complete_bet_or_raise_to () # Alice
state . fold () # Bob
state . check_or_call () # Carol
以下は3回目のドローとアクションです。
state . stand_pat_or_discard ( '??' ) # Carol
state . stand_pat_or_discard () # Alice
state . burn_card ( '??' )
state . deal_hole ( '??' ) # Carol
state . check_or_call () # Carol
state . complete_bet_or_raise_to () # Alice
state . check_or_call () # Carol
以下、対決です。
state . show_or_muck_hole_cards ( '2s4c6d9h' ) # Alice
state . show_or_muck_hole_cards ( '3s5d7c8h' ) # Carol
以下は最終的なスタックです。
print ( state . stacks ) # [inf, inf, inf, inf]
print ( state . payoffs ) # [-4, 20, 0, -16]
PokerKit は広範なテスト範囲を備えており、厳密モードでの mypy 静的型チェックに合格し、実際のシナリオでの広範な使用を通じて検証されています。
貢献は大歓迎です!詳細については、貢献ガイドをお読みください。
PokerKit は MIT ライセンスに基づいて配布されます。
研究で PokerKit を使用する場合は、私たちのライブラリを引用してください。
@ARTICLE { 10287546 ,
author = { Kim, Juho } ,
journal = { IEEE Transactions on Games } ,
title = { PokerKit: A Comprehensive Python Library for Fine-Grained Multi-Variant Poker Game Simulations } ,
year = { 2023 } ,
volume = { } ,
number = { } ,
pages = { 1-8 } ,
doi = { 10.1109/TG.2023.3325637 } }