コード例 #1
0
def create_df_preflop_hand_distrib(save=False):
    """returns df containing the hand rank distribution for all combinations of preflop hands"""
    global df_preflop_hand_distrib

    print "\n--------------- start create_df_preflop_hand_distrib"
    print 'all preflop hands = \nstart = {}\nend = {}\nnb of elements = {}'.format(
        all_preflop_hands[:10], all_preflop_hands[-10:],
        len(all_preflop_hands))

    print "\nhand rank distribution for all preflop hands"
    t0 = timer()
    preflop_hand_rank_distrib = np.zeros([1 + len(all_preflop_hands), 7462],
                                         dtype=np.int32)

    sys.stdout.write('\rk=%3d / %3d' % (1, 1 + len(all_preflop_hands)))
    sys.stdout.flush()
    N = C(52, 7)
    h1_array_all_seven_cards = create_array_all_seven_fast()
    h1_rank7 = EvalSeven.get_seven_rank_fast(
        h1_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY,
        keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT,
        EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit)
    preflop_hand_rank_distrib[0, :] = np.bincount(h1_rank7)

    for k, hand in enumerate(all_preflop_hands):
        sys.stdout.write('\rk = %3d / %3d' %
                         (2 + k, 1 + len(all_preflop_hands)))
        sys.stdout.flush()
        hand_no = hand_str_to_no(hand)
        N = C(52 - 2, 5)
        array_five_cards = all_n_cards_given_m_cards_fast(5, hand_no, N)
        h1_cards = np.ones([N, 2], dtype=np.int32) * hand_no
        h1_array_all_seven_cards = np.concatenate((h1_cards, array_five_cards),
                                                  axis=1)
        h1_array_all_seven_cards = np.array(h1_array_all_seven_cards,
                                            dtype=np.int32)
        h1_rank7 = EvalSeven.get_seven_rank_fast(
            h1_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY,
            keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT,
            EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit)
        preflop_hand_rank_distrib[1 + k, :] = np.bincount(h1_rank7)

    df = pd.DataFrame(data=preflop_hand_rank_distrib.T,
                      columns=['NoHand'] + all_preflop_hands,
                      index=np.arange(7462))
    t1 = timer()
    print '\ndf_preflop_hand_distrib time = {:8.4f} s'.format(t1 - t0)
    if (save):
        df.to_pickle(os.path.join('Tables', 'df_preflop_hand_distrib.pd'))
        print '{} saved to disk as {}'.format(
            'df_preflop_hand_distrib',
            os.path.join('Tables', 'df_preflop_hand_distrib.pd'))
        df.to_csv(os.path.join('Tables', 'df_preflop_hand_distrib.csv'),
                  index=False)
        print '{} saved to disk as {}'.format(
            'df_preflop_hand_distrib',
            os.path.join('Tables', 'df_preflop_hand_distrib.csv'))

    print "--------------- end create_df_preflop_hand_distrib"
    return df
コード例 #2
0
ファイル: EvalAnalysis.py プロジェクト: oscar6echo/Poker2
def create_df_preflop_hand_distrib(save=False):
	"""returns df containing the hand rank distribution for all combinations of preflop hands"""
	global df_preflop_hand_distrib

	print "\n--------------- start create_df_preflop_hand_distrib"
	print 'all preflop hands = \nstart = {}\nend = {}\nnb of elements = {}'.format(all_preflop_hands[:10], all_preflop_hands[-10:], len(all_preflop_hands))

	print "\nhand rank distribution for all preflop hands"
	t0 = timer()
	preflop_hand_rank_distrib = np.zeros([1+len(all_preflop_hands), 7462], dtype=np.int32)

	sys.stdout.write('\rk=%3d / %3d' % (1, 1+len(all_preflop_hands)))
	sys.stdout.flush()
	N = C(52, 7)
	h1_array_all_seven_cards = create_array_all_seven_fast()
	h1_rank7 = EvalSeven.get_seven_rank_fast(h1_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY, keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit)
	preflop_hand_rank_distrib[0, :] = np.bincount(h1_rank7)

	for k, hand in enumerate(all_preflop_hands):
		sys.stdout.write('\rk = %3d / %3d' % (2+k, 1+len(all_preflop_hands)))
		sys.stdout.flush()
		hand_no = hand_str_to_no(hand)
		N = C(52-2, 5)
		array_five_cards = all_n_cards_given_m_cards_fast(5, hand_no, N)
		h1_cards = np.ones([N, 2], dtype=np.int32)*hand_no
		h1_array_all_seven_cards = np.concatenate((h1_cards, array_five_cards), axis=1)
		h1_array_all_seven_cards = np.array(h1_array_all_seven_cards, dtype=np.int32)
		h1_rank7 = EvalSeven.get_seven_rank_fast(h1_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY, keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit)
		preflop_hand_rank_distrib[1+k, :] = np.bincount(h1_rank7)

	df = pd.DataFrame(data=preflop_hand_rank_distrib.T, columns=['NoHand']+all_preflop_hands, index=np.arange(7462))
	t1 = timer()
	print '\ndf_preflop_hand_distrib time = {:8.4f} s'.format(t1-t0)
	if (save):
		df.to_pickle(os.path.join('Tables', 'df_preflop_hand_distrib.pd'))
		print '{} saved to disk as {}'.format('df_preflop_hand_distrib', os.path.join('Tables', 'df_preflop_hand_distrib.pd'))
		df.to_csv(os.path.join('Tables', 'df_preflop_hand_distrib.csv'), index=False)
		print '{} saved to disk as {}'.format('df_preflop_hand_distrib', os.path.join('Tables', 'df_preflop_hand_distrib.csv'))

	print "--------------- end create_df_preflop_hand_distrib"
	return df
