欢迎光临散文网 会员登陆 & 注册

但凡早发一天,米哈游都得V我50

2023-05-04 12:08 作者:Lin呆唯  | 我要投稿

问题:

求160抽获得至少5金且至少3UP的概率

先上结论

160抽获得至少5金的概率: 0.007479885414129266, 即: 0.748%

160抽获得至少5金且至少3UP的概率: 0.006665135461820355, 即: 0.6665%


以下是python代码

'''

问题:

160抽获得至少5金且至少3UP的概率P

思路:

P0 = 160抽5金的概率

P1 = 5金中至少有3个UP的概率

P2 = 160抽至少6金的概率 此时必然至少有3UP

P = P0 * P1 + P2


利用概率矩阵递推的方法

先计算P0, P2

再计算P1

'''

import numpy as np


# 计算连续n抽未出金时,下一抽出金的概率

# 第74抽就是连续73抽未出金,n=73

# 第90抽就是连续89抽未出金,n=89

def getP(n):

    if n < 73:

        return 0.006

    else:

        p = 0.006 + (n - 72) * 0.06

        p = 1 if p > 1 else p

        return p


'''

计算P0和P2

P0 = 160抽5金的概率

P2 = 160抽至少6金的概率

'''

# 3维概率矩阵,每个维度为a,b,c,表示在当前情况下的概率

# a为已经抽取次数

# b为连续未出金抽数

# c为已经出金个数(c==6时,表示金个数>=6,在计算的时候需要注意)

# 则 160抽5金的概率 P0 = sum(X[160, :, 5])

# 则 160抽6金及以上的概率 P1 = sum(X[160, :, 6:])

A = 160

B = 90

C = 5

X = np.zeros((A+1, B, C+2), dtype=float)


# 递推

X[0][0][0] = 1

for a in range(A):

    for b in range(B):

        if b > a:

            break

        for c in range(C+2):

            # 出金

            if c == C+1: # c==6时,表示金个数>=6,所以出金后c仍然为6

                X[a+1][0][c] += X[a][b][c] * getP(b)

            else:

                X[a+1][0][c+1] += X[a][b][c] * getP(b)

            # 没出

            if b < B - 1:

                X[a+1][b+1][c] += X[a][b][c] * (1 - getP(b))


# 160抽5金的概率

P0 = sum(X[160, :, 5])

# 160抽6金及以上的概率 此时必然至少有3UP

P2 = sum(sum(X[160, :, 6:]))


print(f"160抽出5金概率: {P0}, 即{P0*100:.4}%")

print(f"160抽出6金及以上概率: {P2}, 即{P2*100:.4}%")


'''

计算P1

P1 = 5金中至少有3个UP的概率

'''

# 3维概率矩阵,每个维度为c,d,e,表示在当前情况下的概率

# c为已经出金个数(c==6时,表示金个数>=6,在计算的时候需要注意)

# d为连续非UP个数

# e为已经出UP个数

D = 2

E = 3

X = np.zeros((C+1, D, E+1), dtype=float)


# 递推

X[0][0][0] = 1

for c in range(C):

    for d in range(D):

        if d > c:

            break

        for e in range(E+1):

            # UP概率

            p = 0.5 if d == 0 else 1

            # UP

            if e == E: # e==3时,表示UP个数>=3

                X[c+1][0][e] += X[c][d][e] * p

            else:

                X[c+1][0][e+1] += X[c][d][e] * p

            # 非UP

            if d == 0:

                X[c+1][d+1][e] += X[c][d][e] * 0.5


P1 = sum(X[5, :, 3])

print(f"5金且至少3UP的概率: {P1}, 即{P1*100:.4}%")


# 160抽获得至少5金且至少3UP的概率P

P = P0 * P1 + P2

print()

print(f"160抽获得至少5金的概率: {P0 + P2}, 即: {(P0 + P2)*100:.4}%")

print(f"160抽获得至少5金且至少3UP的概率: {P}, 即: {P*100:.4}%")





但凡早发一天,米哈游都得V我50的评论 (共 条)

分享到微博请遵守国家法律