数学 趣味数学:关于概率的蒙提霍尔悖论 (也称为三门问题)

chenge · 2017年09月27日 · 最后由 Angus 回复于 2018年01月15日 · 10434 次阅读

三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目 Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。

参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机率?如果严格按照上述的条件,即主持人清楚地知道,哪扇门后是羊,那么答案是会。不换门的话,赢得汽车的几率是 1/3。换门的话,赢得汽车的几率是 2/3。

这个问题亦被叫做蒙提霍尔悖论:虽然该问题的答案在逻辑上并不自相矛盾,但十分违反直觉。这问题曾引起一阵热烈的讨论。

代码

下面的代码来自《程序员的数学 2:概率统计》。

#!/usr/bin/ruby -s
# -*- coding: euc-jp -*-
# -*- Ruby -*-

def usage
  name = File::basename $0
  print <<EOU
#{name}: ¥â¥ó¥Æ¥£¥Û¡¼¥ëÌäÂê¤ò¥·¥ß¥å¥ì¡¼¥È
(Îã)
  #{name} 10  ¢ª 10 ²ó»î¹Ô
(¥ª¥×¥·¥ç¥óÎã)
  -c         ¤Þ¤¿¤Ï -change   ¢ª ¥ä¥®¤ò¸«¤ÆÈâ¤òÊѤ¨¤ë
  -s=777     ¤Þ¤¿¤Ï -seed=777 ¢ª Íð¿ô¤Î¼ï¤ò»ØÄê
  -help      ¤Þ¤¿¤Ï -h        ¢ª ¤³¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨
EOU
end

#####################################

if ($help || $h || ARGV.empty?)
  usage
  exit 0
end

$change ||= $c

$seed ||= $s
srand($seed.to_i) if $seed

$n = ARGV.shift.to_i

def choice(a)
  a[rand(a.length)]
end

#####################################

$doors = 'ABC'.split //
$n.times{
  car = choice $doors
  you = choice $doors
  goat = choice($doors - [car, you])
  you = choice($doors - [you, goat]) if $change
  result = (car == you) ? 'O' : 'X'
  puts result
}


结果是更换选择更好。

$ make long
(no change)
./monty.rb 10000 | ../count.rb
O: 3327 (33.27%)
X: 6673 (66.73%)
(change)
./monty.rb -c 10000 | ../count.rb
O: 6609 (66.09%)
X: 3391 (33.91%)

最后

因为机器学习需要概率,我也尝试学了一下,各种公式真的头大。继续努力吧。

为什么我觉得这代码看着这么难受呢?而且好像是有问题吧。

qichunren 回复

什么问题,注释是日文的,请忽略吧。

条件概率啊,事件列出来,用公式推导。

很久之前也尝试分析过这个问题,是用一种比较直觉的方式去理解。 http://yanguango.com/2014/10/12/intuitive-explanation-of-monty-hall-problem.html

:e++enc=euc-jp

其实是知道答案之后的马后炮,不换门的话,概率从一开始就是 1/3,这个条件的反面是换门,那么自然换门的概率是 1-1/3= 2/3

真的很多错,可以留一个方式来交流一下吗?最近在研究遗传算法的最优化,我的邮箱:[email protected] 欢迎大家一起来谈论、学习

需要 登录 后方可回复, 如果你还没有账号请 注册新账号