示例#1
0
  def declare_action(self, valid_actions, hole_card, round_state):
    choice = self.__choice_action(valid_actions)
    action = choice["action"]
    amount = choice["amount"]
    if action == "raise":
      amountToRaise = 40
      amount = amountToRaise #rand.randrange(amount["min"], max(amount["min"], amount["max"]) + 1)
    opponentAgressivnessScore  = opponentAgressivness(self)
    opponentAgressivnessScoreLast7Round = opponentAgressivness(self, 2)
    card1InString, card2InString = hole_card[0], hole_card[1]
    cardObject1 = cardToCardObject(card1InString)
    cardObject2 = cardToCardObject(card2InString)
    pot, levelOfBetting, cardsOnBoard, roundCount, isOnSmallblind, isOnBigBlind, smallBlindAmount, bigBlindAmount, stackOfPlayer, stackOfOpponent = extractInfoFromState(self.uuid, round_state)
    cardsOnBoardObjects = getBoardToCardsObject(cardsOnBoard)
    allCardsObjectOnBoard = cardsOnBoardObjects[:2 + levelOfBetting - 1]
    evaluator = Evaluator()
    if len(cardsOnBoardObjects) > 0:  # if there is any card on board - so after flop every case
      handStrengthLibrary = evaluate(evaluator, allCardsObjectOnBoard, cardObject1, cardObject2)
    else:  # preFLop
      handStrengthLibrary = 0
    sklanskyClass = getSklanskyClass(card1InString, card2InString)

    cards = getAllCards()
    cards.remove(cardObject1)
    cards.remove(cardObject2)
    for boardCard in cardsOnBoardObjects:
      cards.remove(boardCard)
    evaluator = Evaluator()
    if len(cardsOnBoardObjects) > 0:
      HS = handStrength(cardsOnBoardObjects, cardObject1, cardObject2, cards, evaluator)
    else:
      HS = 0

    EHS, PPOT, NPOT = 0,0,0
    # if len(cardsOnBoardObjects) > 0:  # if there is any card on board - so after flop every case
    #   EHS, HS, PPOT, NPOT = effectiveHandStrength(cardsOnBoardObjects, handStrength, cardObject1, cardObject2)
    # else:
    #   EHS, HS, PPOT, NPOT = 0, 0, 0, 0

    # handle -BigBlind and smallBlind
    if levelOfBetting == 1 and action != "fold":
      if isOnSmallblind:
        realAmountToPlay = amount - smallBlindAmount
      elif isOnBigBlind:
        realAmountToPlay = amount - bigBlindAmount
      else:  # no blind
        realAmountToPlay = amount
    else:
      realAmountToPlay = amount

    addRowToHistory(self.historyDF,
                    [self.hashOfGame, self.uuid, hole_card[0], hole_card[1], action, realAmountToPlay, pot,
                     levelOfBetting, cardsOnBoard, roundCount, isOnSmallblind, isOnBigBlind
                      , smallBlindAmount, bigBlindAmount, stackOfPlayer, stackOfOpponent,
                     sklanskyClass, EHS, HS, PPOT, NPOT, handStrengthLibrary, opponentAgressivnessScore,
                     opponentAgressivnessScoreLast7Round])
    return action, amount
示例#2
0
 def is_winner(self):
     # This function return 1 if the player wins, 0 if it is a draw, and -1 if the opponent wins.
     try:
         player_hand_str = Evaluator().evaluate(self.flop_cards,
                                                self.player_cards)
         opponent_hand_str = Evaluator().evaluate(self.flop_cards,
                                                  self.opponent_cards)
     except TypeError, e:
         print(
             'ERROR: Something went wrong. Make sure that all required cards are defined.'
         )
示例#3
0
def run(number):
    """
    This function generates a population sample with size sample.
    It also computes probabilities for each hand, considering a
    frequentist approach.

    Arguments:
        - number (int): run ID

    Returns:
        - stats (str): returns a JSON formatted string containing
            probabilities for each poker hand
    """
    print 'starting run #{0}'.format(number)
    evaluator = Evaluator()
    poker_hands = defaultdict(int)

    for _ in range(SAMPLE_SIZE):
        deck = Deck()
        p1_hand = deck.draw(5)
        p1_score = evaluator.evaluate(p1_hand, [])
        if p1_score == 1:  # just a little hack
            poker_hands['Royal Flush'] += 1
        else:
            p1_class = evaluator.get_rank_class(p1_score)
            poker_hands[evaluator.class_to_string(p1_class)] += 1

    stats = dict((k, round(float(v)/SAMPLE_SIZE, 7))
                 for k, v in poker_hands.items())
    return json.dumps(stats)
def estimate_proba(hand, board, n_player, n_simul=1000):
    evaluator = Evaluator()
    to_draw = 5 - len(board)
    deck = set_deck(hand, board)

    winnings = []

    for _ in range(n_simul):
        deck2 = deepcopy(deck)
        shuffle(deck2.cards)
        if to_draw == 1:
            board2 = board + [deck2.draw(to_draw)]
        else:
            board2 = board + deck2.draw(to_draw)
        if n_player > 2:
            other_hands = list(
                zip(deck2.draw(n_player - 1), deck2.draw(n_player - 1)))
            score_others = min([
                evaluator.evaluate(list(hand2), board2)
                for hand2 in other_hands
            ])
        elif n_player == 2:
            other_hand = deck2.draw(2)
            score_others = evaluator.evaluate(other_hand, board2)

        score_player = evaluator.evaluate(hand, board2)

        winnings += [score_player < score_others]

    return mean(winnings)
示例#5
0
def is_good(board_cards=[], hand_cards=['AH', 'KD']):
    if (len(board_cards) + len(hand_cards) == 0):
        return False

    board = []
    for x in board_cards:
        c = Card.new('{0}{1}'.format(x[0], x[1].lower()))
        board.append(c)

    hand = []
    for x in hand_cards:
        c = Card.new('{0}{1}'.format(x[0], x[1].lower()))
        hand.append(c)

    evaluator = Evaluator()
    deck = Deck()
    random_cards = deck.draw(5 - len(board) - len(hand))
    score = evaluator.evaluate(board + random_cards, hand)
    rank_class = evaluator.get_rank_class(score)

    print_cards(board + random_cards + hand, rank_class)

    if (rank_class < 9):
        return True
    return False
示例#6
0
    def __finalize_game(self):
        """
        Giving all the money to the player with the best hand
        (Nothing to adapt here)
        :return:
        """

        evaluator = Evaluator()
        hand_strength = np.array(
            [evaluator.evaluate(hand, self.board) for hand in self.hands])

        if any(~(self.all_ins | self.ins)):
            hand_strength[~(self.all_ins | self.ins)] = np.nan

        if any(self.all_ins | self.ins):
            winner = np.nanargmin(hand_strength)
            # computing how much money the winner is getting from the others
            money_transfer = np.min(
                [self.bets, [self.bets[winner]] * self.n_players], axis=0)
            self.money[winner] += np.sum(money_transfer)
            self.bets = self.bets - money_transfer

        # redistributing what hasn't been won to the players
        self.money += self.bets
        self.bets *= 0
示例#7
0
 def __init__(self):
     self.emulateCount = 1000
     self.maxRank = 7462
     self.evaluator = Evaluator()
     self.color = {'SPADES': 0, 'HEARTS': 1, 'CLUBS': 2, 'DIAMONDS': 3}
     self.rColor = ['♠', '♥', '♣', '♦']
     self.eColor = ['s', 'h', 'c', 'd']
     self.rPoint = [
         '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A'
     ]
     self.ePoint = self.rPoint
     self.type = {
         'HIGH_CARD': 0,
         'ONE_PAIR': 1,
         'TWO_PAIR': 2,
         'THREE_OF_A_KIND': 3,
         'STRAIGHT': 4,
         'FLUSH': 5,
         'FULL_HOUSE': 6,
         'FOUR_OF_A_KIND': 7,
         'STRAIGHT_FLUSH': 8
     }
     self.entries = {
         'HIGH_CARD': self.__is_high_card,
         'ONE_PAIR': self.__is_one_pair,
         'TWO_PAIR': self.__is_two_pair,
         'THREE_OF_A_KIND': self.__is_three_of_a_kind,
         'STRAIGHT': self.__is_straight,
         'FLUSH': self.__is_flush,
         'FULL_HOUSE': self.__is_full_house,
         'FOUR_OF_A_KIND': self.__is_four_of_a_kind,
         'STRAIGHT_FLUSH': self.__is_straight_flush
     }
