0. 问题介绍
0.1 背景
蒙提霍尔问题,亦称为蒙特霍问题或三门问题(英文:Monty Hall problem),是一个源自博弈论的数学游戏问题,大致出自美国的电视游戏节目Let’s Make a Deal。问题的名字来自该节目的主持人蒙蒂•霍尔。
详情参见:维基百科
0.2 玩法
0.2.1 原描述方式
背景:参赛者会看见三扇关闭的门,其中一扇门后面有奖品,选中后面有奖品的那扇门就可以赢得该奖品,而另外两扇门后面则没有任何东西。
当参赛者选定了一扇门,但未去开启它的时候,知道门后情形的节目主持人,会在剩下的两扇门中开启没有任何东西的一扇。主持人此时会问参赛者要不要换另一扇仍然关上的门。
问题:换另一扇门会否增加参赛者赢得汽车的机会率?
0.2.2 更明确的描述方式
背景:
- 参赛者在三扇门中挑选一扇。他并不知道内里有什么。
- 主持人知道每扇门后面有什么。
- 主持人必须开启剩下的其中一扇门,并且必须提供换门的机会。
- 主持人永远都会挑一扇有山羊的门。
- 如果参赛者挑了一扇有山羊的门,主持人必须挑另一扇有山羊的门。
- 如果参赛者挑了一扇有汽车的门,主持人随机(概率均匀分布)在另外两扇门中挑一扇有山羊的门。
- 参赛者会被问是否保持他的原来选择,还是转而选择剩下的那一道门。
问题:转换选择可以增加参赛者的机会吗?
对于上面这种描述方式,如果你有概率统计方面的知识,应该能够比较容易地对此问题做出正确判断。有时候,出题者还会故意隐去主持人所知道的信息,此时问题变得较为复杂,就需要分情况讨论了。
1. 解答
将3扇门扩展到 nn 扇门,更具一般性,也容易描述。因此,下面皆以 nn 扇门为背景作答。
1.1 情况1:主持人不知道哪扇门后面有奖品,并随机选择一扇门打开
描述:假定有 n 扇门,只有一扇门后面有奖品,并且主持人(Host)不知道奖品在哪扇门后面。
当参赛者(Contestant),随机选择一扇门后,主持人也会在剩下的 n−1 扇门中随机选择一扇门打开,如果打开的门内无奖品,主持人会给参赛者重新选择的机会。
问题:此时,参赛者有两种方案可选:①保持原选择不变,②在剩下的 n−2 扇门中随机选择一扇门,问哪一种方案中奖的机会更大。
根据题意,容易得到以下结论:
主持人中奖的概率:$\mathbf{P}(H)=\frac{1}{n}$,则主持人未中奖的概率:$\mathbf{P}(\overline{H})=\frac{n-1}{n}$,此处与1.2节不同
参赛者中奖的概率:$\mathbf{P}(C)=\frac{1}{n}$
参赛者中奖时,主持人不中奖的概率:$\mathbf{P}(\overline{H} | \mbox{C})=1$
根据条件概率公式和乘法公式,方案①的中奖的概率为:
$$\mathbf{P}_1=\mathbf{P}(C | \overline{H})=\frac{\mathbf{P}(C \overline{H})}{\mathbf{P}(\overline{H})}=\frac{\mathbf{P}(\overline{H} | C) \mathbf{P}(C)}{\mathbf{P}(\overline{H})}=\frac{1 \cdot \frac{1}{n}}{\frac{n-1}{n}}=\frac{1}{n-1}$$
方案②的中奖的概率很容易计算:
$$\mathbf{P}_2=\frac{\text{方案①不中奖的概率}}{\text{剩余可选门的数量}}=\frac{1-\frac{1}{n-1}}{n-2}=\frac{1}{n-1}$$
可见,两种方案①②中奖的概率是相同的。
验证:
(*编程语言:Mathematica*)
(*为了更直接的表达编程思路,程序未做优化*)
n = 100000;(*随机模拟次数*)
k = 3;(*选项数量*)
options = Range[k];(*初始选项*)
sample = Flatten[{
#,(*正确选项*)
RandomSample[options](*你的选项,主持人的选项,剩余选项__*)
}] & /@ RandomInteger[{1, k}, n];(*样本*)
(* ====== 统计 ====== *)
(* -------- 保持原选择不变 -------- *)
Length[Cases[
sample, {right_, you_, host_, rest__} /;
right != host(*主持人选择错误*)&& right == you(*你选择正确*)]]/
Length[Cases[
sample, {right_, you_, host_, rest__} /;
right != host(*主持人选择错误*)]] // N
(* -------- 在剩余的选项中重新选择 -------- *)
Length[Cases[
sample, {right_, you_, host_, rest__} /;
right != host(*主持人选择错误*)&&
right == RandomChoice[Flatten[{rest}]](*你在剩余选项中随机选择,并且选择正确*)]]/
Length[Cases[
sample, {right_, you_, host_, rest__} /;
right != host(*主持人选择错误*)]] // N
1.2 情况2:主持人知道哪扇门后面有奖品,并选择无奖品的门打开
描述:假定有 n 扇门,只有一扇门后面有奖品,并且主持人(Host)知道奖品在哪扇门后面。
当参赛者(Contestant),随机选择一扇门后,主持人会在剩下的 n−1 扇门中选择一扇无奖品的门打开,然后给参赛者重新选择的机会。
问题:此时,参赛者有两种方案可选:①保持原选择不变,②在剩下的 n−2 扇门中随机选择一扇门,问哪一种方案中奖的机会更大。
根据题意,容易得到以下结论:
主持人中奖的概率:$\mathbf{P}(H)=0$,则主持人未选中有奖品的门的概率:$\mathbf{P}(\overline{H})=1$,此处与1.1节不同
参赛者中奖的概率:$\mathbf{P}(C)=\frac{1}{n}$
参赛者中奖时,主持人不中奖的概率:$\mathbf{P}(\overline{H} | \mbox{C})=1$
根据条件概率公式和乘法公式,方案①的中奖的概率为:
$$\mathbf{P}_1 = \mathbf{P}(C | \overline{H}) = \frac{\mathbf{P}(C \overline{H})}{\mathbf{P}(\overline{H})} = \frac{\mathbf{P}(\overline{H} | C) \mathbf{P}(C)}{\mathbf{P}(\overline{H})} = \frac{1 \cdot \frac{1}{n}}{1} = \frac{1}{n}$$
方案②的中奖的概率很容易计算:
$$\mathbf{P}_2=\frac{\text{方案①不中奖的概率}}{\text{剩余可选门的数量}}=\frac{1-\frac{1}{n}}{n-2}=\frac{n-1}{n \cdot (n-2)}$$
可见,两种方案①②中奖的概率是相同的。
验证:
(*编程语言:Mathematica*)
(*为了更直接的表达编程思路,程序未做优化*)
n = 100000;(*随机模拟次数*)
k = 3;(*选项数量*)
options = Range[k];(*初始选项*)
sample = Flatten[{
#,(*正确选项*)
your = RandomChoice[options],(*你的选项*)
host = RandomChoice[Complement[options, {your, #}]],(*主持人的选项*)
RandomSample[Complement[options, {your, host}]](*剩余选项__*)
}] & /@ RandomInteger[{1, k}, n];(*样本*)
(* ====== 统计 ====== *)
(* -------- 保持原选择不变 -------- *)
Length[Cases[
sample, {right_, you_, host_, rest__} /;
right != host(*主持人选择错误*)&& right == you(*你选择正确*)]]/
Length[Cases[
sample, {right_, you_, host_, rest__} /;
right != host(*主持人选择错误*)]] // N
(* -------- 在剩余的选项中重新选择 -------- *)
Length[Cases[
sample, {right_, you_, host_, rest__} /;
right != host(*主持人选择错误*)&&
right == RandomChoice[Flatten[{rest}]](*你选择正确*)]]/
Length[Cases[
sample, {right_, you_, host_, rest__} /;
right != host(*主持人选择错误*)]] // N
- 如果主持人不知道哪扇门后面有奖品,并随机选择一扇门打开,那么参赛是否重新选择,其中奖概率都是$\frac{1}{3}$。
- 如果主持人知道哪扇门后面有奖品,并选择无奖品的门打开,给参赛者重新选择的机会。那么参赛者应该在剩下的门中重新选择,中奖概率由$\frac{1}{3}$上升到$\frac{2}{3}$。
乍看蒙提霍尔问题,很容易作出错误的判断,但通过公式推导或编程模拟很容易发现问题的关键所在——主持人是否知道奖品在哪扇门后面以及其行为是否随机,这直接导致了不同的结果。
3. 程序附件
- 附件:蒙提霍尔问题[Monty Hall problem].nb.zip
注:文章头图来自网络。