三门问题的模拟

November 17, 2012
By

This post was kindly contributed by 数据科学与R语言 - go there to comment and to read the full post.


有一个著名的蒙提霍尔问题,亦称为三门问题(英文:Monty Hall problem),大致出自美国的电视游戏节目Let's Make a Deal。问题的名字来自该节目的主持人蒙提·霍尔(Monty Hall)。这个游戏的玩法是:参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门就可以赢得该汽车,而另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,知道门后情形的节目主持人会开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机会率?

这条问题亦被叫做蒙提霍尔悖论:虽然该问题的答案在逻辑上并不自相矛盾,但十分违反直觉。这问题曾引起网络上一阵热烈的讨论。有人认为概率还是1/3,不用换。有人认为概率增大为1/2,可以换。实际上,如果严格按照上述的条件的话,赢得汽车的正确机率是2/3。我们可以用一种极端的方法来考虑,如果有100扇门,主持人打开了998扇空门,你换不换呢?显然是要换的。

还有许多概率推理的方法可以获得正确答案。但我们有计算机和R,让我们来写个小程序模拟一下嘛。

# 坚持不换的策略
n <- 0
for ( i in 1:10000) {
door <- c(1,2,3)
chance <- sample(door,1)
select <- sample(door,1)
if (chance == select) {
n <- n + 1
}
}
print(n/10000)
 
# 坚持换的策略
n <- 0
door <- c(1,2,3)
for ( i in 1:10000) {
chance <- sample(door,1)
select <- sample(door,1)
remove <- ifelse(chance==select,
sample(setdiff(door,chance),1),
setdiff(door,c(chance,select)))
reselect <- setdiff(door,c(select,remove))
if (chance == reselect) {
n <- n + 1
}
}
print(n/10000)
模拟结果分别是0.33和0.66,与理论结果一致。一个很简单的模拟,证明了一个略有麻烦的问题。

参考资料:
wikipedia
Data_Analysis_with_Open_Source_Tools

Tags:

Comments are closed.