Ejemplo n.º 1
0
def simulation(remaining_board):
    # Extract variables shared through inheritance
    given_board, hole_cards = simulation.given_board, simulation.hole_cards
    num_players = simulation.num_players
    winner_list = simulation.winner_list
    result_histograms = simulation.result_histograms
    # Generate a new board
    if given_board:
        board = given_board[:]
        board.extend(remaining_board)
    else:
        board = remaining_board
    # Extract process id from the name of the current process
    # Names are of the format: PoolWorker-1 - PoolWorker-n
    proc_id = int(multiprocessing.current_process().name[-1]) - 1
    # Create results data structure which tracks results of comparisons
    result_list = []
    for player in xrange(num_players):
        result_list.append([])
    # Find the best possible poker hand given the created board and the
    # hole cards and save them in the results data structures
    (suit_histogram,
        histogram, max_suit) = holdem_functions.preprocess_board(board)
    for index, hole_card in enumerate(hole_cards):
        result_list[index] = holdem_functions.detect_hand(hole_card, board,
                                     suit_histogram, histogram, max_suit)
    # Find the winner of the hand and tabulate results
    winner_index = holdem_functions.compare_hands(result_list)
    winner_list[proc_id * (num_players + 1) + winner_index] += 1
    # Increment what hand each player made
    for index, result in enumerate(result_list):
        result_histograms[10 * (proc_id * num_players + index)
                                                      + result[0]] += 1
Ejemplo n.º 2
0
def main():
    # Parse command line arguments into hole cards and create deck
    (hole_cards, num_iterations,
                    exact, given_board, deck, num_players) = holdem_argparser.parse_args()
    assigned_num_players, unassigned_num_players = len(hole_cards), num_players - len(hole_cards)
    if(num_players == 0):
        num_players = len(hole_cards)
    # Create results data structures which tracks results of comparisons
    # 1) result_histograms: a list for each player that shows the number of
    #    times each type of poker hand (e.g. flush, straight) was gotten
    # 2) winner_list: number of times each player wins the given round
    # 3) result_list: list of the best possible poker hand for each pair of
    #    hole cards for a given board
    result_list, winner_list = [None] * num_players, [0] * (num_players + 1)
    result_histograms = []
    for player in xrange(num_players):
        result_histograms.append([0] * 10)
    # Choose whether we're running a Monte Carlo or exhaustive simulation
    board_length = 0 if given_board == None else len(given_board)
    # When a board is given, exact calculation is much faster than Monte Carlo
    # simulation, so default to exact if a board is given
    generate_boards = holdem_functions.generate_random_boards

    # Run simulations
    for generated_cards in generate_boards(deck, num_iterations, board_length, unassigned_num_players):
        # Assign cards to unassigned players
        for i in range(unassigned_num_players):
            hole_cards.append((generated_cards[0], generated_cards[1]))
            del generated_cards[0:2]

        hole_card = tuple(hole_cards)
        remaining_board = generated_cards
        # Generate a new board
        if given_board:
            board = given_board[:]
            board.extend(remaining_board)
        else:
            board = remaining_board
        # Find the best possible poker hand given the created board and the
        # hole cards and save them in the results data structures
        (suit_histogram,histogram, max_suit) = holdem_functions.preprocess_board(board)
        for index, hole_card in enumerate(hole_cards):
            result_list[index] = holdem_functions.detect_hand(hole_card, board,suit_histogram, histogram, max_suit)
        # Find the winner of the hand and tabulate results
        winner_index = holdem_functions.compare_hands(result_list)
        winner_list[winner_index] += 1
        if winner_index != 0:
            print "Winner:" + str(winner_index) + " With cards " + str(hole_cards[winner_index - 1][0]) + " | "+ str(hole_cards[winner_index - 1][1])
        # Increment what hand each player made
        for index, result in enumerate(result_list):
            result_histograms[index][result[0]] += 1

        # Dump appended random hole_cards
        hole_cards = list(hole_cards)
        for i in range(unassigned_num_players):
            del hole_cards[assigned_num_players]
    holdem_functions.print_results(hole_cards, winner_list, result_histograms)