示例#8
0
    def __init__(self,
                 bots,
                 initial_credits=2000,
                 num_decks=1,
                 small_blind_amount=1,
                 seed=None):
        self.players = []
        self.credits = {}
        self.id = {}
        self.deck = Deck()
        self.evaluator = Evaluator()
        # big blind amount is 2x small_blind_amount
        self.small_blind_amount = small_blind_amount

        # initialize randomness
        if seed is None:
            random.seed()  # seed with, hopefully, /dev/urandom
            seed = random.randint(0, 2**32)
        self.output("random seed: %d" % seed)
        random.seed(seed)

        for id, bot in enumerate(bots):
            bot_instance = bot(id=id,
                               credits=initial_credits,
                               small_blind_amount=self.small_blind_amount,
                               big_blind_amount=self.big_blind_amount)
            self.players.append(bot_instance)
            self.id[bot_instance] = id
            self.credits[bot_instance] = initial_credits
            bot_instance.credits_table = self.credits
        self.active_players = copy.copy(self.players)
示例#9
0
def build_dataframe(nb_hands=100, nb_players=2):
    decks = [Deck() for _ in range(nb_hands)]

    df_board = pd.DataFrame({'board': [deck.draw(5) for deck in decks]})

    df_players = pd.concat([
        pd.DataFrame({'player': [deck.draw(2) for deck in decks]})
        for _ in range(nb_players)
    ],
                           axis=1,
                           keys=range(nb_players))
    df_players = df_players.swaplevel(0, 1, axis=1)

    evaluator = Evaluator()
    df_scores = pd.concat([
        df_board.join(df_players.xs(i, level=1, axis=1)).apply(
            lambda x: evaluator.evaluate(x['board'], x['player']),
            axis=1).to_frame('score')
        for i in df_players.columns.get_level_values(1)
    ],
                          axis=1,
                          keys=df_players.columns.get_level_values(1))
    df_scores = df_scores.swaplevel(0, 1, axis=1)

    return df_board, df_players, df_scores
示例#10
0
    def __init__(self):
        # All possible card ranks (0-12 inclusive)
        # +  13 - used for board cards when they have not been dealt

        # all_card_rank_values = np.array([x for x in range(14)]).reshape(14, 1)
        # All possible suit values (0 - 4 inclusive)
        # +  9 - used for board cards when they have not been dealt
        all_card_suit_values = np.array([1, 2, 4, 8, 9]).reshape(5, 1)

        self.rank_enc = OneHotEncoder(handle_unknown='error',
                                      categories='auto')
        self.rank_enc.fit(all_card_rank_values)

        self.suit_enc = OneHotEncoder(handle_unknown='error',
                                      categories='auto')
        self.suit_enc.fit(all_card_suit_values)

        # Put in  dummy variables for undealt cards
        self.table_card_ranks = [0 for x in range(5)]
        self.table_card_suits = [0 for x in range(5)]

        self.evaluator = Evaluator()

        self.min_max_scaling = lambda a, b, min_x, max_x, x: a + (
            (x - min_x) * (b - a)) / (max_x - min_x)

        self.preflop_suited_array = np.loadtxt(
            "./preflop_odds/suited_pair_scores.csv", delimiter=',')
        self.preflop_unsuited_array = np.loadtxt(
            "./preflop_odds/unsuited_pair_scores.csv", delimiter=',')
        self.normalise_preflop_arrays()
示例#11
0
def get_score(hand_cards, board_cards):

    board = []
    for x in board_cards:
        x = x.encode('ascii', 'ignore')
        c = Card.new('{0}{1}'.format(x[0], x[1].lower()))
        board.append(c)

    hand = []
    for x in hand_cards:
        x = x.encode('ascii', 'ignore')
        c = Card.new('{0}{1}'.format(x[0], x[1].lower()))
        hand.append(c)

    score_min = 9999999
    if (len(hand) + len(board) <= 5):
        return score_min
    else:

        for board_five_match in combinations(board, 5 - len(hand)):
            evaluator = Evaluator()
            score = evaluator.evaluate(tuple(board_five_match), tuple(hand))
            if (score < score_min):
                score_min = score
        return score_min
