Table of Contents
Suppose you’re on a game show, and you’re given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, who knows what’s behind the doors, opens another door, say No. 3, which has a goat. He then says to you, “Do you want to pick door No. 2?” Is it to your advantage to switch your choice?1
#
如果说你更喜欢羊
这是个经典的游戏:游戏参与者面对三扇门,其中两扇门后面是山羊,一扇门后面是跑车。参与者只 要随便选一扇门,门后面的东西就归他(跑车的价值当然更大)。但是主持人决定帮一下参与者:在 他选择之后,先不急着打开这扇门,而是由主持人打开剩下两扇门中的一扇,展示其中的山羊(主持 人知道每扇门后面是什么),然后给参与者一次换门的机会,此时参与者应该换门还是不换门呢?
为了防止第一次看到这个问题的读者迷惑,再具体描述一下这个问题:
你是游戏参与者,现在有门 1,2,3,假设你随机选择了门 1,然后主持人打开了门 3 告诉你那后面 是山羊。现在,你是坚持你最初的选择门 1,还是选择换成门 2 呢?
这个问题被称为“蒙提霍尔问题”(Monty Hall Problem),是一道经典的概率题。直觉上,很多人会 认为换门与否的获得跑车机会是对半的,但实际上,换门可以显著提高获得跑车的概率。
#
那么请你不要换门
根据游戏规则:你第一次选中的门有跑车的概率是 1/3,选到山羊的概率是 2/3。主持人会打开一扇 剩下的门,并且那扇门一定是一只山羊。因此,如果你最初选中的是一只山羊(概率为 2/3),换门 后一定会选中跑车。如果你最初选中的是跑车(概率为 1/3),换门后会选中山羊。
通过换门,获得跑车的概率从 1/3 提升到了 2/3。
上图是假设参赛者初始选择一号门的所有情况,样本空间共包括4种可能的结果。
#
习惯性附上代码
import random
def monty_hall_simulation(num_trials=10000):
switch_wins = 0
stay_wins = 0
for _ in range(num_trials):
# 随机选择哪扇门后面有跑车
doors = [0, 0, 1] # 0 表示山羊,1 表示跑车
random.shuffle(doors)
# 参与者随机选择一扇门
initial_choice = random.randint(0, 2)
# 主持人打开一扇山羊的门
available_doors = [i for i in range(3) if i != initial_choice and doors[i] == 0]
host_opens = random.choice(available_doors)
# 模拟换门
switch_choice = [i for i in range(3) if i != initial_choice and i != host_opens][0]
# 如果换门后是跑车,增加换门获胜次数
if doors[switch_choice] == 1:
switch_wins += 1
# 如果不换门,直接判断原选择是否跑车
if doors[initial_choice] == 1:
stay_wins += 1
# 输出结果
print("模拟结果:")
print(f"换门获胜的概率: {switch_wins=} / {num_trials=} ≈ {switch_wins / num_trials:.2f}")
print(f"不换门获胜的概率: {stay_wins=} / {num_trials=} ≈ {stay_wins / num_trials:.2f}")
#运行模拟
monty_hall_simulation()
#
模拟的不算数?有请贝叶斯法则
When the facts change, I change my mind. What do you do, sir?2
##
问题回顾和贝叶斯建模求解
- 有 3 扇门,其中 1 扇门后面是跑车,另外 2 扇门后面是山羊。
- 你选择了一号门后,主持人会打开另外两扇门中有山羊的一扇门。
- 在这种情况下,你有一次换门的机会以获得更高价值的奖品,问题是是否应该换门。
贝叶斯法则(或贝叶斯定理)是一个公式,用来描述在给定证据(E)的情况下,如何更新假设(H) 是正确的的概率。
在这个例子中,它描述的是在主持人打开了一扇门,显示是山羊后,更新我们最初选择的门后面有车 的概率(也就是坚持最初选择是正确的概率)。假设 H 是“1号门后面有车”的假设,E 是主持人展示 了一扇门后面是山羊的证据。那么,这个问题可以重新表述为计算 P(H∣E),即在给定 E 的情况下, H 成立的条件概率。
$$ P(H|E) = \frac{P(E|H) \cdot P(H)}{P(E)} = \frac{P(E|H) \cdot P(H)}{P(E|H) \cdot P(H) + P(E|notH) \cdot P(notH)} $$
其中,
- $P(H)$ 是“1号门后面有车”的先验概率,也就是开始时的三选一情况,这个概率等于$1/3$。
- $P(notH)$ 是“1号门后面有车”的互斥事件,也就是说这个概率等于$1 - 1/3 = 2/3$。
- $P(E|H)$ 是给定1号门后面有车的情况下,主持人打开一扇后面有羊的门的概率。然而主持人一定 打开后面有羊的门,所以这个概率是$1$。
- $P(E|notH)$ 是给定1号门后面是羊的情况下,主持人打开一扇后面有羊的门的概率。然而主持人 一定打开后面有羊的门,所以这个概率是$1$。
综上所述,有:
$$ P(H|E) = \frac{1 \times 1/3}{1 \times 1/3 + 1 \times 2/3} = 1/3 $$
也就是说,“1号门后面有车”的概率,完全不受到主持人开门事件的影响。但是,鉴于跑车要么在你 选择的门后面,要么在尚未打开的另一扇门,则后者的概率变成了 $2/3$。所以,如果选择换门则得 到跑车的概率翻倍。
#
变体问题
如果主持人是随机打开一扇门呢?3(也就是说:如果随机打开的门后是跑车,游戏结束;否则游戏继续)