蒙提霍尔问题(The Monty Hall Problem)解析(含python仿真)

发布于:2022-10-21 ⋅ 阅读:(425) ⋅ 点赞:(0)

目录

0. 前言

1. 什么是蒙提霍尔问题(Monty Hall problem)

2. Naive approah:分类讨论

3. Python蒙特卡洛仿真

4. 直观的理解1

5. 贝叶斯方法


0. 前言

        蒙提霍尔问题可能是概率论历史上最具争议的问题。问题的场景极其简单,而其结果却呈现出惊人的反直觉,以至于许多人都无法接受它,曾经引发了巨大的争论。并且有许多著名的人物都在此问题上闹了笑话。

        本文介绍蒙提霍尔问题,并给出几种不同的分析和解题思路。

1. 什么是蒙提霍尔问题(Monty Hall problem)

        蒙提霍尔问题出现于一档游戏节目“Let's Make a Deal”(蒙提霍尔是当时的主持人)的一个常规节目,假设你是游戏的参加者(你的目标当然是向赢得那辆车,但是你需要能够猜对后面放着车的那扇门),这个节目的进程如下所示:

  • 1.主持人向你展示三扇门,其中一扇门后是一辆车,另外两扇门则是相当微不足道的安慰奖品,比如说,山羊啊、花生油啊什么的。
  • 2.首先主持人让你选择一扇门
  • 3.然后主持人会从另外两扇门中“任”选一扇后面没有车的门打开
  • 4.这时,主持人问你说:“你是坚持你原来的选择还是换到另一扇没有打开的门?”

        你应该改变自己的选择吗?

        很多人根据直觉觉得应该是没必要交换。因为,除了主持人打开的那扇门,车子出现在另外两扇门后面的概率是相同的。换句话说,主持人打开第二扇门并没有提供什么额外信息,车子出现在第一扇门和最后一扇门的概率没有因为主持人的行为而发生什么改变。

        然而,正确的答案是:你绝对应该换到另一扇没有打开的门。这样会让你赢得车子的概率从1/3上升到2/3!

2. Naive approah:分类讨论

        最直观的想法应该是如下所示分类讨论法:

        记三扇门分别为A、B、C。

        考虑车在A后面、B后面和C后面三种情况,针对每一种情况,第一次选择的门又有A、B、C三种情况。对所有情况进行穷举讨论可以得到下表:

         所以,确实是换门与不换门赢得车子的情况是6比6,各50%的概率。因此,换不换门无所谓!

        但是,且慢。。。有兴趣的小伙伴这里可以停下来思考一下,以上分类讨论和结论正确吗?不正确的话问题出在哪儿呢?

*********************************************分割线*******************************************************            

        熟悉概率论小伙伴应该知道按照分类计数的方式进行概率计算的前提条件是这些基本事件是等概率的。但是以上表中所列的各基本事件是等概率的吗?其实并不是。

        以第1行和第2行为例,车子在门A后面的概率为1/3,第一次选择门A的概率也是1/3,则联合概率为P(car(A), open(A)) = \frac{1}{3}\times \frac{1}{3}=\frac{1}{9}。在这个前提条件下,主持人打开B或者C的概率各为50%,因此有:

                P(car(A), open(A), host\_open(B)) =\frac{1}{3}\times \frac{1}{3}\times \frac{1}{2}=\frac{1}{18}

                P(car(A), open(A), host\_open(C)) = \frac{1}{3}\times \frac{1}{3}\times \frac{1}{2}=\frac{1}{18}    

        然后看第3行,由于第一次选择门B后,主持人没有选择只能打开门C,可知: 

        ​​​​​​​        P(car(A), open(B), host\_open(C)) =\frac{1}{3}\times \frac{1}{3}=\frac{1}{9}

        同理看第4行, 

                P(car(A), open(C), host\_open(B)) =\frac{1}{3}\times \frac{1}{3}=\frac{1}{9} 

        显而易见,上表所列的12种情况的概率并不相等。把这个概率权重考虑进去后,就可以得到,换门能够赢得车子的概率上升为2/3,而不换车能赢得车子的概率则将为1/3,显然应该毫不犹豫地换车!

3. Python蒙特卡洛仿真

         一个简易的基于python的蒙特卡洛仿真如下所示:

import random

num_trial = 100000
exchange_win = 0
for k in range(num_trial):
    
    #1. 随机将车子放在3个门后面,分别记为门1,门2,门3
    car = random.randint(1, 3)
    #print(car)
    
    #2. 随机打开其中任何一扇门
    open1 = random.randint(1, 3)
    
    #3. 主持打开其中一扇门
    # 如果open1打开的是有车的门,则主持人在剩下两扇门中任选一扇打开
    # 如果open1打开的是无车的门,则主持人必须打开另一扇无车的门
    while 1:
        open2 = random.randint(1, 3)
        if open2 != open1 and open2 != car:
            break
        
    if open1 != car:
        exchange_win += 1

print('The win prop of exchanging the door is {0}'.format(exchange_win/num_trial))

        运行以上程序,当num_trial设置足够大的话,可以得到换门赢车的概率接近2/3。

4. 直观的理解1

         玩家第一次打开任意一扇门,毫无疑问的是,他恰好打开有车的那扇门的概率是(1/3),车在剩下的两扇门中的概率之和为2/3。不管主持人接下来打开哪扇门,都并没有改变玩家打开的第一扇门中有车的概率(否则就破坏了因果律)。而主持人打开的一定是无车的门,等于是排除了其中一扇门,因此剩下的(2/3)的概率就全部落在未打开的那扇门上。

        所以。。。就这么简单。。。坚持之前的选择就坚持了(1/3)的赢得车子的概率,而换门的话自然就有(2/3)的概率赢得车子了。

        事实上,从以上仿真程序中也可以看出,判断是否需要换门其实只需要比较第一次打开的门与车所在的门是否一致。。。

         

5. 贝叶斯方法

        虽然有点杀鸡用牛刀之嫌,本问题也可以用贝叶斯定理来考察解决。

        换个看问题的角度,对问题进行简化,如下所示:

         记游戏者第一次选择的为门A,随后MontyHall打开的后面没有车的门,记为门B。剩下的一扇门自然就记作门C。游戏者面临的问题是:应该继续坚持A,还是应该改选门C呢?换句话说,理性的游戏者应该根据以上信息判断出奖品在哪扇门(A or C)后的概率最高呢?

        coming soon...

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到