示例#12
0
	def __init__(self, preflop_tight_loose_threshold, aggresive_passive_threshold, bet_tolerance):
		self.preflop_tight_loose_threshold = preflop_tight_loose_threshold
		self.aggresive_passive_threshold = aggresive_passive_threshold
		self.bet_tolerance = bet_tolerance
		# deuces
		self.evaluator = Evaluator()
		self.deck = Deck()
示例#13
0
文件: hand.py 项目: pashadia/treys
    def __init__(self, cards, board, evaluator=None):
        """Initialize new poker hand from a card array and an evaluator."""
        assert len(cards) == 2
        assert len(board) in [3, 4, 5]

        # checking there are 5, 6 or 7 unique cards
        cardset = set(list(cards) + list(board))
        assert len(cardset) == len(cards) + len(board)

        if isinstance(cards[0], str):
            self._cards = [Card.new(card_str) for card_str in cards]
        else:
            self._cards = list(cards)
        self._cards = sorted(self._cards)

        #TODO allow for Flop object to be passed

        self._board = Flop(board)

        if evaluator:
            self.ev = evaluator
        else:
            ev = Evaluator()
            self.ev = ev

        self.rank = self.ev.evaluate(self._cards, self._board._cards)
        self.rank_class = self.ev.get_rank_class(self.rank)

        self._hand_ranks = sorted(
            [Card.get_rank_int(card) for card in self._cards])
        self._board_ranks = self._board.ranks
 def test_create_single_df_of_scores(self):
     evaluator = Evaluator()
     df = self.df_board.join(self.df_players.xs(0, level=1, axis=1)).apply(
         lambda x: evaluator.evaluate(x['board'], x['player']),
         axis=1).to_frame('score')
     expected = [[310], [2415], [5362], [4014], [2991]]
     self.assertEqual(df.values.tolist(), expected)
     self.assertEqual(df.columns, ['score'])
 def test_valuation(self):
     player0 = self.df_players.xs(0, level=1, axis=1)
     df = self.df_board.join(player0)
     evaluator = Evaluator()
     valuations = df.apply(
         lambda x: evaluator.evaluate(x['board'], x['player']), axis=1)
     expected = [310, 2415, 5362, 4014, 2991]
     self.assertEqual(valuations.values.tolist(), expected)
示例#16
0
    def build(self, testMode=True):
        """
        Initiate objects and views.
        """
        ''' init game objects '''
        self.deck = Deck()
        self.evaluator = Evaluator()

        self.player = []
        self.player.append(Player(0))
        self.player.append(Player(1))
        # board stands for public cards on board
        self.board = Board()

        # In test mode, both player select right-most cards for the turn automatically
        self.testMode = testMode
        ''' create view objects '''
        # Scatter that can be rotated to display players
        scatter_bot = ScatterLayout(do_rotation=False,
                                    do_translation=False,
                                    do_scale=False,
                                    size_hint=(1, 1),
                                    pos_hint={
                                        'x': 0,
                                        'y': 0
                                    },
                                    rotation=0)
        # For player on top, the widget rotates 180 degree
        scatter_top = ScatterLayout(do_rotation=False,
                                    do_translation=False,
                                    do_scale=False,
                                    size_hint=(1, 1),
                                    pos_hint={
                                        'x': 0,
                                        'y': 0
                                    },
                                    rotation=180)

        box = PlayerDeck()
        box2 = PlayerDeck()
        publicArea = PublicArea()
        box.build(self, "player1", 0, self.testMode)
        box2.build(self, "player2", 1, self.testMode)
        publicArea.build()

        scatter_bot.add_widget(box)
        scatter_top.add_widget(box2)

        self.add_widget(scatter_bot)
        self.add_widget(scatter_top)
        self.add_widget(publicArea)

        # register id of view objects
        self.ids[box.id] = box
        self.ids[box2.id] = box2
        self.ids[publicArea.id] = publicArea
