← 返回栏目

三门问题,换门为何更容易赢?

三扇门里藏着一辆汽车,你选一扇,主持人再打开一扇露出山羊。只剩两扇门,胜率就各半了吗?1975年,统计学家Selvin把这个问题写进期刊;1990年,vos Savant建议换门,又引发争论。答案藏在主持人的规则里:我们用十万局模拟说明换门为何能赢三分之二,也追问规则改变后,答案为何随之改变。

三门问题的开门示意,一扇门打开后,参与者需要在剩余两扇关闭的门之间选择

从期刊来信到专栏争论

1975年2月,Steve Selvin在《The American Statistician》发表来信《A Problem in Probability》。在同年8月的后续来信中,他回应了质疑,并明确说明:主持人知道奖品在哪里;如果有两个空盒可开,就随机选择一个。本文读到的是这封后续来信的第三方摘录,尚未比对两封来信的出版商扫描件。Selvin来信摘录

1990年,这个问题进入更广泛的公共讨论。Richard D. Gill的研究论文记载,9月9日,Marilyn vos Savant在《Parade》的“Ask Marilyn”栏目回答读者Craig Whitaker:应该换门。她的回答引发了争论。这里的日期及栏目信息据Gill转引,未声称核对过当期原刊。Gill论文

争论的一部分来自直觉:既然剩下两扇门,就该一半对一半。另一部分则来自建模:题目究竟承诺主持人做什么?数学题借用了蒙提霍尔的名字,但计算的规则需要单独说明,不能直接当成电视节目真实流程。

换门赢在最初选错的两次

先固定规则:汽车等概率藏在三扇门之一;你的初选与藏车位置独立;主持人知道车的位置,总会从你没选的门中打开一扇羊门,并总给你换到另一扇关闭门的机会。

假设你先选1号门,三种藏车位置就足以把结果说清楚:

汽车位置 初选结果 坚持 换门
1号门 选中车 赢 输
2号门 选中羊 输 赢
3号门 选中羊 输 赢

每行概率都是1/3。初选中车时,换门会失去车;初选中羊时,主持人必须避开车,留下的另一扇关闭门就是车。因此,始终换门的总体胜率是2/3,坚持则是1/3。

这个总体结论不要求主持人在两扇羊门之间等概率选择。可是,“始终换门能赢多少局”与“已经看到主持人打开3号门,此刻换门的胜率是多少”是两个问题。后者还会用到主持人偏好开哪扇门的信息。Gill论文,第2.1节

主持人的规则改变后验

固定初选1号门,观察到主持人打开3号门、露出山羊。贝叶斯计算要问的是:假如车在不同位置,这个观察各有多容易发生?

仍假设主持人知情、总开羊门并总允许换门。设q为车在1号门时,主持人选择开3号门的概率。车分别在1、2、3号门时,观察到开3号羊门的概率依次是q、1、0。乘上相同的先验概率1/3,再归一化,得到:

P(车在2号门|初选1、开3号羊门)=1/(1+q)。

如果主持人可选时抛公平硬币,q=1/2,换门胜率就是2/3;如果他可选时总开3号门,q=1,此刻两扇门各有1/2;如果他可选时从不开3号门,q=0,那么看到他开3号门,就能确定车在2号门。这些条件概率的变化不推翻上一节的总体胜率。Gill论文中的似然与后验赔率推导

再换一种机制:主持人不知道车在哪,随机打开你没选的一扇门,只保留恰好开出羊的局。初选中车且开羊的概率是1/3;初选中羊且开出另一只羊的概率是(2/3)×(1/2)=1/3。在保留下来的局里,两类各占一半,换与不换胜率都是1/2。这里的分母是保留局数,不能与上一节的全部局数混用。

还可以构造更极端的反例:主持人只在你初选中车时邀请换门。收到邀请本身就透露了信息,此时换门必输。这是为说明规则作用而设的假想机制。若主持人类型未知,就需要为各种类型指定先验,并计算观察在各类型下的似然;“不知道”本身不能自动替代这些设定。

十万局模拟中的胜率收敛

按知情主持人的标准规则,使用Python实际运行100,000局,随机种子为20261019。每局同时记录坚持和换门的结果:坚持获胜33,404局,胜率33.404%;换门获胜66,596局,胜率66.596%。程序逐局确认两种策略恰有一个获胜。

下面是可复现的模拟核心;横轴取累计局数,分别画出两列累计胜率,就得到收敛图的数据。

import random

rng = random.Random(20261019)
n = 100_000
stay = switch = 0
rows = []
for k in range(1, n + 1):
    car = rng.randrange(3)
    pick = rng.randrange(3)
    opened = rng.choice([
        d for d in range(3)
        if d != pick and d != car
    ])
    other = next(
        d for d in range(3)
        if d != pick and d != opened
    )
    a = int(pick == car)
    b = int(other == car)
    assert a + b == 1
    stay += a
    switch += b
    rows.append((k, stay / k, switch / k))
print(stay, switch)

前几局可能出现很大的偏离,累计局数增加后,曲线逐渐靠近1/3和2/3。模拟展示的是这些设定下的长期频率;理论概率来自规则与推导,模拟也不能证明现实主持人遵守同样规则。面对只剩两个选项的情境,值得先追问的,是另一个选项如何被排除。

横轴为累计模拟局数,两条胜率曲线分别趋近三分之二与三分之一

参考文献

  1. Selvin, S.(1975年2月). A Problem in Probability. The American Statistician, 29(1). JSTOR书目入口。首封原文未读取;本文关于其发表及题名的说明据后续来信回指。

  2. Selvin, S.(1975年8月). On the Monty Hall Problem. The American Statistician, 29(3). 本文实际读取的第三方原文摘录,未比对出版商扫描件;网页题名存在拼写错误。

  3. Gill, R. D.(2011). The Monty Hall Problem is not a Probability Puzzle (it's a challenge in mathematical modelling). Statistica Neerlandica, 65(1), 58–71. arXiv全文v4;预印本首次提交2010年2月3日,所读v4更新于2023年5月1日。1990年9月9日的专栏信息据本文转引。

  4. 选题线索为Towards Data Science的《Inferring the Host: A Bayesian Look at the Monty Hall Problem》。该页本次未能读取,所给2026年10月18日日期未独立核验,未将其内容作为本文事实依据。

  5. 题图:Joaquín Córdova,Wikimedia Commons原始页面,CC BY-SA 4.0,原图导入。

  6. 研究方法 · 仪式可以模仿,理解无法伪装

  7. 信息由 Scholay 学术一站式平台 整理并发表,如有侵权请反馈下架。

  8. 信息同步发表于恩特学术,智能时代的学者社区