概率论-三门问题

这篇文章来解决我一直充满疑惑的问题——汽车和山羊问题。汽车和羊的问题是三门问题——亦称为蒙提霍尔问题,出自美国的电视游戏节目Let’s Make a Deal。问题的名字来自该节目的主持人蒙提·霍尔(Monty Hall)。

游戏规则是有三扇门 其中一扇门的后面是一辆车,而其他的两扇门的后边是一头山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人会开启剩下两扇门的其一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门,参赛者选中车为获胜。

根据问题描述,我们可以提炼出以下几个关键的解题点,选手有  \frac{1}{3}的概率选择到车,有 \frac{2}{3} 的概率选择到山羊。问题关键在于,主持人知道每扇门的后面隐藏的是什么东西,他会打开未选择的门内的山羊,也就是说,在选手做出决定之前,必定有一扇门背后的山羊是打开状态。

由此对题目的理解,在节目播出后,针对换不换门的争议引起了广大网友的热烈讨论,由此衍生出了两种不同的派别:

1 第一个派别认为换不换都一样,主持人已经选出了一只山羊,剩下两个门要么车,要么山羊,都是 \frac{1}{2}的概率获胜。

2 第二个则有不同的看法。首先,选手针对三个门,各有\frac{1}{3} 的概率选择其中一扇门。

将三种情况列举出来,很容易看到转换将有 \frac{2}{3}的概率赢得汽车。

到底是哪种情况分析的更正确呢?

首先,我们不妨画一幅图来表示所有可能的情况。

我们以最左侧的两种情况为例分析,当你选择的门后面是山羊时,如果不换的话,门后是山羊,参赛者失败;如果换的话,主持人已选择了一只山羊,所以参赛者会赢得汽车,最终获胜。选择另外两扇门的情况也按照上述思路一一列出。根据概率的定义及公式,我们可以得出,不改变主意的情况下,最终结果有三种情况,得到汽车占一种情况,获胜概率为\frac{1}{3} ;改变主意的情况下,最终结果有三种情况,得到汽车占两种情况,获胜概率为 \frac{2}{3}。所以,在改变主意的情况下,获胜的概率更大,为 \frac{2}{3} 。

当然,除了简单的列举出所有情况,使用最原始的方法算出获胜的概率,我们应用课本中的贝叶斯公式也可以计算获胜的概率。

贝叶斯定理是关于随机事件A和B的条件概率的定理。

P(A|B)=\frac{P(B|A)\times P(A)}{P(B)}

其中A以及B为随机事件,且P(B)不为零。P(A|B)是指在事件B发生的条件下事件A发生的概率。P(A|B)是已知B发生后,A发生的条件概率,也称作A的后验概率;P(A)是A的先验概率;P(B|A)是是已知A发生后,B发生的条件概率,也称作B的后验概率;P(B)是B的先验概率。

假设三个门分别为X、Y、Z,C_{x}表示车在X后面,其余类推;H_{x}表示主持人推开了X门,其余类推。同样的,假设参赛者第一次选择的是X门,那么在主持人选择了打开一扇门之后换门赢得汽车的概率:

P(H_{z} \wedge C_{y} )+P(H_{y} \wedge C_{z} ) =P( C_{y} )\times P(H_{z} | C_{y})+P( C_{z} )\times P(H_{y} | C_{z}) =\frac{1}{3}\times 1 +\frac{1}{3}\times 1 =\frac{2}{3}

主持人事先知道那扇门背后有山羊,所以他一定会选出一只山羊,P(Hz|Cy)和P(Hy|Cz)等于1,由贝叶斯公式我们可以计算出参赛者换门之后,获胜的概率为 \frac{2}{3} 。这个概率也和我们上述列举所有情况下获胜的概率相同,两者相互证明。

针对汽车山羊问题,除了上面经典的数学方法外,还可以运用计算机进行模拟。下面是使用python语言进行模拟。

from random import *

TIMES = 10000
no_choice_n = 0  # 初始化不改获得汽车的次数
choice_n = 0  # 初始化更改获得汽车的次数
doors = ['汽车', '山羊', '山羊']

首先我们导入random,因为选择是随机的,我们需要导入这个模块去生成随机数。随后,我们设置一下循环的次数TIMES。也就是进行多少次模拟。初始设为10000次。再设置一个变量no_choice_n,代表的就是如果不进行更换的情况下一共可以多少次获得汽车。还有一个choice_n。意思就是如果更改选择,可以多少次获得汽车。

初始化我们将它们全部设置成0,模拟中,每成功一次将它加上一。

对于汽车和山羊,我们定义一个列表doors,其中有两个山羊,一个汽车。

首先我们来循环TIMES次。模拟不更改选择时,判断一共选中了汽车多少次。如果不更改选择,那么就相当于在三个门中随机选择一扇门,然后打开,我们用first_choice = randint(0, 2)。随机生成0,1,2三个数。分别对应doors列表中的汽车、山羊、山羊。如果随机数等于0,no_choice_n就加一,最后就是成功次数。

# 当你选择不更改选择时
for i in range(0, TIMES):

    first_choice = randint(0, 2)
    if doors[first_choice] == '汽车':
        no_choice_n = no_choice_n + 1
    else:
        pass
print("不做转换时获胜次数及概率:",no_choice_n,no_choice_n / TIMES)

当我们选择更改门的时候,就要考虑主持人打开的那扇门了。主持人肯定会找一扇后面是山羊的门打开。用计算机模拟的时候,我们就在0,1,2中随机选一个数。选择的数不能和我第一次选择的数重复,也不能背后是汽车。如果不满足这两个条件,就要重新选择,一直到选中满足两个条件的门为止。

然后,我们还要选出剩下的那个门,用到while循环,如果和前面的两扇门重复,就要重新选择,一直到选中剩下的门为止。最后,我们判断一下剩下的这个门是不是汽车,如果是汽车,那么我们就让choice_n+1。

# 当你选择更改选择时
for i in range(0, TIMES):
    first_choice = randint(0, 2)
    while 1:
        host_choice = randint(0, 2)
        if host_choice == first_choice or doors[host_choice] == '汽车':
            host_choice = randint(0, 2)
        else:
            break
    second_choice = randint(0, 2)
    while 1:
        if second_choice == host_choice or second_choice == first_choice:
            second_choice = randint(0, 2)
        else:
            break
    if doors[second_choice] == '汽车':
        choice_n = choice_n + 1
    else:
        pass

print("做转换时获胜次数及概率:",choice_n,choice_n / TIMES)

下面是程序几次模拟出的结果,获胜的概率和我们上面的数学运算结果一样。

由上面的四组仿真结果展示,可以很清楚的看到,当不进行交换时,获胜的概率在0.33左右,当进行交换时,获胜的概率在0.66左右,充分的证明了上面的推导和计算结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值