示例#17
0
def get_score_by_simulate(board_cards, hand_cards, iteration=5):

    try:
        score_min = 10000  # deuces evaluate score, the small, the better
        board = []
        for x in board_cards:
            x = x.encode('ascii', 'ignore')
            c = Card.new('{0}{1}'.format(x[0], x[1].lower()))
            board.append(c)

        hand = []
        for x in hand_cards:
            x = x.encode('ascii', 'ignore')
            c = Card.new('{0}{1}'.format(x[0], x[1].lower()))
            hand.append(c)
        if (len(hand) + len(board) < 5):
            score_list = []
            for i in range(iteration):
                evaluator = Evaluator()
                deck = Deck()
                random_cards = deck.draw(5 - len(board) - len(hand))
                if (isinstance(random_cards, int)):
                    random_cards = [random_cards]
                score = evaluator.evaluate(board + random_cards, hand)
                score_list.append(score)

            score_list.remove(max(score_list))
            score_list.remove(min(score_list))

            return sum(score_list) / float(len(score_list))
        else:

            for board_five_match in combinations(board, 5 - len(hand)):
                evaluator = Evaluator()
                score = evaluator.evaluate(tuple(board_five_match),
                                           tuple(hand))
                if (score < score_min):
                    score_min = score
            return score_min
    except Exception as e:
        traceback.print_exc()
        printtolog('EXCEPTION={0}'.format(e))
        return score_min
示例#18
0
    def declare_action(self, valid_actions, hole_card, round_state):
        # valid_actions format => [raise_action_info, call_action_info, fold_action_info]
        # print valid_actions
        opponentAgressivnessScore = opponentAgressivness(self)
        opponentAgressivnessScoreLast7Round = opponentAgressivness(self, 7)
        card1InString, card2InString = hole_card[0], hole_card[1]
        cardObject1 = cardToCardObject(card1InString)
        cardObject2 = cardToCardObject(card2InString)
        call_action_info = valid_actions[1]
        action = call_action_info["action"]
        amount = call_action_info["amount"]
        pot, levelOfBetting, cardsOnBoard, roundCount, isOnSmallblind, isOnBigBlind, smallBlindAmount, bigBlindAmount, stackOfPlayer, stackOfOpponent = extractInfoFromState(
            self.uuid, round_state)
        cardsOnBoardObjects = getBoardToCardsObject(cardsOnBoard)
        allCardsObjectOnBoard = cardsOnBoardObjects[:2 + levelOfBetting - 1]
        evaluator = Evaluator()
        print cardsOnBoardObjects
        if len(
                cardsOnBoardObjects
        ) > 0:  # if there is any card on board - so after flop every case
            handStrength = evaluate(evaluator, allCardsObjectOnBoard,
                                    cardObject1, cardObject2)
        else:  # preFLop
            handStrength = 0
        sklanskyClass = getSklanskyClass(card1InString, card2InString)

        if len(
                cardsOnBoardObjects
        ) > 0:  # if there is any card on board - so after flop every case
            EHS, HS, PPOT, NPOT = effectiveHandStrength(
                cardsOnBoardObjects, handStrength, cardObject1, cardObject2)
        else:
            EHS, HS, PPOT, NPOT = 0, 0, 0, 0

        #handle -BigBlind and smallBlind
        if levelOfBetting == 1:
            if isOnSmallblind:
                realAmountToPlay = amount - smallBlindAmount
            elif isOnBigBlind:
                realAmountToPlay = amount - bigBlindAmount
            else:  #no blind
                realAmountToPlay = amount
        else:
            realAmountToPlay = amount

        addRowToHistory(self.historyDF, [
            self.hashOfGame, self.uuid, hole_card[0], hole_card[1], action,
            realAmountToPlay, pot, levelOfBetting, cardsOnBoard, roundCount,
            isOnSmallblind, isOnBigBlind, smallBlindAmount, bigBlindAmount,
            stackOfPlayer, stackOfOpponent, sklanskyClass, EHS, HS, PPOT, NPOT,
            handStrength, opponentAgressivnessScore,
            opponentAgressivnessScoreLast7Round
        ])
        # print(self.historyDF)
        return action, amount  # action returned here is sent to the poker engine
