← 返回文章列表

蒙提霍尔问题

直觉陷阱、数学推导与百万次计算机模拟

针对经典的“三门问题”(蒙提霍尔悖论)进行贝叶斯条件概率严密推导,并结合百万次 Python 蒙特卡洛随机模拟进行理论验证。彻底澄清换门策略获得 2/3 胜率背后的信息论机制,剖析日常直觉在面对主持人排除动作时的认知陷阱。

人类的大脑在漫长的进化史中,主要是为了在稀树草原上追逐猎物和躲避猛兽而设计的——这直接导致我们在面对“条件概率”时,直觉常常像刚学会走路的企鹅一样笨拙。

蒙提霍尔问题(三门问题)就是这样一个把无数数学教授和学者按在地上摩擦的经典案例。当年甚至有近千名拥有博士学位的读者联名写信,痛斥给出正确答案的专栏作家“缺乏基本常识”。

面对这类“理论推导清晰但直觉极其容易翻车”的经典悖论,最硬核的破解方法就是抛开直觉偏见,左手拿贝叶斯公式严格推导,右手用计算机写一段蒙特卡洛仿真代码,让百万次随机实验说话。


0. 什么是蒙提霍尔问题?

蒙提霍尔问题(Monty Hall problem),亦称蒙特霍问题或三门问题,是一个源自美国电视游戏节目 Let’s Make a Deal(主持人名为 Monty Hall)的经典概率谜题。

在排除了故事背景等无关干扰后,我们可以将该问题的标准场景提取如下:

问题描述:
假设你正在参加一个游戏节目,面前有三扇关闭的门(标号为 $1, 2, 3$):

  • 其中一扇门后面停着一辆崭新的汽车;
  • 其余两扇门后面各藏着一只山羊。

游戏流程如下:

  1. 你在三扇门中随机选择一扇(假设你选了 1 号门),此时这扇门保持关闭。
  2. 关键规则:主持人知道每扇门后面的真实情况。他在剩下的两扇门(2 号和 3 号)中,打开了一扇后面必定是山羊的门(假设打开了 3 号门)。
  3. 此时,场上只剩下你选的 1 号门和未打开的 2 号门。
  4. 主持人问你:“你是否要改变最初的选择,换成 2 号门?”

核心疑问:此时换门是否能提高你猜中汽车的概率?


1. 直觉陷阱:为什么绝大多数人会直觉判断 50:50?

当第一次听到这个问题时,绝大多数人的第一直觉通常是:

“三扇门被排除了一扇羊门,剩下两扇门里有一辆车和一只羊。那车在 1 号门还是 2 号门,概率不都是 $50\%$ 吗?换与不换有什么区别?”

当年著名的专栏作家玛丽莲·沃斯·莎凡特(Marilyn vos Savant)在杂志上给出“必须换门,换门中奖概率为 $2/3$”的解答后,甚至收到了成千上万封来自大学教授、数学博士的抗议信,指责她犯了低级概率错误。

为什么直觉会欺骗我们?

因为我们的大脑习惯把两扇门视作无记忆、相互独立且对称的同质选项。但在这个游戏中,主持人并不是盲选开门,而是拥有“全知视角”的过滤者:

初始选择情况发生概率主持人动作与开门限制坚持不换策略换门策略(Switch)
初始选对汽车$1/3$随机打开剩余两扇羊门之一获得汽车(赢)获得山羊(输)
初始选错山羊$2/3$被规则逼迫,只能打开另一扇羊门获得山羊(输)精准锁定汽车(赢!)
  • 你最初选门时,选中汽车的概率是 $\frac{1}{3}$,选错(选到山羊)的概率是 $\frac{2}{3}$。
  • 如果你一开始选了山羊(概率高达 $\frac{2}{3}$),剩下的两扇门里必然是一车一羊,主持人被规则限制,只能强行帮你翻出那只唯一的羊,从而精准暴露了另一扇门背后的汽车!
  • 因此,只要你初始选了羊,“换门”就必定能拿到车。换门猜中车的概率直接继承了你初始选错的概率($\frac{2}{3}$)。

2. 形式化数学推导(贝叶斯公式)

为了消除任何文字上的歧义,我们给出基于贝叶斯定理(Bayes’ Theorem)的严格形式化证明。

2.1 事件定义

设 $C_i$ 表示汽车在 $i$ 号门后面($i \in \{1, 2, 3\}$),先验概率为均等分布:

$$ P(C_1) = P(C_2) = P(C_3) = \frac{1}{3} $$

不失一般性,假设参赛者初始选择了 1 号门。设 $O_k$ 表示主持人打开了 $k$ 号门($k \in \{2, 3\}$)。

2.2 主持人开门的条件概率

根据游戏规则,主持人不能打开参赛者选择的门(1 号门),也不能打开有汽车的门:

  1. 若汽车在 1 号门($C_1$ 发生):2 号门和 3 号门后都是山羊,主持人可以等概率随机打开一扇: $$P(O_3 \mid C_1) = \frac{1}{2}, \quad P(O_2 \mid C_1) = \frac{1}{2}$$
  2. 若汽车在 2 号门($C_2$ 发生):主持人不能开 1 号门(玩家选了),也不能开 2 号门(有车),因此必须且只能打开 3 号门: $$P(O_3 \mid C_2) = 1, \quad P(O_2 \mid C_2) = 0$$
  3. 若汽车在 3 号门($C_3$ 发生):主持人绝不能打开 3 号门: $$P(O_3 \mid C_3) = 0, \quad P(O_2 \mid C_3) = 1$$

