Perpustakaan evaluasi tangan poker Python murni
[ 3 ❤ ] , [ 3 ♠ ]
$ pip install treys
Treys adalah port Deuces Python 3. Sebagian besar pekerjaan diambil dari garpu msaindon.
Treys (aslinya Deuces) ditulis oleh Will Drevo untuk Kompetisi MIT Pokerbots. Ini ringan dan cepat. Semua pencarian dilakukan dengan bit aritmatika dan pencarian kamus. Meskipun demikian, Treys tidak akan mengalahkan implementasi C (~250k eval/s) tetapi berguna untuk situasi di mana Python diperlukan atau di mana bot diberi waktu berpikir yang wajar (skala waktu manusia).
Treys menangani pencarian kartu 5, 6, dan 7. Pencarian 6 dan 7 kartu dilakukan dengan cara mengevaluasi 5 pilihan kartu secara kombinatorial.
Treys mudah diatur dan digunakan.
>> > from treys import Card
>> > card = Card . new ( 'Qh' )
Objek kartu direpresentasikan sebagai bilangan bulat untuk menjaga kinerja Trey dan ringan.
Sekarang mari kita buat papan dan contoh tangan Texas Hold'em:
>> > board = [
>> > Card . new ( 'Ah' ),
>> > Card . new ( 'Kd' ),
>> > Card . new ( 'Jc' )
>> > ]
>> > hand = [
>> > Card . new ( 'Qs' ),
>> > Card . new ( 'Th' )
>> > ]
Cukup cetak bilangan bulat kartu ke terminal:
>>> Card.print_pretty_cards(board + hand)
[ A ❤ ] , [ K ♦ ] , [ J ♣ ] , [ Q ♠ ] , [ T ❤ ]
Jika Anda telah menginstal termacolor
, warnanya juga akan berubah.
Jika tidak, langsung saja mengevaluasi kekuatan tangan Anda:
>> > from treys import Evaluator
>> > evaluator = Evaluator ()
>> > print ( evaluator . evaluate ( board , hand ))
1600
Kekuatan tangan dinilai pada skala 1 hingga 7462, di mana 1 adalah Royal Flush dan 7462 tidak cocok untuk 7-5-4-3-2, karena hanya ada 7642 tangan dengan peringkat berbeda dalam poker. Sekali lagi, lihat postingan blog saya untuk penjelasan matematis yang lebih lengkap mengapa hal ini terjadi.
Jika Anda ingin membagikan kartu secara acak dari tumpukan kartu, Anda juga dapat melakukannya dengan Treys:
>> > from treys import Deck
>> > deck = Deck ()
>> > board = deck . draw ( 5 )
>> > player1_hand = deck . draw ( 2 )
>> > player2_hand = deck . draw ( 2 )
dan mencetaknya:
>>> 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 ❤ ]
Mari kita evaluasi kekuatan kedua tangan, dan kemudian gabungkan ke dalam kelas, satu untuk setiap jenis tangan (Kartu Tinggi, Pasangan, dll)
>> > 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 )
atau dapatkan string yang ramah manusia untuk menggambarkan skornya,
>>> 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)
atau, yang paling keren, dapatkan analisis tahap demi tahap permainan sehubungan dengan kekuatan tangan:
>>> 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
Hak Cipta (c) 2013 Will Drevo
Izin dengan ini diberikan, secara gratis, kepada siapa pun yang memperoleh salinan perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk menggunakan Perangkat Lunak tanpa batasan, termasuk namun tidak terbatas pada hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , mempublikasikan, mendistribusikan, mensublisensikan, dan/atau menjual salinan Perangkat Lunak, dan mengizinkan orang yang menerima Perangkat Lunak untuk melakukan hal tersebut, dengan tunduk pada ketentuan berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini akan disertakan dalam semua salinan atau sebagian besar Perangkat Lunak.
PERANGKAT LUNAK INI DISEDIAKAN "APA ADANYA", TANPA JAMINAN APA PUN, TERSURAT MAUPUN TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN KELAYAKAN UNTUK DIPERDAGANGKAN, KESESUAIAN UNTUK TUJUAN TERTENTU, DAN TIDAK ADA PELANGGARAN. DALAM KEADAAN APA PUN PENULIS ATAU PEMEGANG HAK CIPTA TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN, ATAU TANGGUNG JAWAB LAINNYA, BAIK DALAM TINDAKAN KONTRAK, HUKUM ATAU LAINNYA, YANG TIMBUL DARI, ATAU SEHUBUNGAN DENGAN PERANGKAT LUNAK ATAU PENGGUNAAN ATAU HAL-HAL LAIN DALAM PERANGKAT LUNAK.