ไลบรารีการประเมินมือโป๊กเกอร์ Python ล้วนๆ
[ 3 ❤ ] , [ 3 ♠ ]
$ pip install treys
Treys เป็นพอร์ต Python 3 ของ Deuces งานส่วนใหญ่นำมาจากส้อมของ msaindon
Treys (เดิมชื่อ Deuces) เขียนโดย Will Drevo สำหรับการแข่งขัน MIT Pokerbots มันมีน้ำหนักเบาและรวดเร็ว การค้นหาทั้งหมดเสร็จสิ้นด้วยการค้นหาทางคณิตศาสตร์และพจนานุกรม ที่กล่าวว่า Treys จะไม่เอาชนะการใช้งาน C (~ 250,000 eval/s) แต่มันมีประโยชน์สำหรับสถานการณ์ที่จำเป็นต้องใช้ Python หรือในกรณีที่บอทได้รับการจัดสรรเวลาคิดที่สมเหตุสมผล (มาตราส่วนเวลาของมนุษย์)
Treys จัดการการค้นหาไพ่ในมือ 5, 6 และ 7 ใบ การค้นหาไพ่ 6 และ 7 ทำได้โดยการประเมินตัวเลือกไพ่ 5 ใบรวมกัน
Treys ติดตั้งและใช้งานง่าย
>> > from treys import Card
>> > card = Card . new ( 'Qh' )
วัตถุการ์ดจะแสดงเป็นจำนวนเต็มเพื่อให้ Treys มีประสิทธิภาพและมีน้ำหนักเบา
ตอนนี้เรามาสร้างกระดานและตัวอย่างมือของ Texas Hold'em:
>> > board = [
>> > Card . new ( 'Ah' ),
>> > Card . new ( 'Kd' ),
>> > Card . new ( 'Jc' )
>> > ]
>> > hand = [
>> > Card . new ( 'Qs' ),
>> > Card . new ( 'Th' )
>> > ]
จำนวนเต็มของการ์ดพิมพ์สวย ๆ ไปยังเทอร์มินัล:
>>> Card.print_pretty_cards(board + hand)
[ A ❤ ] , [ K ♦ ] , [ J ♣ ] , [ Q ♠ ] , [ T ❤ ]
หากคุณติดตั้ง termacolor
ไว้ สีเหล่านั้นก็จะมีสีเช่นกัน
หรือเดินตรงไปประเมินความแข็งแรงของมือ:
>> > from treys import Evaluator
>> > evaluator = Evaluator ()
>> > print ( evaluator . evaluate ( board , hand ))
1600
ความแข็งแกร่งของมือมีค่าตั้งแต่ 1 ถึง 7462 โดยที่ 1 คือ Royal Flush และ 7462 ไม่เหมาะกับ 7-5-4-3-2 เนื่องจากมีเพียง 7642 มือที่มีอันดับชัดเจนในโป๊กเกอร์ โปรดดูโพสต์บนบล็อกของฉันอีกครั้งเพื่อดูคำอธิบายที่สมบูรณ์ทางคณิตศาสตร์ว่าเหตุใดจึงเป็นเช่นนั้น
หากคุณต้องการแจกไพ่แบบสุ่มจากเด็ค คุณสามารถทำได้โดยใช้ Trey:
>> > from treys import Deck
>> > deck = Deck ()
>> > board = deck . draw ( 5 )
>> > player1_hand = deck . draw ( 2 )
>> > player2_hand = deck . draw ( 2 )
และพิมพ์:
>>> Card.print_pretty_cards(board)
[ 4 ♣ ] , [ A ♠ ] , [ 5 ♦ ] , [ K ♣ ] , [ 2 ♠ ]
>>> Card.print_pretty_cards(player1_hand)
[ 6 ♣ ] , [ 7 ❤ ]
>>> Card.print_pretty_cards(player2_hand)
[ A ♣ ] , [ 3 ❤ ]
มาประเมินความแข็งแกร่งของมือทั้งสองข้างกัน แล้วแยกออกเป็นคลาสๆ หนึ่งอันสำหรับแต่ละประเภทมือ (ไพ่สูง คู่ ฯลฯ)
>> > p1_score = evaluator . evaluate ( board , player1_hand )
>> > p2_score = evaluator . evaluate ( board , player2_hand )
>> > p1_class = evaluator . get_rank_class ( p1_score )
>> > p2_class = evaluator . get_rank_class ( p2_score )
หรือรับสตริงที่เป็นมิตรต่อมนุษย์เพื่ออธิบายคะแนน
>>> print("Player 1 hand rank = %d (%s)n" % (p1_score, evaluator.class_to_string(p1_class)))
Player 1 hand rank = 6330 (High Card)
>>> print("Player 2 hand rank = %d (%s)n" % (p2_score, evaluator.class_to_string(p2_class)))
Player 2 hand rank = 1609 (Straight)
หรือที่เจ๋งที่สุด รับการวิเคราะห์ทีละขั้นตอนของเกมที่เกี่ยวข้องกับความแข็งแกร่งของมือ:
>>> hands = [player1_hand, player2_hand]
>>> evaluator.hand_summary(board, hands)
========== FLOP ==========
Player 1 hand = High Card, percentage rank among all hands = 0.893192
Player 2 hand = Pair, percentage rank among all hands = 0.474672
Player 2 hand is currently winning.
========== TURN ==========
Player 1 hand = High Card, percentage rank among all hands = 0.848298
Player 2 hand = Pair, percentage rank among all hands = 0.452292
Player 2 hand is currently winning.
========== RIVER ==========
Player 1 hand = High Card, percentage rank among all hands = 0.848298
Player 2 hand = Straight, percentage rank among all hands = 0.215626
========== HAND OVER ==========
Player 2 is the winner with a Straight
ลิขสิทธิ์ (c) 2013 จะ Drevo
อนุญาตให้บุคคลใดก็ตามที่ได้รับสำเนาของซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") อนุญาตโดยไม่เสียค่าใช้จ่าย เพื่อจัดการกับซอฟต์แวร์โดยไม่มีข้อจำกัด รวมถึงแต่ไม่จำกัดเพียงสิทธิ์ในการใช้ คัดลอก ปรับเปลี่ยน ผสาน เผยแพร่ แจกจ่าย ให้อนุญาตช่วง และ/หรือขายสำเนาของซอฟต์แวร์ และอนุญาตให้บุคคลที่ได้รับซอฟต์แวร์นี้สามารถทำได้ ภายใต้เงื่อนไขต่อไปนี้:
ประกาศเกี่ยวกับลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์นี้มีให้ "ตามที่เป็น" โดยไม่มีการรับประกันใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ซึ่งรวมถึงแต่ไม่จำกัดเพียงการรับประกันความสามารถในการค้าขาย ความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ และการไม่ละเมิด ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดต่อการเรียกร้องค่าเสียหายหรือความรับผิดอื่นใดไม่ว่าในการกระทำของสัญญาการละเมิดหรืออย่างอื่นที่เกิดขึ้นจากหรือเกี่ยวข้องกับซอฟต์แวร์หรือการใช้งานหรือข้อตกลงอื่น ๆ ใน ซอฟต์แวร์.