PokerKit adalah perpustakaan perangkat lunak sumber terbuka, ditulis dengan Python murni, untuk mensimulasikan permainan, mengevaluasi tangan, dan memfasilitasi analisis statistik, yang dikembangkan oleh Kelompok Penelitian Mahasiswa Poker Komputer Universitas Toronto. PokerKit mendukung beragam varian poker dan menyediakan arsitektur fleksibel bagi pengguna untuk menentukan permainan khusus mereka. Fasilitas ini diekspos melalui API terprogram tingkat tinggi yang intuitif dan terpadu. Perpustakaan dapat digunakan dalam berbagai kasus penggunaan, mulai dari pengembangan AI poker, dan pembuatan alat, hingga implementasi kasino poker online. Keandalan PokerKit telah ditetapkan melalui pemeriksaan tipe statis, pengujian dokumen ekstensif, dan pengujian unit, mencapai cakupan kode 99%.
Pustaka PokerKit memerlukan Python Versi 3.11 atau lebih tinggi dan dapat diinstal menggunakan pip:
pip install pokerkit
Contoh penggunaan PokerKit ditunjukkan di bawah ini.
Di bawah ini menunjukkan 4 runout hand antara Phil Hellmuth dan Loose Cannon Ernest Wiggins.
Tautan: https://youtu.be/cnjJv7x0HMY?si=4l05Ez7lQVczt8DI&t=638
Perhatikan bahwa tumpukan awal untuk beberapa pemain ditetapkan menjadi math.inf
karena tidak disebutkan.
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 ,
)
Di bawah ini adalah transaksi dan tindakan sebelum gagal.
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
Di bawah ini adalah transaksi dan tindakan kegagalan.
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
Di bawah ini adalah memilih jumlah runout.
state . select_runout_count ( 4 ) # Hellmuth
state . select_runout_count ( None ) # Wiggins
Di bawah ini adalah runout pertama.
state . burn_card ( '??' )
state . deal_board ( 'Jh' ) # Turn
state . burn_card ( '??' )
state . deal_board ( 'Ad' ) # River
Di bawah ini adalah runout kedua.
state . burn_card ( '??' )
state . deal_board ( 'Kh' ) # Turn
state . burn_card ( '??' )
state . deal_board ( '3c' ) # River
Di bawah ini adalah runout ketiga.
state . burn_card ( '??' )
state . deal_board ( '7s' ) # Turn
state . burn_card ( '??' )
state . deal_board ( '8s' ) # River
Di bawah ini adalah runout keempat.
state . burn_card ( '??' )
state . deal_board ( 'Qc' ) # Turn
state . burn_card ( '??' )
state . deal_board ( 'Kd' ) # River
Di bawah ini adalah tumpukan terakhir.
print ( state . stacks ) # [inf, 79400, 149700, inf, 37400, inf]
Di bawah ini menunjukkan pot jutaan dolar pertama yang disiarkan televisi antara Tom Dwan dan Phil Ivey.
Tautan: https://youtu.be/GnxFohpljqM
Perhatikan bahwa tumpukan awal Patrik Antonius disetel menjadi math.inf
karena tidak disebutkan.
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
)
Di bawah ini adalah transaksi dan tindakan sebelum gagal.
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
Di bawah ini adalah transaksi dan tindakan kegagalan.
state . burn_card ( '??' )
state . deal_board ( 'Jc3d5c' )
state . complete_bet_or_raise_to ( 35000 ) # Ivey
state . check_or_call () # Dwan
Di bawah ini adalah giliran transaksi dan tindakan.
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
Di bawah ini adalah aliran sungai.
state . burn_card ( '??' )
state . deal_board ( 'Jh' )
Di bawah ini adalah tumpukan terakhir.
print ( state . stacks ) # [572100, inf, 1109500]
Di bawah ini menunjukkan pertarungan antara Xuan dan Phua.
Tautan: 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
)
Di bawah ini adalah transaksi dan tindakan sebelum gagal.
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
Di bawah ini adalah transaksi kegagalan.
state . burn_card ( '??' )
state . deal_board ( '9h6cKc' )
Di bawah ini giliran pembagiannya.
state . burn_card ( '??' )
state . deal_board ( 'Jh' )
Di bawah ini adalah aliran sungai.
state . burn_card ( '??' )
state . deal_board ( 'Ts' )
Di bawah ini adalah tumpukan terakhir.
print ( state . stacks ) # [489000, 226000, 684000, 400000, 0, 198000]
Di bawah ini menunjukkan pot poker online terbesar yang pernah dimainkan antara Patrik Antonius dan Viktor Blom.
Tautan: 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
)
Di bawah ini adalah transaksi dan tindakan sebelum gagal.
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
Di bawah ini adalah transaksi dan tindakan kegagalan.
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
Di bawah ini giliran pembagiannya.
state . burn_card ( '??' )
state . deal_board ( '5h' )
Di bawah ini adalah aliran sungai.
state . burn_card ( '??' )
state . deal_board ( '9c' )
Di bawah ini adalah tumpukan terakhir.
print ( state . stacks ) # [1937923.75, 0.0]
Di bawah ini menunjukkan pertarungan buruk antara Yockey dan Arieh.
Tautan: 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
)
Di bawah ini adalah transaksi dan tindakan sebelum gagal.
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
Di bawah ini adalah undian dan aksi pertama.
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
Di bawah ini adalah undian dan aksi kedua.
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
Di bawah ini adalah undian dan aksi ketiga.
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
Di bawah ini adalah tumpukan terakhir.
print ( state . stacks ) # [0, 4190000, 5910000, 12095000]
Di bawah ini menunjukkan contoh tangan badugi dari Wikipedia.
Tautan: https://en.wikipedia.org/wiki/Badugi
Perhatikan bahwa tumpukan awal disetel menjadi math.inf
karena tidak disebutkan.
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
)
Di bawah ini adalah transaksi dan tindakan sebelum gagal.
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
Di bawah ini adalah undian dan aksi pertama.
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
Di bawah ini adalah undian dan aksi kedua.
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
Di bawah ini adalah undian dan aksi ketiga.
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
Di bawah ini adalah pertarungannya.
state . show_or_muck_hole_cards ( '2s4c6d9h' ) # Alice
state . show_or_muck_hole_cards ( '3s5d7c8h' ) # Carol
Di bawah ini adalah tumpukan terakhir.
print ( state . stacks ) # [inf, inf, inf, inf]
print ( state . payoffs ) # [-4, 20, 0, -16]
PokerKit memiliki cakupan pengujian yang luas, melewati pemeriksaan tipe statis mypy dengan mode ketat, dan telah divalidasi melalui penggunaan ekstensif dalam skenario kehidupan nyata.
Kontribusi dipersilakan! Silakan baca Panduan Berkontribusi kami untuk informasi lebih lanjut.
PokerKit didistribusikan di bawah lisensi MIT.
Jika Anda menggunakan PokerKit dalam penelitian Anda, silakan kutip perpustakaan kami:
@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 } }