烧脑悖论课有名的悖论

不要小瞧了 Monty Hall problem (三门问题)

2018-05-14  本文已影响0人  ZIJIAN94

1.问题

Monty Hall problem 衍生过许多版本,写进过高中数学教科书思考题,在网上讨论也颇多,但目前看到的结论多数不赞同,或者是被限制了条件。下面来看一下这个悖论的原始版本:

Monty Hall 是美国一个电视游戏节目的主持人,你是参赛者。你面对三扇门(A,B,C),其中一扇门的后面是汽车,另外两扇门后面是山羊,你的目标是赢得汽车。你随机选择一扇门(假设你选择了A),这时主持人打开了C,C后面是一只山羊,并给你一次重新选择的机会。现在汽车只可能在A和B中,你该不该换门,汽车在A和B后面的概率各是多少?

选1号还是选2号?

2.思考

不同的人有不同的思考方式,主要集中在以下几种:

3.为什么会有悖论?

除了问题描述本身,还有一个关键之处:Monty Hall 打开另一扇门的动机。这个问题实际是一个缺少先验概率条件概率问题。不妨我们给它补上: Monty Hall 在你选对的情况下打开另一扇门的概率是 x,在你选错的情况下打开另一扇门的概率是 y,这道题才能计算正确答案!现在我们来算一算,当 x, y 符合什么情况该换门,什么情况不该换。

先考虑极端情况:

根据贝叶斯公式:

贝叶斯公式

可见,不换门赢得汽车的概率,只与y与x的比例有关,下面是x, y在[0,1]范围内的热度图像

水平轴为第一次选对主持人打开另一扇门的概率,垂直轴为第一次选错主持人打开另一扇门的概率

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,y,计算得到最可能赢得汽车的概率;举个例子,x=0,y=0.25,如果提供了换门机会,那换门胜率将是100%,因为你若第一次选对主持人根本不会开另一扇门!但你无法在比赛前确定会有换门机会,所以综合胜率是50%

这个结果是符合常理的,仅当x=0,y=1情况,参赛者必赢(要么第一次选对直接赢得汽车,要么第一次选错100%开门,第二次换门赢得汽车),其他情况下,根据不同的x,y,赢得汽车的概率在1/3和1之间

6.结论

如果你是参赛者,并且希望赢走汽车,为了提高成功率一定要提前知道 Monty Hall 的策略(根据节目历史估算 x, y)

如果你不知道该不该参加节目,可以通过 汽车价格 × 上面的概率 计算 期望值,如果期望值大于入场门票价格,那么,大量参加节目是稳赚不赔的(当然在 Monty Hall 不会针对你多次竞猜而改变策略前提下)。事实上,2005年2月,美国的某一个彩票品种由于设计不周,真的出现过稳赚不赔的情况,被麻省理工一名学生发现并通过反复购买赚到了300万美元。链接

那么转换思维,如果你是 Monty Hall 呢,你当然不希望参赛者轻松的赢走门后的汽车,应该怎么做?

短期做法:

长期做法:

本文完。与个人博客同步更新

原创文章,如需转载,请注明来源。

如需联系作者:zijian@outlook.de

上一篇 下一篇

猜你喜欢

热点阅读