순수 Python 포커 핸드 평가 라이브러리
[ 3 ❤ ] , [ 3 ♠ ]
$ pip install treys
Treys는 Deuces의 Python 3 포트입니다. 대부분의 작업은 msaindon의 포크에서 가져옵니다.
Treys(원래 Deuces)는 Will Drevo가 MIT Pokerbots Competition을 위해 작성했습니다. 가볍고 빠릅니다. 모든 조회는 비트 산술 및 사전 조회로 수행됩니다. 즉, Treys는 C 구현(~250k 평가/초)을 능가하지는 않지만 Python이 필요하거나 봇에 합리적인 사고 시간(인간 시간 척도)이 할당되는 상황에 유용합니다.
Treys는 5, 6, 7장의 카드 핸드 조회를 처리합니다. 6장과 7장의 카드 조회는 5장의 카드 선택을 조합적으로 평가하여 수행됩니다.
Treys는 설정과 사용이 쉽습니다.
>> > from treys import Card
>> > card = Card . new ( 'Qh' )
카드 개체는 Treys의 성능과 경량을 유지하기 위해 정수로 표시됩니다.
이제 보드와 텍사스 홀덤 핸드의 예를 만들어 보겠습니다.
>> > 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은 로얄 플러시이고 7462는 부적합한 7-5-4-3-2입니다. 포커에는 뚜렷하게 순위가 매겨진 핸드가 7642개밖에 없기 때문입니다. 다시 한 번, 이것이 왜 그런지에 대한 수학적으로 완전한 설명을 보려면 내 블로그 게시물을 참조하세요.
덱에서 무작위로 카드를 꺼내고 싶다면 Treys를 사용해도 됩니다.
>> > 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 Will Drevo
본 소프트웨어 및 관련 문서 파일("소프트웨어")의 사본을 취득한 모든 사람에게 사용, 복사, 수정, 병합에 대한 권리를 포함하되 이에 국한되지 않고 제한 없이 소프트웨어를 취급할 수 있는 권한이 무료로 부여됩니다. , 소프트웨어 사본을 게시, 배포, 재라이센스 부여 및/또는 판매하고, 소프트웨어를 제공받은 사람에게 다음 조건에 따라 그렇게 하도록 허용합니다.
위의 저작권 고지와 본 허가 고지는 소프트웨어의 모든 사본 또는 상당 부분에 포함됩니다.
소프트웨어는 상품성, 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하되 이에 국한되지 않고 명시적이든 묵시적이든 어떠한 종류의 보증 없이 "있는 그대로" 제공됩니다. 어떠한 경우에도 작성자나 저작권 보유자는 계약, 불법 행위 또는 기타 행위로 인해 소프트웨어나 사용 또는 기타 거래와 관련하여 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다. 소프트웨어.