汽車山羊問題的分析以及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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM