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

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

什么是"三门问题"?

"三门问题"源自美国电视游戏节目《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 小时前
CANN asnumpy 深度解析:NPU 原生 NumPy 的使用指南
人工智能·python·numpy
qingfeng154156 小时前
企业微信 API 自动化开发指南:从消息回调到智能运营实战
java·开发语言·python·自动化·企业微信
Just Jump6 小时前
tornado高性能高并发API服务网关
python·tornado·高并发api服务
晚霞的不甘6 小时前
CANN-MoE模型推理加速实战
人工智能·分布式·python
小新同学^O^6 小时前
简单学习 --> LangChain
python·学习·langchain
麻雀飞吧6 小时前
期货历史行情与实时数据一体化:主流平台维护负担对照
python
前端若水6 小时前
【无标题】
java·人工智能·python·机器学习