Ejemplo n.º 3
0
def _evaluate(hole_cards, deck, given_board, num_iterations):
  num_players = len(hole_cards)
  result_list, winner_list = [None] * num_players, [0] * (num_players + 1)
  result_histograms = []
  for player in xrange(num_players):
    result_histograms.append([0] * 10)

  board_length = 0 if given_board is None else len(given_board)
  if given_board is not None:
    generate_boards = holdem_functions.generate_exhaustive_boards
  else:
    generate_boards = holdem_functions.generate_random_boards

  # Run simulations
  for remaining_board in generate_boards(deck, num_iterations, board_length):
    # Generate a new board
    if given_board:
      board = given_board[:]
      board.extend(remaining_board)
    else:
      board = remaining_board
    # Find the best possible poker hand given the created board and the
    # hole cards and save them in the results data structures
    (suit_histogram, histogram, max_suit) = \
      holdem_functions.preprocess_board(board)
    for index, hole_card in enumerate(hole_cards):
      result_list[index] = holdem_functions.detect_hand(
        hole_card, board, suit_histogram, histogram, max_suit
      )
    # Find the winner of the hand and tabulate results
    winner_index = holdem_functions.compare_hands(result_list)
    winner_list[winner_index] += 1
    # Increment what hand each player made
    for index, result in enumerate(result_list):
      result_histograms[index][result[0]] += 1

  float_iterations = float(sum(winner_list))
  return winner_list[1] / float_iterations, winner_list[2] / float_iterations
Ejemplo n.º 4
0
def _evaluate(hole_cards, deck, given_board, num_iterations):
    num_players = len(hole_cards)
    result_list, winner_list = [None] * num_players, [0] * (num_players + 1)
    result_histograms = []
    for player in xrange(num_players):
        result_histograms.append([0] * 10)

    board_length = 0 if given_board is None else len(given_board)
    if given_board is not None:
        generate_boards = holdem_functions.generate_exhaustive_boards
    else:
        generate_boards = holdem_functions.generate_random_boards

    # Run simulations
    for remaining_board in generate_boards(deck, num_iterations, board_length):
        # Generate a new board
        if given_board:
            board = given_board[:]
            board.extend(remaining_board)
        else:
            board = remaining_board
        # Find the best possible poker hand given the created board and the
        # hole cards and save them in the results data structures
        (suit_histogram, histogram, max_suit) = \
          holdem_functions.preprocess_board(board)
        for index, hole_card in enumerate(hole_cards):
            result_list[index] = holdem_functions.detect_hand(
                hole_card, board, suit_histogram, histogram, max_suit)
        # Find the winner of the hand and tabulate results
        winner_index = holdem_functions.compare_hands(result_list)
        winner_list[winner_index] += 1
        # Increment what hand each player made
        for index, result in enumerate(result_list):
            result_histograms[index][result[0]] += 1

    float_iterations = float(sum(winner_list))
    return winner_list[1] / float_iterations, winner_list[2] / float_iterations
