PokerKit เป็นไลบรารีซอฟต์แวร์โอเพ่นซอร์สที่เขียนด้วย Python ล้วนๆ สำหรับการจำลองเกม ประเมินมือ และอำนวยความสะดวกในการวิเคราะห์ทางสถิติ พัฒนาโดยกลุ่มวิจัยนักศึกษาโป๊กเกอร์คอมพิวเตอร์มหาวิทยาลัยโตรอนโต PokerKit รองรับโป๊กเกอร์หลากหลายรูปแบบ และมอบสถาปัตยกรรมที่ยืดหยุ่นสำหรับผู้ใช้ในการกำหนดเกมที่กำหนดเอง สิ่งอำนวยความสะดวกเหล่านี้เปิดเผยผ่าน API โปรแกรมระดับสูงแบบรวมที่ใช้งานง่าย ห้องสมุดสามารถใช้งานได้หลากหลายกรณี ตั้งแต่การพัฒนา AI ของโป๊กเกอร์ การสร้างเครื่องมือ ไปจนถึงการใช้งานคาสิโนออนไลน์โป๊กเกอร์ ความน่าเชื่อถือของ PokerKit ได้รับการจัดตั้งขึ้นผ่านการตรวจสอบประเภทคงที่ การทดสอบเอกสารที่ครอบคลุม และการทดสอบหน่วย บรรลุการครอบคลุมโค้ด 99%
ไลบรารี PokerKit ต้องการ Python เวอร์ชัน 3.11 ขึ้นไป และสามารถติดตั้งได้โดยใช้ pip:
pip install pokerkit
ตัวอย่างการใช้งาน PokerKit แสดงไว้ด้านล่าง
ด้านล่างแสดงมือ 4 รอบระหว่าง Phil Hellmuth และ Loose Cannon Ernest Wiggins
ลิงค์: 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
ด้านล่างเป็นการวิ่งครั้งที่สอง
state . burn_card ( '??' )
state . deal_board ( 'Kh' ) # Turn
state . burn_card ( '??' )
state . deal_board ( '3c' ) # River
ด้านล่างเป็นการวิ่งครั้งที่สาม
state . burn_card ( '??' )
state . deal_board ( '7s' ) # Turn
state . burn_card ( '??' )
state . deal_board ( '8s' ) # River
ด้านล่างนี้เป็นการวิ่งหนีครั้งที่สี่
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]
ด้านล่างแสดงหม้อเงินล้านดอลลาร์ที่ถ่ายทอดสดทางโทรทัศน์ครั้งแรกระหว่าง Tom Dwan และ Phil Ivey
ลิงค์: 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]
ด้านล่างแสดงกองโป๊กเกอร์ออนไลน์ที่ใหญ่ที่สุดที่เคยเล่นระหว่าง Patrik Antonius และ Viktor Blom
ลิ้ง: 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
ด้านล่างนี้คือการจับฉลากและการดำเนินการครั้งที่สอง
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
ด้านล่างนี้คือการจับฉลากและการดำเนินการครั้งที่สาม
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]
ด้านล่างแสดงตัวอย่างมือบาดูกีจากวิกิพีเดีย
ลิงก์: https://en.wikipedia.org/wiki/Badugi
โปรดทราบว่าสแต็กเริ่มต้นถูกตั้งค่าเป็น 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
ด้านล่างนี้คือการจับฉลากและการดำเนินการครั้งที่สอง
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
ด้านล่างนี้คือการจับฉลากและการดำเนินการครั้งที่สาม
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 static ด้วยโหมดเข้มงวด และได้รับการตรวจสอบผ่านการใช้งานอย่างกว้างขวางในสถานการณ์จริง
ยินดีบริจาค! โปรดอ่านคู่มือการสนับสนุนของเราสำหรับข้อมูลเพิ่มเติม
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 } }