但凡早發(fā)一天,米哈游都得V我50

問題:
求160抽獲得至少5金且至少3UP的概率
先上結(jié)論
160抽獲得至少5金的概率: 0.007479885414129266, 即: 0.748%
160抽獲得至少5金且至少3UP的概率: 0.006665135461820355, 即: 0.6665%

以下是python代碼
'''
問題:
160抽獲得至少5金且至少3UP的概率P
思路:
P0 = 160抽5金的概率
P1 = 5金中至少有3個(gè)UP的概率
P2 = 160抽至少6金的概率 此時(shí)必然至少有3UP
P = P0 * P1 + P2
利用概率矩陣遞推的方法
先計(jì)算P0, P2
再計(jì)算P1
'''
import numpy as np
# 計(jì)算連續(xù)n抽未出金時(shí),下一抽出金的概率
# 第74抽就是連續(xù)73抽未出金,n=73
# 第90抽就是連續(xù)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
'''
計(jì)算P0和P2
P0 = 160抽5金的概率
P2 = 160抽至少6金的概率
'''
# 3維概率矩陣,每個(gè)維度為a,b,c,表示在當(dāng)前情況下的概率
# a為已經(jīng)抽取次數(shù)
# b為連續(xù)未出金抽數(shù)
# c為已經(jīng)出金個(gè)數(shù)(c==6時(shí),表示金個(gè)數(shù)>=6,在計(jì)算的時(shí)候需要注意)
# 則 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時(shí),表示金個(gè)數(shù)>=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金及以上的概率 此時(shí)必然至少有3UP
P2 = sum(sum(X[160, :, 6:]))
print(f"160抽出5金概率: {P0}, 即{P0*100:.4}%")
print(f"160抽出6金及以上概率: {P2}, 即{P2*100:.4}%")
'''
計(jì)算P1
P1 = 5金中至少有3個(gè)UP的概率
'''
# 3維概率矩陣,每個(gè)維度為c,d,e,表示在當(dāng)前情況下的概率
# c為已經(jīng)出金個(gè)數(shù)(c==6時(shí),表示金個(gè)數(shù)>=6,在計(jì)算的時(shí)候需要注意)
# d為連續(xù)非UP個(gè)數(shù)
# e為已經(jīng)出UP個(gè)數(shù)
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時(shí),表示UP個(gè)數(shù)>=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}%")
