这里写自定义目录标题
- 娃娃机的问题
- 问题1:概率计算(由上至下)
- 问题2:仿真(由下至上)
娃娃机的问题
某款娃娃机的设置如下:
- 吊到娃娃的概率 :任意一次吊到的概率为0.6%;
- 保底机制 :每90次抓取必定有一次可以吊到娃娃,即最多失败89次之后,必定在90次时可以吊到娃娃。
如果可以无限次玩这款娃娃机,问:
- 吊到娃娃的平均概率是多少?
- 请用Python程序仿真实现。
问题1:概率计算(由上至下)
- 分析
第1次吊到娃娃的概率(即条件概率):0.006;
第2次吊到娃娃的概率(即条件概率): 0.994 ( 第 1 次 未 吊 到 ) × 0.006 ( 第 2 次 吊 到 ) 0.994(第1次未吊到)\times 0.006(第2次吊到) 0.994(第1次未吊到)×0.006(第2次吊到)
第3次吊到娃娃的概率(即条件概率): 0.99 4 2 ( 第 1 和 第 2 次 都 未 吊 到 ) × 0.006 ( 第 3 次 吊 到 ) 0.994^2(第1和第2次都未吊到)\times 0.006(第3次吊到) 0.9942(第1和第2次都未吊到)×0.006(第3次吊到)
…
第89次吊到娃娃的概率(即条件概率): 0.99 4 88 ( 第 1 到 第 88 次 都 未 吊 到 ) × 0.006 ( 第 89 次 吊 到 ) 0.994^{88}(第1到第88次都未吊到)\times 0.006(第89次吊到) 0.99488(第1到第88次都未吊到)×0.006(第89次吊到)
第90次吊到娃娃的概率(即条件概率): 0.99 4 89 ( 第 1 到 第 89 次 都 未 吊 到 ) × 1 ( 第 90 次 吊 到 ) 0.994^{89}(第1到第89次都未吊到)\times 1(第90次吊到) 0.99489(第1到第89次都未吊到)×1(第90次吊到) - 计算
吊到娃娃的平均概率 P ˉ \bar{P} Pˉ= 每 次 吊 到 的 概 率 × 需 要 90 次 吊 到 娃 娃 概 率 每次吊到的概率\times需要90次吊到娃娃概率 每次吊到的概率×需要90次吊到娃娃概率
P ˉ = ( 1 + 0.994 + . . . + 0.99 4 88 ) × 0.006 + 0.99 4 89 × 1 1 + 0.994 + 0.99 4 2 + . . . + 0.99 4 89 \bar{P}=\frac{(1+0.994+...+0.994^{88})\times0.006+0.994^{89}\times1}{1+0.994+0.994^{2}+...+0.994^{89}} Pˉ=1+0.994+0.9942+...+0.99489(1+0.994+...+0.99488)×0.006+0.99489×1
= 1 − 0.99 4 89 1 − 0.994 × 0.006 + 0.99 4 89 × 1 1 − 0.99 4 90 1 − 0.994 = 0.006 1 − 0.99 4 90 = 0.0143 =\frac{\frac{1-0.994^{89}}{1-0.994}\times0.006+0.994^{89}\times1}{\frac{1-0.994^{90}}{1-0.994}}=\frac{0.006}{1-0.994^{90}}=0.0143 =1−0.9941−0.994901−0.9941−0.99489×0.006+0.99489×1=1−0.994900.006=0.0143
这也就是数学期望了。
问题2:仿真(由下至上)
import random
bonusNum = 600000 # 吊娃娃的仿真次数
starNum = 90 # 保底机制
probability = 6 # 任意一次吊到娃娃的概率,单位为(千分之,即乘以1000)
num = 0 # 吊到娃娃的次数
rate = 0 # 连续没有吊到娃娃的次数
for j in range(1, bonusNum):numP = num # numP是前一次的numif random.randint(1, 1000) <= probability: # 一次就吊到了娃娃num += 1 # 吊到了娃娃rate = 0 # 连续没有吊到娃娃的次数清零if rate != starNum and numP == num: # 没有吊到娃娃,且没有触发保底机制rate += 1if rate == starNum and numP == num: # 触发了保底机制,吊到了娃娃num += 1rate = 0
print('总计吊到娃娃的次数:', num, '仿真次数内吊到娃娃的平均概率:', num/bonusNum)
print('保底机制吊到娃娃的概率:', 1/starNum)
print('仿真次数内吊到娃娃的平均概率比保底机制吊到娃娃的概率:', (num/bonusNum)/(1/starNum)-1)
结果
参考文献
- 娃娃机使用说明