2.3 全概率公式与后验概率计算

假设主持人实际打开了 3 号门(即观察到事件 $O_3$),由全概率公式可得 $O_3$ 的边缘概率:

$$ \begin{aligned} P(O_3) &= \sum_{i=1}^3 P(C_i) \cdot P(O_3 \mid C_i) \\ &= P(C_1) P(O_3 \mid C_1) + P(C_2) P(O_3 \mid C_2) + P(C_3) P(O_3 \mid C_3) \\ &= \frac{1}{3} \times \frac{1}{2} + \frac{1}{3} \times 1 + \frac{1}{3} \times 0 \\ &= \frac{1}{6} + \frac{1}{3} + 0 = \frac{1}{2} \end{aligned} $$

利用贝叶斯公式,计算在主持人打开 3 号门的前提下,汽车在各扇门后的后验概率:

  • 不换门(坚持 1 号门)猜中汽车的概率: $$P(C_1 \mid O_3) = \frac{P(C_1) \cdot P(O_3 \mid C_1)}{P(O_3)} = \frac{\frac{1}{3} \times \frac{1}{2}}{\frac{1}{2}} = \frac{1}{3}$$
  • 换门(换选 2 号门)猜中汽车的概率: $$P(C_2 \mid O_3) = \frac{P(C_2) \cdot P(O_3 \mid C_2)}{P(O_3)} = \frac{\frac{1}{3} \times 1}{\frac{1}{2}} = \frac{2}{3}$$

数学推导结论:
换门猜中汽车的胜率是不换门的两倍($66.7\%$ vs $33.3\%$),因此应当坚决选择换门。


3. 计算机代码实现(Python 向量化模拟)

利用 Python 与 NumPy 进行矩阵级向量化的高性能蒙特卡洛模拟,百万次模拟仅需数十毫秒:

import numpy as np
import pandas as pd

def simulate_monty_hall(n_trials: int = 1_000_000, seed: int = 42):
    """
    蒙提霍尔三门问题 - 蒙特卡洛向量化模拟
    """
    np.random.seed(seed)
    
    # 随机生成汽车位置和玩家初始选择 (0, 1, 2)
    car = np.random.randint(0, 3, size=n_trials)
    initial_choice = np.random.randint(0, 3, size=n_trials)
    
    # 核心逻辑:
    # 1. 不换门:只有初始选对时才获胜(概率 1/3)
    win_not_change = (initial_choice == car)
    
    # 2. 换门:由于主持人必定排除一只羊,只要初始选错了,换门必选中车!(概率 2/3)
    win_change = (initial_choice != car)
    
    return {
        "试验次数": f"{n_trials:,}",
        "换门成功率": round(float(np.mean(win_change)), 5),
        "不换门成功率": round(float(np.mean(win_not_change)), 5)
    }

# 对比不同试验规模 (1k, 10k, 100k, 1000k)
scales = [1_000, 10_000, 100_000, 1_000_000]
df_results = pd.DataFrame([simulate_monty_hall(n) for n in scales])
print(df_results.to_markdown(index=False))

4. 实验结果与大数定律验证

我们在不同试验量级($1,000$ 到 $1,000,000$ 次)下运行上述程序,统计结果如下表所示:

试验次数 ($N$)换门猜中概率 ($hat{p}_{\text{change}}$)不换门猜中概率 ($hat{p}_{\text{not\_change}}$)理论期望值比对
1,0000.676000.32400粗略逼近 $\approx 2/3$ 与 $1/3$
10,0000.672600.32740误差缩小至 $< 0.6\%$
100,0000.665290.33471误差缩小至 $< 0.15\%$
1,000,0000.666390.33361高度收敛于 $2/3 \ (66.67\%$ 与 $1/3 \ (33.33\%)$

根据辛钦大数定律(Khinchin’s Law of Large Numbers),随着试验次数 $N \to \infty$,样本均值以概率 1 收敛于理论期望值。百万次计算机仿真结果与贝叶斯推导完全一致。


5. 深度复盘与认知升级

蒙提霍尔问题之所以能够穿越数十年依然被津津乐道,不仅在于它精巧的数学结构,更在于它为工程实践与决策科学提供了深刻的隐喻:

5.1 信息的本质是“消除不确定性(负熵)”

许多人之所以执着于 50:50,是因为误以为主持人的动作只是一个“物理开门”。但事实上,主持人的开门行为是一个非随机的约束传播过程。他掌握全部信息,且被规则剥夺了打开车门的自由。这种受限的行为将原本分散在剩余两扇门上的概率质量,全量压缩到了未被打开的那扇门上。信息是有价值的,它直接打破了物理世界的对称性。

5.2 决策者的理性:拥抱迭代,拒绝锚定

在现实商业竞争与个人抉择中,我们往往如同那个最初选了 1 号门的参赛者。很多人即便看到了外界环境发生了重大变化(主持人开门排除了一个错误选项),依然出于对初始选择的情感执念(锚定效应与承诺升级)而拒绝改变。

真正的理性决策者明白:当系统注入了新的信息、为你排除了已知地雷时,果断调整最初的预设并选择“换门”,才是期望收益最大化的科学姿态。

5.3 善假于算力:用仿真击穿直觉迷雾

人类大脑的“快思考系统”天生容易被同质化的表面现象蒙蔽。当我们面临充满争议的概率陷阱、复杂的业务分支或反直觉的策略评估时,不要停留在主观辩论上。建立数学模型、编写向量化脚本,用成百万次的蒙特卡洛仿真让大数定律给出判决,是工程师最可靠的破局底气。