示例#19
0
文件: core.py 项目: icqw/texas-holdem
def ai_action(data, debug=False):

    rank, s_player, round_count = get_player(data)
    table_card, self_card = get_card(data)
    betCount = get_betCount(data)
    min_bet = get_minBet(data)
    print "Survive player : {n}".format(n=s_player)
    print "Sparrow ranking: {n}".format(n=rank)
    print "Total BetCount : {n}".format(n=betCount)
    print "min_bet        : {n}".format(n=min_bet)

    gamma = 0
    beta = 0
    alpha = 0

    if rank < 3:
        alpha = -1200
        gamma = -1000
    '''
    if round_count > 5 and rank > 5:
        gamma += 1000
        beta += 1000
    
    if rank > 7:
        beta += 500
    '''
    if min_bet > 200:
        gamma += -500
        beta += -500

    if min_bet > 400:
        gamma += -1000
        beta += -500

    if len(table_card + self_card) >= 5:
        evaluator = Evaluator()
        pscore = evaluator.evaluate(table_card, self_card)
        pclass = evaluator.get_rank_class(pscore)
        print "Sparrow hand rank = %d (%s)\n" % (
            pscore, evaluator.class_to_string(pclass))

        if pscore > 6000 + beta:
            return "fold"
        elif pscore > 4000 + gamma:
            return "call"
        elif pscore > 2000 + alpha:
            return "raise"
        else:
            return "allin"

    elif round_count < 10 and min_bet > 300:
        return "fold"
    else:
        return "call"
示例#20
0
    def compareRank(self):
        HighRank = 8000
        HingRankIndex = -1
        board = []
        evalulator = Evaluator()

        sh1 = self.convertHand(self.object1.student_Hand)
        HighRank = evalulator.evaluate(board, sh1)
        HighRankIndex = 0
        print "\n"
        print "Player 1: " + self.object1.student_Name + "\t Cards: " + self.printHand(
            self.object1.student_Hand) + "\t Card-rank: " + str(HighRank)

        sh2 = self.convertHand(self.object2.student_Hand)
        rank = evalulator.evaluate(board, sh2)
        print "\n"
        print "Player 2: " + self.object2.student_Name + "\t Cards: " + self.printHand(
            self.object2.student_Hand) + "\t Card-rank: " + str(rank)

        if (rank < HighRank):
            HighRank = rank
            HighRankIndex = 1

        if (self.object3 is None):
            print "\n"
            print "Player " + str(HighRankIndex +
                                  1) + " is winner with rank " + str(HighRank)
            return
        else:
            sh3 = self.convertHand(self.object3.student_Hand)
            rank = evalulator.evaluate(board, sh3)
            print "\n"
            print "Player 3: " + self.object3.student_Name + "\t Cards: " + self.printHand(
                self.object3.student_Hand) + "\t Card-rank: " + str(rank)

            if (rank < HighRank):
                HighRank = rank
                HighRankIndex = 2

        if (self.object4 is None):
            print "\n"
            print "Player " + str(HighRankIndex +
                                  1) + " is winner with rank " + str(HighRank)
            return
        else:
            sh4 = self.convertHand(self.object4.student_Hand)
            rank = evalulator.evaluate(board, sh4)
            print "\n"
            print "Player 4: " + self.object1.student_Name + "\t Cards: " + self.printHand(
                self.object4.student_Hand) + "\t Card-rank: " + str(rank)

            if (rank < HighRank):
                HighRank = rank
                HighRankIndex = 3
示例#21
0
文件: table.py 项目: robax/Viceroy
 def getHandStrength(self):
     evaluator = Evaluator()
     score = evaluator.evaluate(
         [Card.new(str(self.hand[0])),
          Card.new(str(self.hand[1]))],
         [Card.new('Td'), Card.new('4c'),
          Card.new('9s')])
     rank = evaluator.get_rank_class(score)
     print "Score:", score, "Percentile:", round(
         1 - float(score) / float(7254),
         2), "Class:", evaluator.class_to_string(rank)
def build_dataframe(nb_hands=1000):
    decks = [Deck() for _ in range(nb_hands)]
    boards = [deck.draw(5) for deck in decks]
    player1 = [deck.draw(2) for deck in decks]
    player2 = [deck.draw(2) for deck in decks]

    e = Evaluator()
    score1 = [e.evaluate(b, h) for (b, h) in zip(boards, player1)]
    score2 = [e.evaluate(b, h) for (b, h) in zip(boards, player2)]

    return pd.DataFrame({'score1': score1, 'score2': score2})