Ejemplo n.º 5
0
def calc(hold_card, board_card=None):

    # generate parameter
    hole_cards = holdem_argparser.parse_hole_cards(hold_card)
    given_board = holdem_argparser.parse_cards(board_card)

    if given_board:
        all_cards = list(hole_cards)
        all_cards.append(given_board)
        deck = holdem_functions.generate_deck(all_cards)
    else:
        deck = holdem_functions.generate_deck(hole_cards)

    num_iterations = 10000
    exact = False

    # copy from holem_calc.py main fuction
    num_players = 1
    # Create results data structures which tracks results of comparisons
    # 1) result_histograms: a list for each player that shows the number of
    #    times each type of poker hand (e.g. flush, straight) was gotten
    # 2) winner_list: number of times each player wins the given round
    # 3) result_list: list of the best possible poker hand for each pair of
    #    hole cards for a given board
    result_list, winner_list = [None] * num_players, [0] * (num_players + 1)
    result_histograms = []
    for player in xrange(num_players):
        result_histograms.append([0] * 10)
    # Choose whether we're running a Monte Carlo or exhaustive simulation
    board_length = 0 if given_board == None else len(given_board)
    # When a board is given, exact calculation is much faster than Monte Carlo
    # simulation, so default to exact if a board is given
    if exact or given_board is not None:
        generate_boards = holdem_functions.generate_exhaustive_boards
    else:
        generate_boards = holdem_functions.generate_random_boards
    # Run simulations
    for remaining_board in generate_boards(deck, num_iterations, board_length):
        # Generate a new board
        if given_board:
            board = given_board[:]
            board.extend(remaining_board)
        else:
            board = remaining_board
        # Find the best possible poker hand given the created board and the
        # hole cards and save them in the results data structures
        (suit_histogram, histogram,
         max_suit) = holdem_functions.preprocess_board(board)
        for index, hole_card in enumerate(hole_cards):
            result_list[index] = holdem_functions.detect_hand(
                hole_card, board, suit_histogram, histogram, max_suit)
        # Find the winner of the hand and tabulate results
        winner_index = holdem_functions.compare_hands(result_list)
        winner_list[winner_index] += 1
        # Increment what hand each player made
        for index, result in enumerate(result_list):
            result_histograms[index][result[0]] += 1

    float_iterations = float(sum(winner_list))
    pro_result = [None] * 10
    for index, elem in enumerate(result_histograms[0]):
        pro_result[index] = float(elem) / float_iterations

    return pro_result
def calc(hold_card, board_card=None):

    # generate parameter
    hole_cards = holdem_argparser.parse_hole_cards(hold_card)
    given_board = holdem_argparser.parse_cards(board_card)

    if given_board:
        all_cards = list(hole_cards)
        all_cards.append(given_board)
        deck = holdem_functions.generate_deck(all_cards)
    else:
        deck = holdem_functions.generate_deck(hole_cards)

    num_iterations = 10000
    exact = False

    # copy from holem_calc.py main fuction
    num_players = 1
    # Create results data structures which tracks results of comparisons
    # 1) result_histograms: a list for each player that shows the number of
    #    times each type of poker hand (e.g. flush, straight) was gotten
    # 2) winner_list: number of times each player wins the given round
    # 3) result_list: list of the best possible poker hand for each pair of
    #    hole cards for a given board
    result_list, winner_list = [None] * num_players, [0] * (num_players + 1)
    result_histograms = []
    for player in xrange(num_players):
        result_histograms.append([0] * 10)
    # Choose whether we're running a Monte Carlo or exhaustive simulation
    board_length = 0 if given_board == None else len(given_board)
    # When a board is given, exact calculation is much faster than Monte Carlo
    # simulation, so default to exact if a board is given
    if exact or given_board is not None:
        generate_boards = holdem_functions.generate_exhaustive_boards
    else:
        generate_boards = holdem_functions.generate_random_boards
    # Run simulations
    for remaining_board in generate_boards(deck, num_iterations, board_length):
        # Generate a new board
        if given_board:
            board = given_board[:]
            board.extend(remaining_board)
        else:
            board = remaining_board
        # Find the best possible poker hand given the created board and the
        # hole cards and save them in the results data structures
        (suit_histogram,
                histogram, max_suit) = holdem_functions.preprocess_board(board)
        for index, hole_card in enumerate(hole_cards):
            result_list[index] = holdem_functions.detect_hand(hole_card, board,
                                         suit_histogram, histogram, max_suit)
        # Find the winner of the hand and tabulate results
        winner_index = holdem_functions.compare_hands(result_list)
        winner_list[winner_index] += 1
        # Increment what hand each player made
        for index, result in enumerate(result_list):
            result_histograms[index][result[0]] += 1

    float_iterations = float(sum(winner_list))
    pro_result = [None]*10
    for index, elem in enumerate(result_histograms[0]):
        pro_result[index] = float(elem) / float_iterations

    return pro_result