蒙提霍尔问题出自美国的电视游戏节目Let's Make a Deal,游戏的规则是:三扇关闭的门供参赛者选择,其中一扇门后面是汽车,其余两扇是山羊,当参赛者选定一扇门,但未去开启它的时候,主持人开启剩下两扇门的其中一扇,露出其中一只山羊。此时参赛者可以更换另一扇仍然关上的门。问:换另一扇门会否增加参赛者赢得汽车的机率?
最早接触蒙提霍尔问题是从电影《决胜21点》中看到的,前几天在看《悖论》,正好发现其中有一章节讲的就是蒙提霍尔问题,结合书中的思路,下面我从概率学的角度来解答这个问题,并用一个python程序,来验证结论是否正确。(游戏规则不多述,读者可参考上文引言)
概率学
- 假设一位参赛者选择1号门,则1号门后是汽车的概率是 1/3,2号或3号门后是汽车的概率是 2/3(也就是说,2号门后是汽车的概率加上3号门后是汽车的概率的和是2/3,即 P(2) + P(3) = 2/3)
- 此时主持人将2号门打开,露出一只山羊,说明2号门后面不是汽车,则2号门后是汽车的概率是 0,即 P(2) = 0
- 由1和2可知,P(2) + P(3) = 2/3,P(2) = 0,所以很容易得出,P(3) = 2/3
- P(1) = 1/3,P(3) = 2/3,我想到底应不应该从1号门换成3号门就不用多说了吧,换成3号门可是整整多两倍的概率中奖呀
Python程序验证
程序
# -*- coding: utf-8 -*-
#!/usr/bin/python
import matplotlib.pyplot as plt
import random
import pygal
class three_door():
car_door = ''
play_first_choice = ''
play_second_choice = ''
def __init__(self, change=0):
#是否更换选择
self.change = change
#初始化三扇门
self.door = ['A','B','C']
#随机分配门后的东西
def allocation_car(self):
key = random.choice(self.door)
self.__class__.car_door = key
#参赛者选择
def player_choice(self):
key = random.choice(self.door)
self.__class__.play_first_choice = key
#主持人开门
def compere_open(self):
L1 = self.door.copy()
L1.remove(self.__class__.play_first_choice)
if self.__class__.car_door in L1:
self.__class__.play_second_choice = self.__class__.car_door
else:
self.__class__.play_second_choice = random.choice(L1)
def check_car(self):
self.allocation_car()
self.player_choice()
self.compere_open()
play_choice = self.__class__.play_second_choice if self.change else self.__class__.play_first_choice
if play_choice == self.__class__.car_door:
return 1
else:
return 0
#试验10000次
num = 10000
#默认不更换选择
obj = three_door()
result = []
results = []
for i in list(range(1,num)):
is_car = obj.check_car()
result.append(is_car)
for value in [0,1]:
count = result.count(value)
results.append(count)
#调节图形大小,宽,高
plt.figure(figsize=(9,9))
#定义饼状图的标签,标签是列表
labels = [u'山羊',u'汽车']
#每个标签占多大,会自动去算百分比
sizes = [results[0],results[1]]
colors = ['yellowgreen','red']
#将某部分爆炸出来, 使用括号,将第一块分割出来,数值的大小是分割出来的与其他两块的间隙
explode = (0,0.05)
plt.pie(sizes,explode=explode,labels=labels,colors=colors,
labeldistance = 1.1,autopct = '%0.1f%%',shadow = False,
startangle = 90,pctdistance = 0.6)
plt.title('主持人开门后坚持不更换选择')
plt.show()
结论
从这两幅扇形图可以得出结论,更换选择赢得汽车的概率比坚持选择大得多,并且两者的概率接近于1/3,2/3,从而证明了我们上面的概率解答是没问题的
如果这篇文章对你有帮助,请点个赞哈,感谢