Пример #1
0
def add_bet(state, total):
    # amount: 本局需要下的总注
    amount = total - state.player[state.currpos].totalbet
    assert (amount > state.player[state.currpos].bet)
    # Obey the rule of last_raised
    minamount = state.last_raised + state.minbet
    real_amount = max(amount, minamount)
    # money_needed = real_amount - state.player[state.currpos].bet
    decision = Decision()
    decision.raisebet = 1
    decision.amount = real_amount
    return decision
Пример #2
0
def ai(id, state):
    weight = [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
    remain_card = list(range(0, 52))
    cards = state.sharedcards + state.player[id].cards
    num = len(cards)
    for x in cards:
        remain_card.pop(remain_card.index(x))
    cnt = [0 for col in range(11)]
    # 模拟发牌1000次
    for i in range(1000):
        heap = remain_card[:]
        mycards = cards[:]
        random.shuffle(heap)
        while len(mycards) != 7:
            mycards.append(heap.pop())
        hand = Hand(mycards)
        level = hand.level
        cnt[level] += weight[level]

    # sum为评估值
    sum = 0
    for x in cnt:
        sum += x / 1000

    decision = Decision()
    totalbet = 0
    delta = state.minbet - state.player[state.currpos].bet
    if delta >= state.player[state.currpos].money:
        totalbet = 1000
    else:
        totalbet = state.player[state.currpos].totalbet + state.minbet

    if num == 2:
        # 两张牌
        if cards[0] != cards[1]:
            # 非对子
            if max(cards) <= 8 and 0 not in cards:
                # 最大不超过9:若跟注后超过100,放弃。否则跟注
                if totalbet <= 100:
                    decision.callbet = 1
                else:
                    decision.giveup = 1
            if max(cards) <= 11 and 0 not in cards:
                # 最大为10-Q:若跟注后超过150,放弃。否则跟注
                if totalbet <= 150:
                    decision.callbet = 1
                else:
                    decision.giveup = 1
            else:
                # 最大为K-A: 若跟注后超过200,放弃。否则跟注
                if totalbet <= 200:
                    decision.callbet = 1
                else:
                    decision.giveup = 1
        else:
            # 对子
            if max(cards) <= 11 and 0 not in cards:
                # 对子,不超过Q:跟注。若跟注后低于200,加注到200以上
                if totalbet < 200:
                    decision = add_bet(state, 200)
                else:
                    decision.callbet = 1
            else:
                # 双A、双K:跟注。若跟注后低于300,加注到300
                if totalbet < 300:
                    decision = add_bet(state, 300)
                else:
                    decision.callbet = 1

    elif num == 5:
        # 五张牌
        if sum < 4:
            # 直接放弃
            decision.giveup = 1
        elif sum >= 4 and sum < 10:
            # 若跟注后超过150,放弃。否则跟注
            # 若已下的注额大于200, 且本次需跟注额不大于50, 则跟注
            if totalbet < 150:
                decision.callbet = 1
            elif state.player[state.currpos].totalbet + state.player[
                    state.currpos].bet > 200 and delta < 50:
                decision.callbet = 1
            else:
                decision.giveup = 1
        elif sum >= 10 and sum < 20:
            # 跟注。若跟注后低于300,加注到300
            if totalbet < 300:
                decision = add_bet(state, 300)
            else:
                decision.callbet = 1
        elif sum >= 20 and sum < 50:
            # 跟注。若跟注后低于600,加注到600
            if totalbet < 600:
                decision = add_bet(state, 600)
            else:
                decision.callbet = 1
        else:
            # allin
            decision.allin = 1

    elif num == 6:
        # 六张牌
        if sum < 2:
            # 直接放弃
            decision.giveup = 1
        elif sum >= 2 and sum < 8:
            # 若跟注后超过300,放弃。否则跟注
            # 若已下的注额大于200, 且本次需跟注额不大于50, 则跟注
            if totalbet < 300:
                decision.callbet = 1
            elif state.player[state.currpos].totalbet + state.player[
                    state.currpos].bet > 200 and delta < 50:
                decision.callbet = 1
            else:
                decision.giveup = 1
        elif sum >= 8 and sum < 20:
            # 跟注。若跟注后低于300,加注到300
            if totalbet < 300:
                decision = add_bet(state, 300)
            else:
                decision.callbet = 1
        elif sum >= 20 and sum < 40:
            # 跟注。若跟注后低于600,加注到600
            if totalbet < 600:
                decision = add_bet(state, 600)
            else:
                decision.callbet = 1
        else:
            # allin
            decision.allin = 1

    elif num == 7:
        # 七张牌
        if level == 7:
            # allin
            decision.allin = 1
        elif level == 6:
            # 跟注,若跟注后低于600,加注到600
            if totalbet < 600:
                decision = add_bet(state, 600)
            else:
                decision.callbet = 1
        elif level == 5:
            # 跟注,若跟注后低于500,加注到500
            if totalbet < 500:
                decision = add_bet(state, 500)
            else:
                decision.callbet = 1
        elif level == 4:
            # 跟注,若跟注后低于400,加注到400
            if totalbet < 400:
                decision = add_bet(state, 400)
            else:
                decision.callbet = 1

        elif level == 3:
            # 若跟注后超过500,放弃。否则跟注。若跟注后低于300,加注到300
            # 若已下的注额大于200, 且本次需跟注额不大于50, 则跟注
            if totalbet < 300:
                decision = add_bet(state, 300)
            elif totalbet < 500:
                decision.callbet = 1
            elif state.player[state.currpos].totalbet + state.player[
                    state.currpos].bet > 200 and delta < 50:
                decision.callbet = 1
            else:
                decision.giveup = 1
        elif level == 2:
            if cards.count(0) == 2 or cards.count(12) == 2:
                # 双A双K 若跟注后超过200,放弃。否则跟注
                # 若已下的注额大于200, 且本次需跟注额不大于50, 则跟注
                if totalbet < 200:
                    decision.callbet = 1
                elif state.player[state.currpos].totalbet + state.player[
                        state.currpos].bet > 200 and delta < 50:
                    decision.callbet = 1
                else:
                    decision.giveup = 1
            else:
                # 不超过双Q 若跟注后超过200,放弃。否则跟注
                if totalbet > 200:
                    decision.giveup = 1
                else:
                    decision.callbet = 1
        elif level == 1:
            decision.giveup = 1
        else:
            print('the num of cards is {}'.format(num))
            assert (0)
    if decision.callbet == 1 and delta == state.player[state.currpos].money:
        decision.callbet = 0
        decision.allin = 1
    if decision.callbet == 1 and state.minbet == 0:
        t = random.randint(0, 2)
        if t == 0:
            decision.callbet = 0
            decision.raisebet = 1
            decision.amount = state.bigBlind
    return decision
Пример #3
0
def ai(id, state):
    weight = [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
    remain_card = list(range(0, 52))
    cards = state.sharedcards + state.player[id].cards
    num_cards = [i // 4 for i in cards]
    color_cards = [i % 4 for i in cards]
    num = len(cards)
    big_blind = 40
    alpha = 1
    # 波动系数 3人局并且求稳定 正常打法
    # 在需要修改时 提高alpha
    for x in cards:
        remain_card.pop(remain_card.index(x))
    cnt = [0 for col in range(11)]
    # 模拟发牌1000次
    for i in range(2000):
        heap = remain_card[:]
        mycards = cards[:]
        random.shuffle(heap)
        while len(mycards) != 7:
            mycards.append(heap.pop())
        hand = Hand(mycards)
        level = hand.level
        cnt[level] += weight[level]

    # sum为评估值
    sum = 0
    for x in cnt:
        sum += x / 2000

    ########################################
    ###################################
    def cards2newcards(cards):
        num_list = [2, 3, 4, 5, 6, 7, 8, 9, 'T', 'J', 'Q', 'K', 'A']
        #    name = ['spade', 'heart', 'diamond', 'club']
        color_list = ['S', 'H', 'D', 'C']
        new_cards = []
        for i in range(len(cards)):
            num = cards[i] // 4
            color = cards[i] % 4
            one_card = color_list[color] + str(num_list[num])
            new_cards.append(one_card)
        return new_cards

    hand_ = cards2newcards(state.player[id].cards)
    shared_ = cards2newcards(state.sharedcards)
    hole_card = gen_cards(hand_)
    community_card = gen_cards(shared_)
    estimate = estimate_hole_card_win_rate(nb_simulation=5000,
                                           nb_player=3,
                                           hole_card=hole_card,
                                           community_card=community_card)

    decision = Decision()
    totalbet = 0
    delta = state.minbet - state.player[state.currpos].bet

    if delta >= state.player[state.currpos].money:
        totalbet = 2000
    else:
        totalbet = state.player[state.currpos].totalbet + state.minbet

    def decide_1(decision, state, totalbet):
        upper_bet = 8 * big_blind * alpha
        if totalbet < upper_bet:
            decision = add_bet(state, upper_bet)
        elif totalbet < 1.5 * upper_bet:
            decision = add_bet(state, 3 * upper_bet)
        else:
            decision.allin = 1
        return decision

    def decide_2(decision, state, totalbet):
        upper_bet = 8 * big_blind * alpha
        if totalbet < upper_bet:
            decision = add_bet(state, upper_bet)
        elif totalbet < 1.5 * upper_bet:
            decision = add_bet(state, 3 * upper_bet)
        else:
            decision.callbet = 1
        return decision

    def decide_3(decision, state, totalbet):
        upper_bet = 4 * big_blind * alpha
        if totalbet < upper_bet:  #4倍Big Blind
            decision = add_bet(state, upper_bet)
        elif totalbet < 200 * upper_bet:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_4(decision, state, totalbet):
        upper_bet = 2 * big_blind * alpha
        if totalbet < upper_bet:  #2倍Big Blind
            decision = add_bet(state, upper_bet)
        elif totalbet < 100 * upper_bet:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_5(decision, state, totalbet):
        if delta <= 40:  #加一倍大盲注以内
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_6(decision, state, totalbet):
        if delta <= 20:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_7(decision, state, totalbet):
        if delta == 0:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

#################################
### 5 cards

    def decide_5_1(decision, state, totalbet):
        upper_bet = 7 * big_blind * alpha
        if totalbet < upper_bet:
            decision = add_bet(state, upper_bet)
        elif totalbet < 3 * upper_bet:
            decision = add_bet(state, 6 * upper_bet)
        else:
            decision.callbet = 1

        return decision

    def decide_5_2(decision, state, totalbet):
        #小于280 加到280
        #大于280 小于420 加到840
        #大于420 callbet
        upper_bet = 7 * big_blind * alpha
        if totalbet < upper_bet:
            decision = add_bet(state, upper_bet)
        elif totalbet < 1.5 * upper_bet:
            decision = add_bet(state, 3 * upper_bet)
        else:
            decision.callbet = 1
        return decision

    def decide_5_3(decision, state, totalbet):
        # 小于10倍大盲 加到10倍
        # delta<20倍时 跟注
        upper_bet = 10 * big_blind * alpha
        if totalbet < upper_bet:  #4倍Big Blind
            decision = add_bet(state, upper_bet)
        elif delta < 30 * upper_bet:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_5_4(decision, state, totalbet):
        upper_bet = 3 * big_blind * alpha
        if totalbet < upper_bet:  #2倍Big Blind
            decision = add_bet(state, upper_bet)
        elif totalbet < 10 * upper_bet:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_5_5(decision, state, totalbet):
        if delta <= 80:  #加一倍大盲注以内
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_5_6(decision, state, totalbet):
        if delta <= 40:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_5_7(decision, state, totalbet):
        if delta == 0:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

#################################
# 6cards
#################################

    def decide_6_1(decision, state, totalbet):
        upper_bet = 7 * big_blind * alpha
        if totalbet < upper_bet:
            decision = add_bet(state, upper_bet)
        elif totalbet < 3 * upper_bet:
            decision = add_bet(state, 6 * upper_bet)
        else:
            decision.callbet = 1

        return decision

    def decide_6_2(decision, state, totalbet):
        #小于280 加到280
        #大于280 小于420 加到840
        #大于420 callbet
        upper_bet = 7 * big_blind * alpha
        if totalbet < upper_bet:
            decision = add_bet(state, upper_bet)
        elif totalbet < 8 * upper_bet:
            decision = add_bet(state, 3 * upper_bet)
        else:
            decision.callbet = 1
        return decision

    def decide_6_3(decision, state, totalbet):
        # 小于10倍大盲 加到10倍
        # delta<20倍时 跟注
        upper_bet = 10 * big_blind * alpha
        if totalbet < upper_bet:  #4倍Big Blind
            decision = add_bet(state, upper_bet)
        elif delta < 30 * upper_bet:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_6_4(decision, state, totalbet):
        upper_bet = 3 * big_blind * alpha
        if totalbet < upper_bet:  #2倍Big Blind
            decision = add_bet(state, upper_bet)
        elif totalbet < 3 * upper_bet:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_6_5(decision, state, totalbet):
        if delta <= 80:  #加一倍大盲注以内
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_6_6(decision, state, totalbet):
        if delta <= 40:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_6_7(decision, state, totalbet):
        if delta == 0:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

##############################
########7cards

    def decide_7_1(decision, state, totalbet):
        # 小于2000加到2000
        # 否则callbet
        upper_bet = 2000 * alpha
        if totalbet < upper_bet:
            decision = add_bet(state, upper_bet)
        else:
            decision.callbet = 1
        return decision

    def decide_7_2(decision, state, totalbet):
        # 小于800加到800
        # 小于1500callbet
        # 大于1500 givep
        upper_bet = 2000 * alpha
        if totalbet < upper_bet:
            decision = add_bet(state, upper_bet)
        else:
            decision.callbet = 1
        return decision

    def decide_7_3(decision, state, totalbet):
        upper_bet = 2000 * alpha
        if totalbet < upper_bet:
            decision = add_bet(state, upper_bet)
        elif delta < 2500 * alpha:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_7_4(decision, state, totalbet):
        upper_bet = 1000 * alpha
        if totalbet < upper_bet:
            decision = add_bet(state, upper_bet)
        elif delta < 2500 * alpha:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_7_5(decision, state, totalbet):
        upper_bet = 160 * alpha
        if totalbet < upper_bet:
            decision = add_bet(state, upper_bet)
        elif delta < 200 * alpha:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_7_6(decision, state, totalbet):
        upper_bet = 80 * alpha
        if totalbet < upper_bet:
            decision = add_bet(state, upper_bet)
        elif delta < 80 * alpha:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_7_7(decision, state, totalbet):
        if delta < 40 * alpha:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    if num == 2:
        decision.allin = 1

    elif num == 5:
        alpha = 0.3
        # 五张牌
        if estimate >= 0.74:
            decision = decide_5_1(decision, state, totalbet)

        elif estimate < 0.74 and estimate >= 0.55 + 0.05:
            decision = decide_5_1(decision, state, totalbet)

        elif estimate < 0.55 + 0.05 and estimate >= 0.39 + 0.03:
            decision = decide_5_2(decision, state, totalbet)

        elif estimate < 0.39 + 0.03 and estimate >= 0.34 + 0.03:
            decision = decide_5_2(decision, state, totalbet)

        elif estimate < 0.34 + 0.03 and estimate >= 0.25 + 0.05:
            decision = decide_5_3(decision, state, totalbet)
        elif estimate < 0.25 + 0.05 and estimate >= 0.18:
            decision = decide_5_4(decision, state, totalbet)
        else:
            decision = decide_5_5(decision, state, totalbet)

    elif num == 6:
        # 六张牌

        if estimate >= 0.78:

            decision = decide_6_1(decision, state, totalbet)

        elif estimate < 0.78 and estimate >= 0.56 + 0.05:
            decision = decide_6_1(decision, state, totalbet)

        elif estimate < 0.56 + 0.05 and estimate >= 0.41 + 0.05:
            decision = decide_6_2(decision, state, totalbet)

        elif estimate < 0.41 + 0.05 and estimate >= 0.29 + 0.04:
            decision = decide_6_2(decision, state, totalbet)

        elif estimate < 0.29 + 0.04 and estimate >= 0.24 + 0.04:
            decision = decide_6_3(decision, state, totalbet)
        elif estimate < 0.24 + 0.04 and estimate >= 0.115:
            decision = decide_6_3(decision, state, totalbet)
        else:
            decision = decide_6_7(decision, state, totalbet)

    elif num == 7:
        # 七张牌
        if estimate >= 0.95:
            # allin
            decision.allin = 1
        elif estimate < 0.9 and estimate >= 0.95:
            decision = decide_7_1(decision, state, totalbet)

        elif estimate < 0.75 and estimate >= 0.9:
            decision = decide_7_1(decision, state, totalbet)

        elif estimate > 0.6 and estimate <= 0.75:
            decision = decide_7_2(decision, state, totalbet)

        elif estimate > 0.35 and estimate <= 0.6:
            decision = decide_7_2(decision, state, totalbet)

        elif estimate > 0.333 and estimate <= 0.35:
            decision = decide_7_3(decision, state, totalbet)
        elif estimate > 0.3 and estimate <= 0.333:
            decision = decide_7_4(decision, state, totalbet)
        else:
            decision = decide_7_6(decision, state, totalbet)

#        else:
#            print('the num of cards is {}'.format(num))
#            assert(0)
    if state.player[state.currpos].money <= 300:
        decision.callbet = 0
        decision.raisebet = 0
        decision.allin = 1
    if decision.callbet == 1 and delta == state.player[state.currpos].money:
        decision.callbet = 0
        decision.allin = 1
    if decision.callbet == 1 and state.minbet == 0:
        t = random.randint(0, 2)
        if t == 0:
            decision.callbet = 0
            decision.raisebet = 1
            decision.amount = state.bigBlind
    return decision
Пример #4
0
def ai(id, state):
    weight = [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
    remain_card = list(range(0, 52))
    cards = state.sharedcards + state.player[id].cards
    num_cards = [i // 4 for i in cards]
    color_cards = [i % 4 for i in cards]
    num = len(cards)
    big_blind = 40
    alpha = 1
    # 波动系数 3人局并且求稳定 正常打法
    # 在需要修改时 提高alpha
    for x in cards:
        remain_card.pop(remain_card.index(x))
    cnt = [0 for col in range(11)]
    # 模拟发牌1000次
    for i in range(2000):
        heap = remain_card[:]
        mycards = cards[:]
        random.shuffle(heap)
        while len(mycards) != 7:
            mycards.append(heap.pop())
        hand = Hand(mycards)
        level = hand.level
        cnt[level] += weight[level]

    # sum为评估值
    sum = 0
    for x in cnt:
        sum += x / 2000

    decision = Decision()
    totalbet = 0
    delta = state.minbet - state.player[state.currpos].bet
    if delta >= state.player[state.currpos].money:
        totalbet = 2000
    else:
        totalbet = state.player[state.currpos].totalbet + state.minbet

    def decide_1(decision, state, totalbet, upper_bet):
        if totalbet < upper_bet:
            decision = add_bet(state, upper_bet)
        elif totalbet < 1.5 * upper_bet:
            decision = add_bet(state, 3 * upper_bet)
        else:
            decision.allin = 1
        return decision

    def decide_2(decision, state, totalbet, upper_bet):
        if totalbet < upper_bet:
            decision = add_bet(state, upper_bet)
        elif totalbet < 1.5 * upper_bet:
            decision = add_bet(state, 3 * upper_bet)
        else:
            decision.callbet = 1
        return decision

    def decide_3(decision, state, totalbet, upper_bet):
        if totalbet < upper_bet:  #4倍Big Blind
            decision = add_bet(state, upper_bet)
        elif totalbet < 3 * upper_bet:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision
#    def decide_4(decision, state, totalbet, upper_bet):
#        if totalbet < upper_bet:#2倍Big Blind
#            decision = add_bet(state, upper_bet)
#        elif totalbet < 2.5*upper_bet:
#            decision.callbet = 1
#        else:
#            decision.giveup = 1
#        return decision

    def decide_4(decision, state, totalbet, upper_bet):
        if delta <= 40:  #加一倍大盲注以内
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_5(decision, state, totalbet, upper_bet):
        if delta <= 20:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    def decide_6(decision, state, totalbet, upper_bet):
        if delta == 0:
            decision.callbet = 1
        else:
            decision.giveup = 1
        return decision

    if num == 2:
        if num_cards[0] == num_cards[1]:
            # 对子
            if max(num_cards) >= 10:
                # QQ KK AA 一等牌力
                upper_bet = 8 * big_blind * alpha
                decision = decide_1(decision, state, totalbet, upper_bet)

            if max(num_cards) >= 8 and max(num_cards) <= 9:
                # TT JJ 二等牌力
                upper_bet = 8 * big_blind * alpha
                decision = decide_2(decision, state, totalbet, upper_bet)

            if max(num_cards) >= 6 and max(num_cards) <= 7:
                #  88 99 三等牌力
                upper_bet = 4 * big_blind * alpha
                decision = decide_3(decision, state, totalbet, upper_bet)
            else:
                # 77以下对子 四等牌力
                upper_bet = 2 * big_blind * alpha
                decision = decide_3(decision, state, totalbet, upper_bet)
        else:
            #非对子
            if color_cards[0] != color_cards[1]:
                # 非同花
                if num_cards in [[12, 11], [11, 12]]:
                    upper_bet = 8 * big_blind * alpha
                    decision = decide_1(decision, state, totalbet, upper_bet)
                elif num_cards in [[12, 10], [10, 12], [11, 10], [10, 11]]:
                    upper_bet = 8 * big_blind * alpha
                    decision = decide_2(decision, state, totalbet, upper_bet)
                elif num_cards in [[12, 9], [11, 9], [10, 9], [9, 10], [9, 11],
                                   [9, 12]]:
                    upper_bet = 4 * big_blind * alpha
                    decision = decide_3(decision, state, totalbet, upper_bet)
                elif num_cards in [[12, 8], [12, 7], [12, 6], [12, 5], [12, 4],
                                   [12, 3], [11, 8], [10, 8], [9, 8], [8, 9],
                                   [8, 10], [8, 11], [3, 12], [4, 12], [5, 12],
                                   [6, 12], [7, 12], [8, 12]]:
                    upper_bet = 2 * big_blind * alpha
                    decision = decide_4(decision, state, totalbet, upper_bet)
                elif num_cards in [[12, 2], [12, 1], [12, 0], [0, 12], [1, 12],
                                   [2, 12], [11, 7], [10, 7], [9, 7], [8, 7],
                                   [7, 8], [7, 9], [7, 10], [7, 11], [6, 9],
                                   [9, 6], [8, 6], [7, 6], [6, 7], [6, 8],
                                   [5, 7], [7, 5], [5, 6], [6, 5], [4, 6],
                                   [4, 5], [5, 4], [6, 4], [3, 4], [4, 3]]:
                    upper_bet = big_blind * alpha
                    decision = decide_5(decision, state, totalbet, upper_bet)
                else:
                    upper_bet = big_blind * alpha
                    decision = decide_6(decision, state, totalbet, upper_bet)
            else:
                # 同花
                if num_cards in [[12, 11], [11, 12]]:
                    upper_bet = 8 * big_blind * alpha
                    decision = decide_1(decision, state, totalbet, upper_bet)
                elif num_cards in [[12, 10], [10, 12], [11, 10], [10, 11],
                                   [12, 9], [9, 12]]:
                    upper_bet = 8 * big_blind * alpha
                    decision = decide_2(decision, state, totalbet, upper_bet)
                elif num_cards in [[12, 8], [12, 7], [12, 6], [12, 5], [12, 4],
                                   [12, 3], [11, 9], [10, 9], [9, 10], [9, 11],
                                   [3, 12], [4, 12], [5, 12], [6, 12], [7, 12],
                                   [8, 12], [11, 8], [8, 11]]:
                    upper_bet = 4 * big_blind * alpha
                    decision = decide_3(decision, state, totalbet, upper_bet)
                elif num_cards in [[10, 8], [9, 8], [8, 9], [8, 10], [11, 7],
                                   [10, 7], [9, 7], [8, 7], [7, 8], [7, 9],
                                   [7, 10], [7, 11], [6, 9], [9, 6], [8, 6],
                                   [7, 6], [6, 7], [6, 8], [5, 7], [7, 5],
                                   [5, 6], [6, 5], [4, 6], [4, 5], [5, 4],
                                   [6, 4], [3, 4], [4, 3]]:
                    upper_bet = 2 * big_blind * alpha
                    decision = decide_4(decision, state, totalbet, upper_bet)
                elif num_cards in [[11, 6], [10, 6], [9, 6], [8, 5], [7, 5],
                                   [7, 4], [6, 4], [5, 3], [4, 2], [3, 2],
                                   [2, 1], [1, 2], [2, 3], [2, 4], [3, 5],
                                   [4, 6], [4, 7], [5, 7], [5, 8], [6, 9],
                                   [6, 10], [6, 11]]:
                    upper_bet = big_blind * alpha
                    decision = decide_5(decision, state, totalbet, upper_bet)
                else:
                    upper_bet = big_blind * alpha
                    decision = decide_6(decision, state, totalbet, upper_bet)

    elif num == 5:
        # 五张牌
        if sum < 4:
            # 直接放弃
            decision.giveup = 1
        elif sum >= 4 and sum < 10:
            # 若跟注后超过150,放弃。否则跟注
            # 若已下的注额大于200, 且本次需跟注额不大于50, 则跟注
            if totalbet < 300:
                decision.callbet = 1
            elif state.player[state.currpos].totalbet + state.player[
                    state.currpos].bet > 200 and delta < 50:
                decision.callbet = 1
            else:
                decision.giveup = 1
        elif sum >= 10 and sum < 20:
            # 跟注。若跟注后低于300,加注到300
            if totalbet < 600:
                decision = add_bet(state, 600)
            else:
                decision.callbet = 1
        elif sum >= 20 and sum < 50:
            # 跟注。若跟注后低于600,加注到600
            if totalbet < 1200:
                decision = add_bet(state, 1200)
            else:
                decision.callbet = 1
        else:
            # allin
            decision.allin = 1

    elif num == 6:
        # 六张牌
        if sum < 2:
            # 直接放弃
            decision.giveup = 1
        elif sum >= 2 and sum < 8:
            # 若跟注后超过300,放弃。否则跟注
            # 若已下的注额大于200, 且本次需跟注额不大于50, 则跟注
            if totalbet < 600:
                decision.callbet = 1
            elif state.player[state.currpos].totalbet + state.player[
                    state.currpos].bet > 200 and delta < 50:
                decision.callbet = 1
            else:
                decision.giveup = 1
        elif sum >= 8 and sum < 20:
            # 跟注。若跟注后低于300,加注到300
            if totalbet < 600:
                decision = add_bet(state, 300)
            else:
                decision.callbet = 1
        elif sum >= 20 and sum < 40:
            # 跟注。若跟注后低于600,加注到600
            if totalbet < 1200:
                decision = add_bet(state, 1200)
            else:
                decision.callbet = 1
        else:
            # allin
            decision.allin = 1

    elif num == 7:
        # 七张牌
        if level == 7:
            # allin
            decision.allin = 1
        elif level == 6:
            # 跟注,若跟注后低于600,加注到600
            if totalbet < 1200:
                decision = add_bet(state, 1200)
            else:
                decision.callbet = 1
        elif level == 5:
            # 跟注,若跟注后低于500,加注到500
            if totalbet < 1000:
                decision = add_bet(state, 1000)
            else:
                decision.callbet = 1
        elif level == 4:
            # 跟注,若跟注后低于400,加注到400
            if totalbet < 800:
                decision = add_bet(state, 800)
            else:
                decision.callbet = 1

        elif level == 3:
            # 若跟注后超过500,放弃。否则跟注。若跟注后低于300,加注到300
            # 若已下的注额大于200, 且本次需跟注额不大于50, 则跟注
            if totalbet < 600:
                decision = add_bet(state, 600)
            elif totalbet < 1000:
                decision.callbet = 1
            elif state.player[state.currpos].totalbet + state.player[
                    state.currpos].bet > 200 and delta < 50:
                decision.callbet = 1
            else:
                decision.giveup = 1
        elif level == 2:
            if cards.count(0) == 2 or cards.count(12) == 2:
                # 双A双K 若跟注后超过200,放弃。否则跟注
                # 若已下的注额大于200, 且本次需跟注额不大于50, 则跟注
                if totalbet < 400:
                    decision.callbet = 1
                elif state.player[state.currpos].totalbet + state.player[
                        state.currpos].bet > 200 and delta < 50:
                    decision.callbet = 1
                else:
                    decision.giveup = 1
            else:
                # 不超过双Q 若跟注后超过200,放弃。否则跟注
                if totalbet > 400:
                    decision.giveup = 1
                else:
                    decision.callbet = 1
        elif level == 1:
            decision.giveup = 1
        else:
            print('the num of cards is {}'.format(num))
            assert (0)

    if decision.callbet == 1 and delta == state.player[state.currpos].money:
        decision.callbet = 0
        decision.allin = 1
    if decision.callbet == 1 and state.minbet == 0:
        t = random.randint(0, 2)
        if t == 0:
            decision.callbet = 0
            decision.raisebet = 1
            decision.amount = state.bigBlind
    return decision