三门两羊问题 - 蒙提霍尔问题

你可能在社交媒体或者数学爱好者的讨论中听说过"三门问题",个人觉得应该简单一点理解这个问题,不用看过多的公式。

什么是"三门问题"?

"三门问题"源自美国电视游戏节目《Let's Make a Deal》。问题描述如下:

  1. 你面前有三扇门,其中一扇门后面有一辆汽车,另外两扇门后面是山羊。
  2. 你先选择一扇门(假设你选了门 A)。
  3. 主持人(知道门后隐藏的内容)会打开另一扇门(假设是门 B),露出一只山羊。
  4. 此时,主持人问你:你要保持原来的选择(门 A)吗?还是换到剩下的门(门 C)?

问题来了:换门和不换门哪个更有可能赢?

直觉 vs. 数学

直觉上,很多人认为剩下两扇门各有 50% 的概率,换不换都样。但概率论告诉我们,这种直觉是错的。

如果不换门

如果不换门,主持人的变动不会影响选中汽车的概率,即 1/3,即1/总门数。

如果换门

关键在于将测算拆分为两个步骤:

1️⃣ 主持人打开门以前

  • 初始选择汽车的概率:1/3
  • 初始选择山羊的概率:2/3

2️⃣ 主持人打开门以后

相当于主持人会帮你排除一个错误答案,现在就只有两个答案

  • 如果你最初选中汽车(1/3 概率),那不管主持人排除哪个答案,只要换门,都只会选中🐑,不会选中汽车,那选中汽车的概率就是0
  • 如果你最初选中山羊(2/3 概率),主持人会打开另一扇山羊门,只要换门,必定选中🚗,此时选中汽车的概率就是1

所以换门以后测算的概率应

P(换门获胜)=P(初始选山羊)×P(换门获胜∣初始选山羊)+P(初始选汽车)×P(换门获胜∣初始选汽车)P(\text{换门获胜}) = P(\text{初始选山羊}) \times P(\text{换门获胜} \mid \text{初始选山羊}) + P(\text{初始选汽车}) \times P(\text{换门获胜} \mid \text{初始选汽车})P(换门获胜)=P(初始选山羊)×P(换门获胜∣初始选山羊)+P(初始选汽车)×P(换门获胜∣初始选汽车)

代入数值:
P(换门获胜)=23×1+13×0=23 P(\text{换门获胜}) = \frac{2}{3} \times 1 + \frac{1}{3} \times 0 = \frac{2}{3} P(换门获胜)=32×1+31×0=32

所以:

策略 赢的概率
不换门 1/3
换门 2/3

为什么直觉会错?

直觉认为"剩两扇门,各 50%"是错的,因为忽略了主持人的信息偏向性:

  • 主持人总是选择一扇有山羊的门打开,这并不是随机事件
  • 初始选择中未中汽车的概率较大(2/3),主持人的操作实际上增加了剩下那扇门的价值

所以换门策略选中的概率计算公式为:
P(换门获胜)=23×1+13×0=23 P(\text{换门获胜}) = \frac{2}{3} \times 1 + \frac{1}{3} \times 0 = \frac{2}{3} P(换门获胜)=32×1+31×0=32

同样如果,门数为doordoordoor,公式也可以拓展为:
P(换门获胜)=door−1door×1door−2+1door×0 P(\text{换门获胜}) = \frac{door - 1}{door} \times \frac{1}{door -2} + \frac{1}{door} \times 0 P(换门获胜)=doordoor−1×door−21+door1×0

python代码测算,含循环测试和公式直接输出结果的代码

python 复制代码
import random


def fun(switch: bool, door: int, times=1000000, log=False):
    """
    switch: boolean, 是否需要更换门
    door: 门的个数
    times: 测试次数
    log: 是否打印每一轮的日志
    """
    correct, wrong = 0, 0
    for i in range(times):
        answer = random.randint(0, door - 1)
        options = set(range(door))
        guess = random.randint(0, door - 1)

        info = f'\t[info_{i}] 答案是{answer},猜的是{guess}。'
        if switch:
            val = random.choice(list(options.difference({guess, answer})))
            guess = random.choice(list(options.difference({val, guess})))
            info += f'主持人打开{val}, 猜测修改为{guess}。'

        if answer == guess:
            correct += 1
            info += '猜测正确'
        else:
            wrong += 1
            info += '猜测错误'
        if log:
            print(info)
    print(f"共{door}门, {'' if switch else '不'}换门, 统计正确率为{(correct / (correct + wrong)):.4%}", )


if __name__ == '__main__':
    door = 3

    # 先测一个转换的
    fun(False, door=door)
    # 再测一个不转换的
    fun(True, door=door)
    # 使用统计概率直接计算
    print(f"\n直接使用统计概率计算:\n"
          f"\t不转换的计算公式: 1 / {door} = {1 / door :.4%}\n"
          f"\t需转换的计算公式: (1 / {door}) * 0  + ({door - 1} / {door}) * (1 / {door - 2}) = {((door - 1) / door) * (1 / (door - 2)) :.4%}")

实际启示

  • 概率和直觉常常相反:遇到概率问题时,不要单靠感觉,要分析整个事件过程
  • 信息的来源与偏向:主持人的行为提供了额外信息,这是经典条件概率案例
  • 生活中的换门策略:遇到类似"选择与信息更新"的情境,换门或调整决策往往是更优解

总结

"三门问题"不仅是一个有趣的概率谜题,它还教会我们如何用逻辑和数学分析复杂决策。拆分测算步骤、结合信息更新的思路,是理解概率和理性决策的关键。

相关推荐
装不满的克莱因瓶22 分钟前
链式法则如何传递参数误差 —— 深入理解神经网络中的梯度传播
人工智能·python·深度学习·神经网络·数学·机器学习·ai
Anastasiozzzz22 分钟前
从有限状态机到智能体图:传统 FSM 与 Agent Graph的演进
java·人工智能·python·ai
biter down6 小时前
从 0 到 1 搭建 Python 接口自动化测试框架(博客系统实战)
开发语言·python
肖永威8 小时前
Python多业务并行计算框架插件化演进:从硬编码到动态注册
python·插件化·并行计算·动态注册
yz_aiks8 小时前
Linux Jar包配置Systemd自启动实战:从排查到配置全流程
linux·python·jar·自启动·systemd
不知名的老吴8 小时前
线程的生命周期之线程“插队“
java·开发语言·python
xsc6996759 小时前
从零搭建大模型与智能体平台 - 完整技术详解
python
无风听海10 小时前
多租户系统中的 OIDC:Discovery 端点与联合登录的深度实践
后端·python·flask
CTA终结者11 小时前
期货量化主力换月程序怎么移仓:天勤 underlying_symbol 与任务切换
python·区块链
马士兵教育11 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习