三门问题
背景
这是一个非常有名的问题,wiki。
简单说就是,有三扇门,一扇后面有奖,两扇后面有山羊。如果选手猜中有奖的门,就可以拿走奖品。 在选手做出选择之后,主持人(知道哪扇门后面有奖品)会选择选手没选的两扇中的一扇没有奖品的门打开。 这时候选手有一次改变自己选择的机会。
这时候,有人提出,选手改变选择能提高其获奖概率。起初这一观点遭到了强烈抨击。后来无数实验证明,这个观点是对的。 下面我们用 ebay 的一个开源库来证明一下,选手改变选择确实能提高其获奖概率。
实验
from bayesian.bbn import build_bbn
def f_prize_door(prize_door):
return 0.33333333
def f_guest_door(guest_door):
return 0.33333333
def f_monty_door(prize_door, guest_door, monty_door):
if prize_door == guest_door:
if prize_door == monty_door:
return 0
else:
return 0.5
else:
if prize_door == monty_door:
return 0
if guest_door == monty_door:
return 0
return 1
g = build_bbn(
f_prize_door,
f_guest_door,
f_monty_door,
domains=dict(
prize_door = ["A","B","C"],
guest_door = ["A","B","C"],
monty_door = ["A","B","C"]
)
)
然后我们运行一下,假设选手选了 A 门,而主持人打开了 B 门
python -i montyHall.py
g.q(guest_door="A", monty_door="B")
结果如下
+-------------+-------+----------+
| Node | Value | Marginal |
+-------------+-------+----------+
| guest_door | B | 0.000000 |
| guest_door | C | 0.000000 |
| guest_door* | A* | 1.000000 |
| monty_door | A | 0.000000 |
| monty_door | C | 0.000000 |
| monty_door* | B* | 1.000000 |
| prize_door | A | 0.333333 |
| prize_door | B | 0.000000 |
| prize_door | C | 0.666667 |
+-------------+-------+----------+
我们发现奖品在 A 门的概率只有在 C 门的一半。