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

1.问题

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

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

选1号还是选2号?

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,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 呢,你当然不希望参赛者轻松的赢走门后的汽车,应该怎么做?

短期做法:

  • 如果对方坚持“必换”原则,那么,恭喜你,要么他第一次选错,要么他第二次选错。
  • 如果对方坚持“不换”原则,那么也恭喜你,他最多有1/3的概率赢得汽车,如果一次选中,试试能不能说动他换一扇门吧。
  • 如果对方相当聪明,或者他看完了这篇文章,并通过统计知道了你的习惯,那么他将很有可能赢得汽车。
  • 如果他的小聪明被你看出,那么针对这一次采取相反策略吧。
  • 如果他也看出了你这一次要用相反策略,那...剩下时间留给脑补。

长期做法:

  • 保持x>=2y,即参赛者第一次选对下打开另一扇门,提供换门机会的概率,要大于等于选错情况下提供换门机会的2倍(保持2倍关系即可,相差再大不会影响效果,反而可能会被诟病)。这种情况下任凭参赛者再聪明,也无法奈何,只有1/3的概率赢走汽车。

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271