Python三国杀OL王荣技能吉占(基于概率策略下的最大牌数期望值求解)

问题简述:

吉占:摸牌阶段,你可以改为展示牌堆顶的一张牌,猜测牌堆顶的下一张牌点数大于或小于此牌,然后展示之,若猜对,你可重复此流程,然后你获得以此法展示的牌。

        牌库中存在3套牌,一套牌有52张(4X13),在此基础上添加2,Q两张,5一张作为牌库。随机取一张作为库顶,从剩余牌中取一张,比大小(只能比大小),正确则继续,错误则退出。求、按照某种特定的策略,计算能打开的最大牌数N(包含已经被打开的,也就是说N>=2)。

        

def simulate_game():
    import random
    paiku = [i + 1 for i in range(13)]
    paikuo = paiku
    # 生成3套牌库,共计3X4X13
    for i in range(0, 11):
        paiku += paikuo
    pk = paiku
    #2 and 12添加2张,5加1张
    pk = pk + [2, 2, 12, 12, 5]
    # 牌数n初始为2
    n = 2
    global de, dde
    # 初始化,准备一张顶牌
    top = pk[random.randint(0, len(pk) - 1)]
    pk.remove(top)
    while len(pk) >= 1:
        # 做决定,计算此时,下一张牌能猜对的概率
        # 牌是相同的概率为pe,下一张比这一张牌大的概率为pm,比这一张牌小的概率为pl
        pm = len([i for i in pk if i > top]) / len(pk)
        pl = len([i for i in pk if i < top]) / len(pk)
        if pm > pl:
            de = 1
        elif pm < pl:
            #print("猜小")
            de = 0
        else:
            de = random.randint(0,1)
        #由于只有大小,相等必为错,所以即使知道极端情况剩下的八张都是一样的,也会猜错,就随便猜。
        # 从剩余的卡牌中随机抽牌
        flip = pk[random.randint(0, len(pk)-1)]
        #更新牌库,去掉这一张
        pk.remove(flip)
        # 比大小
        # step1 定义客观大小
        if flip == top:
            dde = 2
        elif flip > top:
            dde = 1
        elif flip < top:
            dde = 0
        # step2 判断正确与否
        if de == dde:
            #判断正确,牌数+1
            n+=1
        else:
            break
        top = flip
    return n
s = 0
for j in range(1, 50000):
    s += simulate_game()
print(s/len(range(1, 50000)))

 仿真50000次后的期望为: 4.22062441248825

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值