硕大的汤姆

硕大的汤姆

The official website of Minhua Chen

23 Jul 2018

三门问题

背景

这是一个非常有名的问题,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 门的一半。