1.问题
Monty Hall problem 衍生过许多版本,写进过高中数学教科书思考题,在网上讨论也颇多,但目前看到的结论多数不赞同,或者是被限制了条件。下面来看一下这个悖论的原始版本:
Monty Hall 是美国一个电视游戏节目的主持人,你是参赛者。你面对三扇门(A,B,C),其中一扇门的后面是汽车,另外两扇门后面是山羊,你的目标是赢得汽车。你随机选择一扇门(假设你选择了A),这时主持人打开了C,C后面是一只山羊,并给你一次重新选择的机会。现在汽车只可能在A和B中,你该不该换门,汽车在A和B后面的概率各是多少?
2.思考
不同的人有不同的思考方式,主要集中在以下几种:
佛性思考法:只剩下两个门了,那么这时候汽车在A或B后面的概率是平等的,换不换无所谓。
反选法:三个门选一个获奖率是1/3,但如果让你同时选两个门就是2/3这是毫无疑问的,你是一个心机girl,心里选了B+C,嘴上对主持人说选A,之后不管她从B或C打开哪一个门(后面是羊),都相当于为你排除了多数中的错误答案,你间接选择了B+C,所以换门的概率更大,为2/3,不换的概率1/3,这是网上最常见的答案,证明方式各有不同,但事实真如此吗?
经验法:祖先告诉了我们经验的重要性,你在不知是否换门之际,掏出手机google了 Monty Hall,发现了她的黑历史,原来,她只在参赛者第一次选对时,才故意打开另一扇门迷惑你。之前所有和你一样参加这个节目的人,凡是第二次换门,最后都空手而归,看到这里后你还坚持换门吗?
3.为什么会有悖论?
除了问题描述本身,还有一个关键之处:Monty Hall 打开另一扇门的动机。这个问题实际是一个缺少先验概率的条件概率问题。不妨我们给它补上: Monty Hall 在你选对的情况下打开另一扇门的概率是 x,在你选错的情况下打开另一扇门的概率是 y,这道题才能计算正确答案!现在我们来算一算,当 x, y 符合什么情况该换门,什么情况不该换。
先考虑极端情况:
- x = y = 1: 应该换!参考反选法。
- x = 1, y = 0: 必须不换!参考经验法。
- x = 0, y = 1: 请问这个福利节目现在还有么。
- x = 0, y = 0: 会导致不存在打开另一扇门的情况,不合理。
根据贝叶斯公式:
可见,不换门赢得汽车的概率,只与y与x的比例有关,下面是x, y在[0,1]范围内的热度图像
- y/x 越小,越靠近绿色,汽车在A的概率越接近1,不应该换;
- y/x 越大,越靠近红色,汽车在A的概率越接近0,应该换;
- 在图中的黑线 y=0.5x 上,换与不换概率均为0.5
4.Python 验证
利用random随机数,制造出随机的五组x, y 计算理论概率,并模拟实际几率
# -*- coding: utf-8 -*-
__author__ = 'zijian'
import random
def monty_hall_problem(max_trial, x, y):
done = False
total_car_in_A = 0
total_trial = 0
#Monty Hall 问题大量发生,每一次选A
while not done:
#用1,2,3表示汽车在A,B,C
car_behind_door = random.randint(1,3)
if car_behind_door == 1:
#有x概率开另一扇门,此时不换会赢得汽车
if random.random() < x:
total_car_in_A += 1
total_trial += 1
#否则不开门,不符合条件
else:
continue
#有y概率开另一扇门,此时不换赢不到
elif random.random() < y:
total_trial += 1
#同样,不符合条件
else:
continue
if total_trial >= max_trial:
done = True
return total_car_in_A / total_trial
if __name__ == "__main__":
for i in range(5):
#随机选5组随机数
x = random.random()
y = random.random()
#理论值
p0 = x /(x + 2 * y)
#实际值
p = monty_hall_problem(1000000, x, y)
print("第%s次随机x = %s, y = %s,理论概率 x/(x + 2y):%s"%(i+1, x, y, p0))
print("第%s次百万数量模拟下,汽车在A门后的几率为:%s,相对误差为%s%%" % (i+1, p, 100*(p - p0)/ p0))
上述代码执行后的结果如下:
第1次随机x = 0.4861871788241564, y = 0.12591280082723066,理论概率 x/(x + 2y):0.6587788066608457
第1次百万数量模拟下,不换门赢的几率为:0.658873,相对误差为0.014298173863823812%
第2次随机x = 0.07298868281286575, y = 0.5447049643017904,理论概率 x/(x + 2y):0.06279144012734585
第2次百万数量模拟下,不换门赢的几率为:0.062931,相对误差为0.22225939136149226%
第3次随机x = 0.42103934207411153, y = 0.6491863485255072,理论概率 x/(x + 2y):0.24487402233634786
第3次百万数量模拟下,不换门赢的几率为:0.24544,相对误差为0.23113013714240673%
第4次随机x = 0.6276282895713531, y = 0.5662725903978403,理论概率 x/(x + 2y):0.3565718380248506
第4次百万数量模拟下,不换门赢的几率为:0.356352,相对误差为-0.06165322142890953%
第5次随机x = 0.6709303930216155, y = 0.7945710048946582,理论概率 x/(x + 2y):0.2968623448466322
第5次百万数量模拟下,不换门赢的几率为:0.296592,相对误差为-0.09106740929768469%
>>>
可见与预期结果一致。
5.这就结束了?
看到这里,你根据节目历史,估算出了x,y,之后通过计算比较了换与不换的概率的大小,去参加节目,是否必有超过一半概率赢回汽车?
答案:当然不是!因为这是一个条件概率问题,你不能保证你去参加节目一定会达成条件。很可能你第一次选错直接 GAME OVER 了。
既然这样计算上面概率还有什么意义呢?我们已经得出这个结论了不是:如果 Monty Hall 打开另一扇门,给我们一次换门的机会,x>2y 时选择不换,否则选择换。所以,还需一步就可以推导不含条件的全概率公式:
化简①式,结果为:1/3,
化简②式,结果为:(1+2y-x)/3
下面是全概率下的热度图像
这个结果是符合常理的,仅当x=0,y=1情况,参赛者必赢(要么第一次选对直接赢得汽车,要么第一次选错100%开门,第二次换门赢得汽车),其他情况下,根据不同的x,y,赢得汽车的概率在1/3和1之间
6.结论
如果你是参赛者,并且希望赢走汽车,为了提高成功率一定要提前知道 Monty Hall 的策略(根据节目历史估算 x, y)
如果你不知道该不该参加节目,可以通过 汽车价格 × 上面的概率 计算 期望值,如果期望值大于入场门票价格,那么,大量参加节目是稳赚不赔的(当然在 Monty Hall 不会针对你多次竞猜而改变策略前提下)。事实上,2005年2月,美国的某一个彩票品种由于设计不周,真的出现过稳赚不赔的情况,被麻省理工一名学生发现并通过反复购买赚到了300万美元。链接
那么转换思维,如果你是 Monty Hall 呢,你当然不希望参赛者轻松的赢走门后的汽车,应该怎么做?
短期做法:
- 如果对方坚持“必换”原则,那么,恭喜你,要么他第一次选错,要么他第二次选错。
- 如果对方坚持“不换”原则,那么也恭喜你,他最多有1/3的概率赢得汽车,如果一次选中,试试能不能说动他换一扇门吧。
- 如果对方相当聪明,或者他看完了这篇文章,并通过统计知道了你的习惯,那么他将很有可能赢得汽车。
- 如果他的小聪明被你看出,那么针对这一次采取相反策略吧。
- 如果他也看出了你这一次要用相反策略,那...剩下时间留给脑补。
长期做法:
- 保持x>=2y,即参赛者第一次选对下打开另一扇门,提供换门机会的概率,要大于等于选错情况下提供换门机会的2倍(保持2倍关系即可,相差再大不会影响效果,反而可能会被诟病)。这种情况下任凭参赛者再聪明,也无法奈何,只有1/3的概率赢走汽车。
本文完。与个人博客同步更新
原创文章,如需转载,请注明来源。
如需联系作者:[email protected]