汽车山羊问题的分析以及Python和MATLAB仿真实验

汽车和山羊问题

题目的背景介绍:

现有三扇门,其中一扇门后是一辆车,另外两扇门后是一头山羊。

选手从1,2,3号三扇门中选出一扇(仅标记,不打开),接着主持人再从未标记的两扇门中选出一扇打开。

主持人知道每扇门后放的是什么,所以每次主持人都选择后面是羊的那扇门打开。

选手有一次改变自己选择的机会。

最后,打开选手最终选中的那扇门,以选手最终选择的是车为获胜。

请问选手是否需要改变选择?

汽车和山羊问题求解

一、对该问题的枚举分析

是否更换 选择几号门 如果车在一号门后 如果车在二号门后 如果车在三号门后
# 不换 一号 (√) (×) (×)
二号 (×) (√) (×)
三号 (×) (×) (√)
# 换 一号 (×) (√) (√)
二号 (√) (×) (√)
三号 (√) (√) (×)

​ 令更换选择且成功为事件A,不更换选择且成功为事件B,那么显然我们可以得出二者的概率为:

[P(A)=frac{1}{3}quadquadquad 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(1cap a)+P(2cap b)+P(3cap 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(eta))就是

[P(eta)=P(2cap a)+P(3cap a)+P(1cap b)+P(3cap b)+P(1cap c)+P(2cap c)\ =1/9+1/9+1/9+1/9+1/9+1/9=2/3 ]

​ 故(P(eta)=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
原文地址:https://www.cnblogs.com/QSun77/p/14169116.html