我这几天都干了什么
其实不管干了啥,总之一定是在改变世界
你参加了一个游戏,在你面前有4张100万支票,其中1张是真的。游戏开始,你选了一张,之后主持人在剩下的3张里,选择一个展示出来,验证后发现是假的。
注意事项
这个问题非常类似 “三门问题”、Monty Hall problem。
理论推导:
四张支票,一张真,三张假,所以抽出一张,
在主持人未公布假支票之前,抽出真支票的概率为 1 / 4 = 0.25
,
主持人公布后,理论上抽中支票的概率变成了 1 / 3 = 0.33
,
但实际上,在抽的那一刻,是基于 1 / 4 = 0.25
的概率进行风险统计和决策的,所以真正付出的风险是 1 / 4 = 0.25
,
而且,由于没有改变选择的权利,且,0.25
是基于决策的概率,而0.33
是基于部分既定结果的概率,所以实际上你赢奖的概率并没有因为概率基数的减少而增大。
所以,在不允许改变选择的情况下,你真正的中奖概率是 1 / 4 = 0.25
,参赛权的价格为 100 * 0.25 = 25万
编程模拟:
import random
def game():
# 支票
cheques = [False, True, False, False]
# 抽支票并直接返回
return random.choice(cheques)
def doGame():
wins = 0
loses = 0
count = 10000
for i in range(count):
win = game()
if win:
wins += 1
else:
loses += 1
print('共进行了', count, '次抽奖;')
print('中奖场次:', wins, '场', round(wins / count * 100, 2), '%')
print('失败场次:', loses, '场', round(loses / count * 100, 2), '%')
print('根据概率计算的 参赛权价格约等于', round(wins / count * 100, 2), '万')
doGame()
理论推导:
同上,主持人公布假支票后,等于减少了一个概率基数,
因为在这一刻,抽奖者拥有了一次重新选择的机会,由于这时基数已减少,所以,理论上,只要再次决策,
接下来的决策胜利的概率则变成了 1 / (4 - 1) = 0.33
,
前提是,你需要做出决策(重新选择),新的决策会基于 1 / (4 - 1) = 0.33
的概率,中奖的概率会增加 0.33 - 0.25 = 0.08
,
重新决策 与 不重新决策的区别:
重新决策:基于 1 / (4 - 1) = 0.33
的概率进行选择
不再决策:保持基于 1 / 4 = 0.25
概率做出的选择
所以,0.33 > 0.25
,理论上,重新选择的胜率会高于不重新选择的胜率。
但实际上,即便是新的决策,你依然可能会选择当下已选支票;若如此,选择没有任何变化,概率却变了;
所以,概率并不是因为你的重新决策而变化,而是因为客观基数变化而变化;
上面的假设之所以也成立,是因为 “基于上次概率作出的决策结果” 恰恰也是 “本次决策概率的基数之一”;
试想,如果“重新选择”这个问题,改为分别给你两场抽奖机会,一场 0.33
,一场 0.25
,瞬间就不会觉得概率与事实上的悖论了。
所以,要换,换的话,参赛权的价格为 100 * 0.33 = 33万
。
编程模拟:
import random
def switchGame(switch):
# 支票
cheques = [False, True, False, False]
# 抽一支支票
choose = random.choice(cheques)
# 主持人公布(删除)一个假支票
cheques.remove(False)
# 如果选择更换选择,则重新选择一次
if switch:
choose = random.choice(cheques)
# 返回抽奖结果
return choose
def doGame(switch):
wins = 0
loses = 0
count = 10000
for i in range(count):
win = switchGame(switch)
if win:
wins += 1
else:
loses += 1
print('共进行了', count, '次', '重选' if switch else '不重选', '抽奖;')
print('中奖场次:', wins, '场', round(wins / count * 100, 2), '%')
print('失败场次:', loses, '场', round(loses / count * 100, 2), '%')
print('根据概率计算的 参赛权价格约等于', round(wins / count * 100, 2), '万')
doGame(True)
doGame(False)
“验证后发现是假的” 关键问题在于,这是真验证还是假验证 三门问题是假验证,从而保证主持人抽出来的全是假的 如果是真的,就要考虑主持人抽出真的情况,问题就会变得复杂而不单纯
Great
reply:
😌
收藏了 🦅爆了
😃😂😂
参赛权价格~