问题背景
注意:本文并没有用到贝叶斯公式(为了方便理解)
想象有这样一个场景,在一场节目中,你面前有三扇门,有两扇门后面是山羊,有一扇门后面是车子,你的目标是打开有车子的那一扇门(视为获奖),你无法知道门后面的是山羊还是车子,你随便选了一扇门(并没有打开),你将要去开门时,主持人叫住了你,并打开的一扇有山羊的们(并不是你要开的那扇门),那么这时改变你的选择会增加获奖的概率吗?
问题分析
这个问题乍一看好像改不改变选择获奖的概率都不变,都是1/3
又或者乍一看,场上相当于只有两扇门,一扇有车,一扇是山羊中奖概率是1/2
事实真的如此吗?
不妨先用枚举来仔细分析一下问题,如果我们改变选择,大致有两种情况:
第一种:你最开始就选到了后面是车子的门,然后主持人给你打开了另一扇有山羊的门
如果你改变你的选择你一定是不中奖
也就是说只要你一开始选择车子就一定不中奖(在主持人告诉你有一扇门是羊时),这件事发生的概率是1/3
第二种:一开始选中的门后面是山羊,这个时候主持人就会打开另一扇是山羊的门,剩下的们就一定是车子,这个时候改变选择一定中奖
也就是说只要一开始选择的是羊就一定中奖,概率为2/3
综上所述:我们知道了,只要我们改变决策,如果我们一开始选中的是车子就不会中奖,如果我们一开始选中的是山羊就一定会中奖,这样我们中奖的概率就有2/3!!
错误观点分析
可以看到我们中奖的概率即高于1/3,也高于1/2,那么前面的直观分析错在了哪里?
一.第一种观点:认为中奖概率任然是1/3
如果主持人没有打开一扇是山羊的门,那么中奖概率就是1/3,但是现在,在打开自己所选择的门之前,你已经知道了一个错误选项,那么你中奖的概率肯定会提高,所以不是1/3,至少是1/2
就好比数学考试选择题最后一题,你不知道答案,你随便蒙了个A,交卷上去,然后老师告诉你D选项是错的,那么你是不是对自己的答案更有把握呢? 那么你蒙A答对的概率就不是1/4了,而是1/3
二.第二种观点:认为中奖概率是1/2
为什么中奖的概率不是1/2,而是2/3呢
问题的关键就在主持人是在你选择后告诉你一个错误答案的
如果是在你选择前帮你排除了一个门后面有山羊,那么主持人可以在两扇有山羊的门之间随便选择一扇有山羊的门告诉你,
而如果是在你选择一扇门之后,他要告诉你有一扇门后面有山羊,在第一种情况中(你选择了山羊的门),主持人只能选择另一扇有山羊的门,你的选择无形之中影响了主持人的选择!
就相当于如果你打算选择第一扇门,相当于在选择前你先跟主持人说:主持人吖,请你告诉我第二扇门和第三扇门哪一个后面有山羊,这显然比直接在三扇门中排除其中一扇门要好!所以概率一定大于1/2
python模拟
import numpy as np
t=[] #用来存储获奖次数
for i in range(0,1000): #模拟1000次
door=np.array([1,2,3]) #定义一个数组,用来表示三扇门
X=np.random.choice(door,1,replace=True) #选一扇门后面有车
Thechoose=np.random.choice(door,1,replace=True) #选手选择一扇门作为选择
#Thechoose of zhuchi 主持可以选择的门
Thechooseofzhuchi=np.delete(door.copy(),[X-1,Thechoose-1]) #主持不可选择有车的选手选过的
#主持人更具选手选择,随机告诉选手一扇有山羊的门
zhuchi=np.random.choice(Thechooseofzhuchi,1,replace=True)
#选手再选择
Thechoose=np.delete(door.copy(),[Thechoose-1,zhuchi-1]) #选手不选择主持告诉他的山羊门和自己之前选的门
#判断是否中奖
if(Thechoose==X):
t.append(1) #中奖加1
else:
t.append(0)
print(sum(t)/len(t)) #中奖的概率
######代码解释####
#np.random.choice(door,1,replace=True) 对数组door中的元素有重复的随机抽样一次,返回结果
#np.delete(door.copy(),[X-1,Thechoose-1]) 删去数组door中值为X-1,Thechoose-1的元素,返回删除后的数组
R模拟
X=sample(c(1,2,3),size=1000,replace=TRUE) #等可能的产生1,2,3视作有车子的门,总共模拟1000次
TheChoose=sample(c(1,2,3),size=1000,replace=TRUE) #在1,2,3扇门中等可能的选择一扇门
#在主持人的告知下更换另一扇门
#如果Thechoose选的是车子则不中奖,如果选的不是车子则中奖
p=mean(X!=TheChoose)
p