三门问题,也叫蒙提霍尔问题(Monty Hall Problem)
以电视节目 - Let's make a deal的主持人蒙提霍命名的一个反直觉问题。
游戏简介
假设有3个门。 其中一个后面藏着宝藏,其余2个都是空门(美国节目中1个后面有汽车,其余的2个是山羊)。
游戏开始:
首先你先选择一张门,
选好后,主持人帮你在其余2扇没有被选择的门中打开一扇没奖的门。
这时候你有一个选择权, 换门还是不换门?
直觉上换不换几率都是50%,那到底几率是多少? 换是不是得奖的机会大一些?
可以用代码来模拟一遍。python
编程就是一步一步来,当然有时候要想清楚直接到达想要到的地方。
第一遍我们就用一步步来的方法走一遍吧。 (代码一部分借鉴了哈佛的CS109)
首先我们先定义下 有3扇门,其中奖品在某一扇门中。
首先安装下 numpy库
1.这个可以用 random.randint来实现。 randint(start, end, size) 随机选择的3个门中间的一个
1 def simulate_prizedoor(nsim): 2 return np.random.randint(0, 3, (nsim))
2.然后我们可以定义下,一开始选择的一扇门。 这里可以用固定选择法,也可以用随机法,数据大的情况下差别不大。这里我们直接用了固定选择第一扇门(0)
1 def simulate_guess(nsim): 2 return np.zeros(nsim, dtype=np.int)
3.然后我们 模拟主持人,开一扇没有奖品的门。
1 def goat_door(prizedoors, guesses): 2 result = np.random.randint(0, 3