コード例 #3
0
ファイル: EvalAnalysis.py プロジェクト: UrbanDiver/Poker2
			card, freq = card_combin(idx, h1f1, h1f2, h2f1, h2f2)
	return [card, freq]



def preflop_two_hand_equity((h1, h2), verbose=False):
	"""returns [h1 nb win, nb ties, h2 nb wins] for all suit combinations for 2 preflop hands h1, h2 input as 'Q6o', '52o'"""
	if (verbose):
		print 'preflop hands : {}'.format((h1, h2))
		t0 = timer()
	two_hand_no, freq = two_hand_to_no(h1, h2)
	equity = np.zeros([two_hand_no.shape[0], 4], dtype=np.int32)
	for k, p in enumerate(two_hand_no):

		N = C(52-4, 5)
		array_five_cards = all_n_cards_given_m_cards_fast(5, p, N)

		h1_cards = np.ones([N, 2], dtype=np.int32)*[p[0], p[1]]
		h1_array_all_seven_cards = np.concatenate((h1_cards, array_five_cards), axis=1)
		h1_rank7 = EvalSeven.get_seven_rank_fast(h1_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY, keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit)
		h2_cards = np.ones([N, 2], dtype=np.int32)*[p[2], p[3]]
		h2_array_all_seven_cards = np.concatenate((h2_cards, array_five_cards), axis=1)
		h2_rank7 = EvalSeven.get_seven_rank_fast(h2_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY, keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit)
		diff_rank7 = h1_rank7-h2_rank7
		h1_win, tie, h2_win = (diff_rank7>0).sum(), (diff_rank7==0).sum(), (diff_rank7<0).sum()
		equity[k, :] = np.array([h1_win, tie, h2_win, freq[k]])
		if (verbose):
			print 'suit combination #{}'.format(k)
			print '\t', two_hand_no_to_char(p)
			print '\tfrequency = {}'.format(freq[k])
			print '\t{}\t{}\t{}'.format('h1#wins', '#ties', 'h2#wins')
コード例 #4
0
            idx = 8
            card, freq = card_combin(idx, h1f1, h1f2, h2f1, h2f2)
    return [card, freq]


def preflop_two_hand_equity((h1, h2), verbose=False):
    """returns [h1 nb win, nb ties, h2 nb wins] for all suit combinations for 2 preflop hands h1, h2 input as 'Q6o', '52o'"""
    if (verbose):
        print 'preflop hands : {}'.format((h1, h2))
        t0 = timer()
    two_hand_no, freq = two_hand_to_no(h1, h2)
    equity = np.zeros([two_hand_no.shape[0], 4], dtype=np.int32)
    for k, p in enumerate(two_hand_no):

        N = C(52 - 4, 5)
        array_five_cards = all_n_cards_given_m_cards_fast(5, p, N)

        h1_cards = np.ones([N, 2], dtype=np.int32) * [p[0], p[1]]
        h1_array_all_seven_cards = np.concatenate((h1_cards, array_five_cards),
                                                  axis=1)
        h1_rank7 = EvalSeven.get_seven_rank_fast(
            h1_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY,
            keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT,
            EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit)
        h2_cards = np.ones([N, 2], dtype=np.int32) * [p[2], p[3]]
        h2_array_all_seven_cards = np.concatenate((h2_cards, array_five_cards),
                                                  axis=1)
        h2_rank7 = EvalSeven.get_seven_rank_fast(
            h2_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY,
            keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT,
            EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit)