汽车山羊问题的分析以及Python和MATLAB仿真实验
汽车和山羊问题
题目的背景介绍:
现有三扇门,其中一扇门后是一辆车,另外两扇门后是一头山羊。
选手从1,2,3号三扇门中选出一扇(仅标记,不打开),接着主持人再从未标记的两扇门中选出一扇打开。
主持人知道每扇门后放的是什么,所以每次主持人都选择后面是羊的那扇门打开。
选手有一次改变自己选择的机会。
最后,打开选手最终选中的那扇门,以选手最终选择的是车为获胜。
请问选手是否需要改变选择?
汽车和山羊问题求解
一、对该问题的枚举分析
是否更换 | 选择几号门 | 如果车在一号门后 | 如果车在二号门后 | 如果车在三号门后 |
---|---|---|---|---|
# 不换 | 一号 | \(√\) | \(×\) | \(×\) |
二号 | \(×\) | \(√\) | \(×\) | |
三号 | \(×\) | \(×\) | \(√\) | |
# 换 | 一号 | \(×\) | \(√\) | \(√\) |
二号 | \(√\) | \(×\) | \(√\) | |
三号 | \(√\) | \(√\) | \(×\) |
令更换选择且成功为事件A,不更换选择且成功为事件B,那么显然我们可以得出二者的概率为:
\[P(A)=\frac{1}{3}\quad\quad\quad P(B)=\frac{2}{3}
\]
二、对该问题的条件概率概率分析
令更换选择为事件A,不更换选择为事件B,显然
\[P(A)=P(B)=\frac{1}{2}
\]
1. 如果没有更换选择
车在一、二、三号门后分别为事件a、b、c,则
\[P(a)=P(b)=P(c)=\frac{1}{3}
\]
令选择一、二、三号门分别为事件1,2,3,则
\[P(1)=P(2)=P(3)=\frac{1}{3}
\]
那么显然没有更换选择且成功的概率设为\(P(\alpha)\)就是
\[P(\alpha)=P(1\cap a)+P(2\cap b)+P(3\cap c)=1/9+1/9+1/9=1/3
\]
故\(P(\alpha)=1/3\)
2. 如果更换了选择
显然我们可知如果更换选择,那么如果刚开始选的是对的则最后是错的,刚开始选的是错的则最后是对的
车在一、二、三号门后分别仍设为事件a、b、c,则
\[P(a)=P(b)=P(c)=\frac{1}{3}
\]
令选择一、二、三号门也分别为事件1,2,3,则
\[P(1)=P(2)=P(3)=\frac{1}{3}
\]
那么显然更换选择且成功的概率设为\(P(\beta)\)就是
\[P(\beta)=P(2\cap a)+P(3\cap a)+P(1\cap b)+P(3\cap b)+P(1\cap c)+P(2\cap c)\\
=1/9+1/9+1/9+1/9+1/9+1/9=2/3
\]
故\(P(\beta)=2/3\)
三、基于\(MATLAB\)的模拟实验
先用\(Python\)做了模拟实验
from random import*
TIMES = 10000
nochange=0 #初始化不改选择的次数
change=0 #初始化更改选择的次数
for i in range(TIMES):
Door=randint(0,2) #汽车在哪个门
guess=randint(0,2) #我的选择是哪个门
if Door==guess: #猜对了
nochange+=1 #不改选择的次数+1
else:
change+=1 #更改选择的次数+1
print("不改选择:{}".format(nochange/TIMES))
print("更改选择:{}".format(change/TIMES))
# 以下为测试数据
# 不改选择:0.332 更改选择:0.668
# 不改选择:0.3283 更改选择:0.6717
# 不改选择:0.331 更改选择:0.669
# 不改选择:0.3308 更改选择:0.6692
# 不改选择:0.3369 更改选择:0.6631
可以看到模拟实验的频率都稳定在上述分析得出的理论概率附近
另用\(MATLAB\)也做了模拟
n = 100000; %%n代表随机次数
nochange = 0; %%不改变选择
change = 0; %%改变选择
for i= 1 : n %%车在哪个门后
x = randi([1,3],1);
y = randi([1,3],1); %%我的选择哪个门
if x == y %%选对了
nochange = nochange + 1; %%不改选择的次数+1
end
if x ~= y %%选错了
change = change + 1; %%更改选择的次数+1
end
end
disp(nochange/n); %%输出不改变选择时的获奖概率
disp(change/n); %%输出改变选择时的获奖概率
%%以下为测试数据
%%不改变0.3342 改变0.6658
%%不改变0.3286 改变0.6714
%%不改变0.3351 改变0.6649