三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let’s Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。
此问题涉及三个随机变量(是否换门并不是随机变量):
X : 正 确 的 门 ; X:正确的门; X:正确的门;
Y : 参 赛 者 选 定 的 门 ; Y:参赛者选定的门; Y:参赛者选定的门;
Z : 主 持 人 开 启 的 门 ; Z:主持人开启的门; Z:主持人开启的门;
X , Y , Z 可 以 取 值 1 , 2 , 3 ; X,Y,Z可以取值1,2,3; X,Y,Z可以取值1,2,3;
P { 选 手 换 门 后 获 得 奖 品 } = P { Y = b ∣ X = a , Z = c } = 1 − P { Y = a ∣ X = a , Z = c } ; P\{选手换门后获得奖品\}=P\{Y=b|X=a,Z=c\}=1-P\{Y=a|X=a,Z=c\}; P{选手换门后获得奖品}=P{Y=b∣X=a,Z=c}=1−P{Y=a∣X=a,Z=c};
P { Y = a ∣ X = a , Z = c } = P { X = a , Y = a , Z = c } P { X = a , Z = c } ; P\{Y=a|X=a,Z=c\}=\dfrac{P\{X=a,Y=a,Z=c\}}{P\{X=a,Z=c\}}; P{Y=a∣X=a,Z=c}=P{X=a,Z=c}P{X=a,Y=a,Z=c};
P { X = a , Y = a , Z = c } = P { Z = c ∣ X = a , Y = a } P { Y = a ∣ X = a } P { X = a } = 1 2 × 1 3 × 1 3 = 1 18 ; P\{X=a,Y=a,Z=c\} = P\{Z=c|X=a,Y=a\}P\{Y=a|X=a\}P\{X=a\} = \dfrac{1}{2}×\dfrac{1}{3}×\dfrac{1}{3}=\dfrac{1}{18}; P{X=a,Y=a,Z=c}=P{Z=c∣X=a,Y=a}P{Y=a∣X=a}P{X=a}=21×31×31=181;
P { X = a , Z = c } = P { X = a , Z = c , Y = a } + P { X = a , Z = c , Y = b } ; P\{X=a,Z=c\}=P\{X=a,Z=c,Y=a\}+P\{X=a,Z=c,Y=b\}; P{X=a,Z=c}=P{X=a,Z=c,Y=a}+P{X=a,Z=c,Y=b};
P { X = a , Z = c , Y = b } = P { Z = c ∣ X = a , Y = b } P { Y = b ∣ X = a } P { X = a } = 1 × 1 3 × 1 3 = 1 9 ; P\{X=a,Z=c,Y=b\}=P\{Z=c|X=a,Y=b\}P\{Y=b|X=a\}P\{X=a\} = 1×\dfrac{1}{3}×\dfrac{1}{3}=\dfrac{1}{9}; P{X=a,Z=c,Y=b}=P{Z=c∣X=a,Y=b}P{Y=b∣X=a}P{X=a}=1×31×31=91;
所 以 P { X = a , Z = c } = 1 18 + 1 9 = 1 6 所以P\{X=a,Z=c\}=\dfrac{1}{18}+\dfrac{1}{9}=\dfrac{1}{6} 所以P{X=a,Z=c}=181+91=61
P { 选 手 获 得 奖 品 } = 1 − 1 18 1 6 = 2 3 P\{选手获得奖品\}=1-\dfrac{\dfrac{1}{18}}{\dfrac{1}{6}}=\dfrac{2}{3} P{选手获得奖品}=1−61181=32
综上所述,选手换另一扇关闭的门后,其获得奖品的概率为 2 3 。 \dfrac{2}{3}。 32。
若选手选择坚持原来的选择,则其获胜的概率为 P { Y = a ∣ X = a , Z = c } = 1 3 P\{Y=a|X=a,Z=c\}=\dfrac{1}{3} P{Y=a∣X=a,Z=c}=31,论证结束。
上述各式中a,b,c取值限定为a、b、c互不相等即可,当X=a时,Y=b、Z=c的含义与Y=c、Z=b并没有区别。
我们只需要把握下面两点:
所以,第二次换门后获得奖品的概率就等于第一次选择错误的概率,为 2 3 \dfrac{2}{3} 32;若坚持第一次的选择,主持人打开另一扇错误的门与否不影响最后的结果,所以坚持第一次选择,成功的概率为 1 3 。 \dfrac{1}{3}。 31。
import random
def reselect(times=10000):
winTimes = 0
for i in range(times):
doors = [1,2,3]
random.shuffle(doors)
cannotOpenDoor = []
selectDoor = random.choice(doors)
cannotOpenDoor.append(selectDoor)
winnerDoor = random.choice(doors)
cannotOpenDoor.append(winnerDoor)
if(len(set(doors) - set(cannotOpenDoor)) == 1):
winTimes += 1
print(winTimes / times)
reselect()
测试结果:
当times = 1000000时,结果为0.66692近似为2/3。
(在编程的过程中,很容易发现主持人打开某扇门这一随机事件并不是独立的,所以这一事件的出现影响了最终的结果)。