2011年6月20日月曜日

モンティ・ホール問題に納得できん

さて、表題の「モンティ・ホール問題」とは・・・
Wikipedia:モンティ・ホール問題
つまりは、有名なパラドックス問題なのである。

「プレイヤーの前に3つのドアがあって、1つのドアの後ろには景品の新車が、2つのドアの後ろにはヤギ(はずれを意味する)がいる。プレイヤーは新車のドアを当てると新車がもらえる。プレイヤーが1つのドアを選択した後、モンティが残りのドアのうちヤギがいるドアを開けてヤギを見せる。
ここでプレイヤーは最初に選んだドアを、残っている開けられていないドアに変更しても良いと言われる。プレイヤーはドアを変更すべきだろうか?」


「はぁ?どっちを選んでも同じだろうが!!??」


と思われた、お兄さんお姉さんが多いかと思いますが(事実、この意見が多かったらしい)、なんと正解は

「当たる確立が2倍になるから選びなおすべき」


という、大方の予想を裏切るもの。

コレの解答に、学の無い私は一向に納得が出来ないのであります。

納得ができないなら、実際にやってみるべき!実物教育を舐めるなよ!!

ドアとヤギとクルマを用意して・・・って出来るかーい!!!

ってな訳でシミュレーションプログラムを書いてみた。(python)

# -*- coding: utf-8 -*-

import random

#変更した場合の当たり数
case1 = 0;

#変更しなかった場合の当たり数
case2 = 0;

x = 1
while x<=10000:

 #ドアを用意
 inumber = [0,1,2]

 #ヤギとクルマを用意 1が車
 items = ["0", "0", "0"]
 items[random.randint(0, 2)] = "1"
 

 
 #プレイヤーの選択
 pc = random.randint(0, 2)
 
 #リストから、クルマとプレイヤーの選択したドアを除外,残りが司会者の選ぶドア
 if pc != items.index("1"):
  inumber.remove(pc)
 inumber.remove(items.index("1"))

 #司会者の選択肢が1つしかない場合
 if len(inumber)==1:
  #変更すれば当たる
  case1 += 1
 
 #司会者の選択肢が2つある場合
 if len(inumber)==2:
  #変更しなければ当たる
  case2 += 1

 x += 1

print "case1 > " + str(case1)
print "case2 > " + str(case2)

このアルゴリズムで良いのか甚だ不安だが・・・
むう・・・やはり「選びなおす(case1の数値)」が「選びなおさない(case2)」の約2倍となっている。
※なお、上記問題を10,000回繰り返した結果。

まぁ実際、組んでる途中で何か分かった気がする、ような気がする。