百度关于三门问题的链接:https://baike.baidu.com/item/%E4%B8%89%E9%97%A8%E9%97%AE%E9%A2%98/1242689?fr=aladdin
三门问题简介:
三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门是否会增加参赛者赢得汽车的机率。如果严格按照上述的条件,那么答案是会。不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3。
虽然该问题的答案在逻辑上并不自相矛盾,但十分违反直觉。这问题曾引起一阵热烈的讨论。
这是很久之前反直觉的一个困扰,今天想到通过编程进行模拟。以下为模拟代码
import random
list = [1, 2, 3]
total_count = 0
right_count = 0
frist_right_count = 0
for j in range(10000):
total_count += 1
# 正确门的序号
right_door = random.randint(1, 3)
# 第一次选择随机门
frist_choose_door = random.randint(1, 3)
#任意打开一个门,要求不是正确的门,也不是已选择的门
open_list = [i for i in list if i != right_door and i != frist_choose_door]
frist_open = random.choice(open_list)
#剔除已开门后,剩余门的列表
remain = [i for i in list if i != frist_open]
#转换选择应该选的门
finally_open = random.choice([i for i in remain if i != frist_choose_door])
if finally_open == right_door:
right_count += 1
if frist_choose_door == right_door:
frist_right_count += 1
result = "正确门的序号{},第一次选择门的序号{},随机打开门的序号{},转换后选择的门{}".format(right_door, frist_choose_door, frist_open, finally_open)
print(result)
with open('three door.txt', 'a', encoding='utf-8') as f:
f.write(result)
f.write('\n')
print("实验{}次,最终选择正确{}次,第一次选择正确{}次".format(total_count, right_count, frist_right_count))
模拟三次的结果如下:
实验10000次,最终选择正确6648次,第一次选择正确3352次
实验10000次,最终选择正确6764次,第一次选择正确3236次
实验10000次,最终选择正确6696次,第一次选择正确3304次
直觉认识错误一:
打开一扇错误的门后,选择两扇门中的一个,与直接选择只有两扇门中的一个。两种选择是等价的。
直觉认识错误二:
打开一扇错误的门后,未选择且未打开的那扇门,中奖概率提高了。同时,已选择未打开的那扇门,中奖概率也提高了。