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

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

⸻

什么是"三门问题"?

"三门问题"源自美国电视游戏节目《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%}")

实际启示

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

⸻

总结

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

相关推荐
終不似少年遊*6 小时前
【AI Coding实战方法论】从计划协作到架构护栏,一套能长期复用的工程流程
人工智能·python·团队开发·ai编程·ai coding·skills·上下文管理
lusklusklusk6 小时前
Python 全局变量与局部变量区别——global 关键字、__main__ 块与作用域示例
开发语言·前端·python
马剑威(威哥爱编程)6 小时前
Python 智能体开发实战 01:装了三遍环境还在报错?虚拟环境和 DeepSeek 一次配到位
开发语言·人工智能·python·agent
卷无止境6 小时前
Skill 的安全边界在哪里:风险来源、验证思路与用户可用的防线
后端·python
TomEval7 小时前
【测AI】第22篇:Agent 系统测试方法 — AI 学会“动手“了
人工智能·python·prompt·aigc·测试用例
速易达网络7 小时前
如何“训练”一个 .task 模型
python
PiaoKe___7 小时前
云手机技术解析:从 ARM 虚拟化到 Python 自动化实战
python·智能手机·自动化
学习论之费曼学习法7 小时前
无人值守AI内容矩阵实战(10):Windows 上让 Python 进程 7×24 活着
人工智能·windows·python·矩阵·powershell·进程守护
Norna8 小时前
锁文件里明明有哈希,PDM 为什么说没有?
python
大侠在此在在此8 小时前
我花了不到1块钱,用python把自己一年的1500次会话做成了个人知识库
python·llm