示例#23
0
def getRank3(card):
    hand = [Card.new(card[0]), Card.new(card[1])]
    evaluator = Evaluator()
    board = [
        Card.new(card[2]),
        Card.new(card[3]),
        Card.new(card[4]),
        Card.new(card[5])
    ]
    rank3 = evaluator.evaluate(board, hand)
    return rank3
示例#24
0
def get_hand_strength(hole_cards, board_cards):
    """
    Takes in hole cards and board cards and returns the hand strength.
    """
    evaluator=Evaluator()
    hole=[Card.new(hole_cards[0]), Card.new(hole_cards[1])]
    board=[]
    for card in board_cards:
        board.append(Card.new(card))
    strength=(7643-evaluator.evaluate(hole, board))/float(7642)
    return strength
示例#25
0
    def getFeatures(self, state, action):
        features = defaultdict(float)

        # Get the chip ratio.
        features['C-RATIO'] = util.chipRatio(self.chipsIn, state[2])
        # Get the agents hand strength.
        features['STRENGTH'] = util.strength(Evaluator(), self.getCards(),
                                             state[0])
        # Get the agents aggression.
        features['AGGRESSION'] = state[4]

        return features
示例#26
0
 def get_deuces_hand_strength(self, cards, board_cards):
     """
     Gets the effective hand strength of your cards at any stage of the game using the deuces library.
     """
     evaluator = Evaluator()
     hole = [Card.new(cards[0]), Card.new(cards[1])
             ]  #Turns cards and board cards into deuces.Card objects
     board = []
     for card in board_cards:
         board.append(Card.new(card))
     return (7643 - evaluator.evaluate(hole, board)) / float(
         7642)  #Turns the hand strength into a decimal in the range of 0-1
示例#27
0
def get_score_by_simulate(hand, board, iteration=100):
    if(len(hand)+len(board)<=5):
        score_list = []
        for i in range(iteration):
            evaluator = Evaluator()
            deck = Deck()
            random_cards = deck.draw(5-len(board)-len(hand))
            score = evaluator.evaluate(board+random_cards, hand)
            score_list.append(score)
            
        score_list.remove(max(score_list))    
        score_list.remove(min(score_list))    
        
        return sum(score_list)/float(len(score_list))
    else:
        score_min = 9999999
        for board_five_match in combinations(board,5-len(hand)):
            evaluator = Evaluator()
            score = evaluator.evaluate(tuple(board_five_match), tuple(hand))
            if(score<score_min):
                score_min=score
        return score_min
示例#28
0
 def __init__(self, player_list, chips, blinds):
     self.player_list = player_list
     self.player_num = len(player_list)
     #self.hands = [[] for i in range(len(player_list))]
     self.deck = Deck()
     self.evaluator = Evaluator()
     self.blinds = blinds
     self.chips = chips
     self.pot = [0 for x in range(0,self.player_num)]
     self.table_chips = 0
     self.raise_counter = 0
     self.table = []
     self.strengths =[[], []]
 def test_create_df_of_scores(self):
     evaluator = Evaluator()
     scores = pd.concat([
         self.df_board.join(self.df_players.xs(i, level=1, axis=1)).apply(
             lambda x: evaluator.evaluate(x['board'], x['player']),
             axis=1).to_frame('score')
         for i in self.df_players.columns.get_level_values(1)
     ],
                        axis=1,
                        keys=range(2))
     scores = scores.swaplevel(0, 1, axis=1)
     self.assertEqual(len(scores), 5)
     expected = [('score', 0), ('score', 1)]
     self.assertEqual(scores.columns.tolist(), expected)
示例#30
0
def get_strength_difference(hole_cards_1, hole_cards_2, board_cards):
    """
    Takes in the hole cards and the board cards and returns the difference in hand strength between player one and
    player two.
    """
    evaluator=Evaluator()
    hole_1=[Card.new(hole_cards_1[0]), Card.new(hole_cards_1[1])]
    hole_2=[Card.new(hole_cards_2[0]), Card.new(hole_cards_2[1])]
    board=[]
    for card in board_cards:
        board.append(Card.new(card))
    strength_1=(7643-evaluator.evaluate(hole_1, board))/float(7642)
    strength_2=(7643-evaluator.evaluate(hole_2, board))/float(7642)
    return strength_1-strength_2