120110198602192452
摘要:“玛丽莲三门”问题困扰了无数人,甚至很多数学家都不能正确解决这个问题。本文将使用python程序,先模拟出三门问题的正确结果。然后将三门问题的逻辑解释清楚。最后将python代码展示并加解释。
关键词:python 玛丽莲三门
一、玛丽莲三门问题由来:
玛丽莲是美国专栏作家,智商高达228,吉尼斯纪录保持者。最具有争议的玛丽莲问题是“三门问题”(类似“非常6+1”中的翻牌):舞台上有三个门,一个门后是轿车,两个门后是山羊,选手可以选择其中一扇门。这时候主持人在另外两扇门中排除掉一个有山羊的门,舞台上还剩下两扇门,主持人问你要不要更换选项。
这时候很多人都坚信自己的感觉,选择不更换。但玛丽莲给出的答案是必须更换选项。当时很多的数学家对玛丽莲进行抨击,说玛丽莲仰仗自己的威望和高智商故意误导大众。最近甚至还有人把这个问题与量子力学扯上了关系。
二、使用计算机模拟玛丽莲问题的结果:
那么我们就用python在计算机中模拟一下这个游戏。
图1
如图1所示:我们设置了三个盒子,选中其中一个后不更换选项,将这个游戏重复1000次,结果是我们选对了362次,大约是1/3的正确率。我们再将选项调整一下选择更换选项看一下结果:
图2
如图2所示:我们选择更换选项中奖概率为650次,约2/3。我们将盒子数量增加至10个,然后选择“不更换”看一下运行的结果:
图3
如图3所示:我们在10个盒子中选定一个后,不更换选项,结果是我们中奖99次,正确率约为1/10。注:以上结果为随机结果,每次的模拟情况会略有差别。
我们反推,如果选择了更换选项,我们正确的概率为9/10。也就是说我们中奖的概率和盒子的总数有关系。这个结果是不是非常出乎很多人的意料。
三、玛丽莲问题的分析:
3.1 实际上只有两个选项:
我们来分析一下为什么是1/3。我们假设门的总数是3个分别是A、B、C,大奖在任何一扇门背后的概率都是1/3也就是说三扇门是相同的,我们随便选择一扇假设我们选择了A。这时候我们中奖的概率是1/3,主持人在BC中排除了一个假设排除了B,B中的山羊这时候可以去厨房了。主持人问我们要不要将答案换成C。因为在主持人排除选项之前我们中奖的概率是1/3,主持人排除选项后我们如果选择不更换选项的我们中奖的概率还是1/3,大家都知道所有选项概率总和是100%,那么我们如果更换了选项我们中奖的概率就成了1-1/3=2/3。
3.2 为什么不是1/2:
可能有人还是会问及明明剩下两个选项,两扇门任何一扇门应该都是1/2。为什么一下成1/3?这里就和主持人排除选项有关系,我们还继续上面的情况,我们选择了A选项,这时候主持人只会在BC中排除选项,他是绝不会将A排除了。这样就将没有BC中没有被排除的选项概率提升了。
3.3 更换选项相当于选择了2个:
如果还不明白我们可以这么理解,如果我们选择更换选项,其实我们是选择了BC两个选项,这时候我们的中奖概率是不是提升到了2/3。主持人帮你排除掉一个错误的,和我们自己将BC都打开是相同的,如果BC中有汽车我们就开回家。可以这么解释,我们看似是三选一,其实并不是,我们最后的选择是“换”与“不换”,两个选项。换的中奖概率是1/3,反之不换的中奖概率是2/3。
3.4 古典概型计算
首先我们把三个门分成两组,第一组为第一次选定组A只有一扇门,第二组为第一次未选定组B有两扇门。大奖出现在第一扇门的概率为1/3,同理大奖出现在第二扇门的概率为2/3。
主持人在B组中排除掉一个选项。
3.4.1不更换选项中奖概率为1/3;
3.4.2更换选项计算方法:
这时候有两种可能第一种,大奖在A组中,这时候不论主持人如何操作,1/3*0%=0我们中奖的概率都是0。
第二种可能,大奖在B组中,由于主持人,一定会排除错误选项,所以我们这时候中奖概率为2/3*100%=2/3。
我们将上述两个可能性合并0+2/3=2/3。
所以我们更换选项中奖的概率为2/3,不更换选项中奖的概率为1/3。
三、统计结果分析:
本章将用实际的统计结果结合统计理论解释,为什么第一次的运行结果约为362次?上文已经说明了我们的最终的选择其实只有“换”和“不换”,也就是说我们总的运行结果应该是符合二项分布的X ~ B(n,p),n为重复的次数,p为发生的概率。期望为E(x)=np,方差为D(x)=np(1-p)。如果我们将上述实验再重复多次(如10000次)那么结果将近似于的正态分布。我们同样使用python将结果打印成图:
图4
我们按照3个门,1000次重复,得出一个K值,这里统计了10000个K值。我们理论上来计算期望为峰值位置约为333,也就是说,大部分的K值都会在333附近。如图4所示,结果与预期的情况基本相同。所以图一的模拟结果是符合二项分布的。
四、代码讲解
4.1 3选1子函数代码的逻辑(这里不讲解语法):
# 这是一个抽奖活动
# 玩家在n个盒子里选择一个
# 无论正确与否 主持人都会帮助玩家在未选择(n-1)个盒子中去掉(n-2)个未中奖的盒子,场上只保留两个盒子
# 这时候还剩下2个盒子 一个是玩家第一次选的 一个是未选择盒子中主持人剩下的
# 这时候主持人问玩家要不要在场上剩下的两个盒子中更换选项0=不换 1=换
from random import shuffle
def choose1in3():
while True:
mm=input("请输入盒子的总数:")
a=input("是否更换答案0=不换 1=换:")
xunhuan = input("循环次数:")
i = int(a)
m= int(mm)
xun = int(xunhuan)
k = 0
list = [1]
for c in range(0,m-1):
list.append(0)
if i == 0:
qingkuang = "不更换选项"
for b in range(1,xun):
shuffle(list)
if list[0]==1:
k=k+1
elif i == 1:
qingkuang = "更换选项"
for b in range(1, xun):
shuffle(list)
if list[0] != 1:
k = k + 1
print("测试了%d次,在 %s 的情况下,中奖%d次"%(xun,qingkuang,k))
if __name__ == "__main__":
choose1in3()
首先我们设置门的个数、换或者不换选项、和游戏循环的次数。其次,一个列表其中只有一个元素1其余元素为0, list = [1,0,0...]。这个1就是大奖汽车,0是山羊。再次,我们使用shuffle(list)将list中的元素随机排序(打乱顺序),这里强调一下shuffle(list)此句代码是这段代码的核心,他保证了list中元素完全随机排序,不受人为干扰。我们默认选择第一个选项list[0](因为任何一个选项中奖的概率是相同的)。将游戏循环N多次,k是计数器初始值为0,我们每中奖一次k就加1。最后我们打印出k的值。
从代码的逻辑中我们也不难看出,我们起初选择的是哪个门并不重要,代码中也没有提到排除哪个选项,重要的是我们选择“换”还是“不换”。
在此多加解释一下,如果游戏中门的数量是大于3的。我们将排除n-2个选项,也就是说最终场上只留下2个选项。
4.2 统计部分代码分析:
from matplotlib import pyplot
def tongji():
tj = list()
for i in range(10000):
tj.append(choose1in3())
print(tj)
y = tj
x = range(min(y),max(y)+7,7)
pyplot.hist(y,max(y)-min(y))
pyplot.xticks(x,rotation=45)
pyplot.title("Marilyn's three door question")
pyplot.show()
代码首先对choose1in3()子程序的K值进行统计,共10000次,然后将这10000个K值存放在列表tj中,然后使用pyplot.hist(y,max(y)-min(y))绘制直方图。最后将图形显示出来。
五、总结
我们使用python模拟了玛丽莲三门问题,然后我们对问题本身进行了分析。随后我们又使用统计的方法对结果的数值进行了分析,最后我们将代码展示并做讲解。如果未来我们遇到类似的选择问题,我们一定要选择更换,因为这样我们会大幅度提升我们正确的概率。
参考文献
[1]高等数学[M].电子工业出版社,官金兰,2020
[2]Python语言程序设计基础[M].大连理工大学出版社,吴伶琳, 2019
[3]大数据技术与应用基础项目教程[M].人民邮电出版社,李俊杰, 2018
[4]Python 3程序设计[M].人民邮电出版社,刘德山,2018
[5]基于MATLAB的计算机图形与动画技术[M].清华大学出版社,于万波, 2007
[6]MATLAB 7.0图形图像处理[M].国防工业出版社,王家文,李仰军编著,2006
[7]MATLAB数学计算与工程分析范例教程[M].中国铁道出版社,石博强,赵金编著,2005