三门问题的python代码模拟和原理解释

三门问题的python代码模拟和原理解释

刷视频时偶然刷到了三门问题,于是好奇的查阅了一下

先给出三门问题的简单介绍(引用自百度):

三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let’s Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。

参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。

  • 当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。
  • 主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机率。如果严格按照上述的条件,那么答案是会。不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3。

虽然该问题的答案在逻辑上并不自相矛盾,但十分违反直觉。

开始和大多数人想的一样,会选择继续开第一扇门或者认为换和不换的概率都为 1 / 2 1/2 1/2,答案显然不是。

为更直观的看到三门问题的正确性,我写了一段python代码模拟这个过程


代码

import random

num :int =10000000

doors=['sheep','sheep','car']

win_num :int =0

for i in range(num):
    random.shuffle(doors) #随机打乱
     #首先选择第一个门,主持人开启另一个门
    #choice=doors[0]
    #展示另一个门为山羊
    if doors[1]=='sheep':
        sheep=doors[1]
        index=2
    else:
        sheep=doors[2]
        index=1
    #选择换门
    choice=doors[index]
    if choice=='car':
        win_num+=1

print(f"获奖的概率为{win_num/num*100}%")

经过多次运行,在 10000000 10000000 10000000次试验的环境下,最后的输出结果接近于 66.7 % 66.7\% 66.7%,也就是 2 / 3 2/3 2/3


原理解释

很显然这是一个概率论的问题,我们来构建更加具体的概率问题:

问题简述:

  • 有三扇门,其中一扇门后面藏有一辆车,另外两扇门后面藏有山羊。
  • 你首先选择一扇门。
  • 主持人知道哪个门后面有车,之后会打开一扇没有车的门,通常是两扇你没选的门中的一扇。
  • 然后主持人会问你是否要换门。如果你换门,你会选择剩下的未被你选中且未被主持人打开的门。

问题是:是否换门能增加获胜的概率?

假定选手选择第一扇门

  • A=第一扇门中是车
  • B=第二扇门中是车
  • C=第三扇门中是车
  • D=主持人选择打开第三扇门

在初始情况下: P ( A ) = P ( B ) = P ( C ) = 1 / 3 P(A)=P(B)=P(C)=1/3 P(A)=P(B)=P(C)=1/3;

然后,主持人打开了第三扇门,且我们知道第三扇门后面是山羊。

此时注意:由于主持人并不是固定打开三号门,主持人需要选择不是车的那个门来打开,只是在事例中,我们事先假定了三号门为羊

  • 如果第一扇门后面有车(事件A),也就是说主持人选择第二扇门和第三扇门都可以。所以,在事件A下,主持人选择打开第三扇门的概率是 P ( D ∣ A ) = 1 / 2 P(D|A)=1/2 P(DA)=1/2

  • 如果第二扇门后面有车(事件B),主持人只能打开第三扇门(因为第三扇门后有山羊)。因此,在事件B下,主持人打开第三扇门的概率是 1,即 P ( D ∣ B ) = 1 P(D|B)=1 P(DB)=1

  • 如果第三扇门后面有车(事件C),主持人就不能打开第三扇门了。因此,在事件C下,主持人只能选择打开第二扇门, P ( D ∣ B ) = 0 P(D|B)=0 P(DB)=0

现在我们需要计算在主持人打开第三扇门的情况下,是否换门能够增加获胜的概率

  • 在换门的情况下,最终选择第二扇门
  • 贝叶斯公式,计算 P ( B ∣ D ) = P ( D ∣ B ) P ( B ) P ( D ) P(B | D) = \frac{P(D | B)P(B)}{P(D)} P(BD)=P(D)P(DB)P(B)
  • 由全概率公式,计算 P ( D ) P(D) P(D)= P ( D ∣ A ) P ( A ) + P ( D ∣ B ) P ( B ) + P ( D ∣ C ) P ( C ) = ( 1 / 2 ∗ 1 / 3 ) + 1 ∗ 1 / 3 + 0 = 1 / 2 P(D|A)P(A)+P(D|B)P(B)+P(D|C)P(C)=(1/2*1/3)+1*1/3+0=1/2 P(DA)P(A)+P(DB)P(B)+P(DC)P(C)=(1/21/3)+11/3+0=1/2;

由上面的条件知: P ( B ∣ D ) = P ( D ∣ B ) P ( B ) P ( D ) = ( 1 ∗ 1 / 3 ) / ( 1 / 2 ) = 2 / 3 P(B | D) = \frac{P(D | B)P(B)}{P(D)}=(1*1/3)/(1/2)=2/3 P(BD)=P(D)P(DB)P(B)=(11/3)/(1/2)=2/3;

由此我们得知,在主持人打开了第三扇门的条件下,我们选择第二扇门的概率为 2 / 3 2/3 2/3,因此,我们换门的获奖几率更大


总结

在这个场景中,我在思考主持人选择第三扇门的部分耗费了不少时间,原因是我没有理解到,主持人并不是固定打开三号门,只是在问题场景中打开了第三扇门,而第三扇门恰好为羊。而实际上,主持人为了保证打开结果为羊的门,是否打开三号门是根据门后的物品排放来决定的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值