モンティ・ホール問題は実装してみれば感覚的に解る!

モンティ・ホール問題ってみなさん知ってますか?

簡単にまとめると、

三個の箱があって1つだけあたりがあります。残りの2つは外れです。

あなたがその内の一つを選択した時に残りの2つのうちハズレを一箇所教えてもらえます。

そして司会者が最初に選んだものを本当に選択しますか?それとも、変更しますか?

という質問をされた時にあなたは、選択したものを変えたほうがいいのか?買えない方が良いのか?という問題です。

さて、ではコレを実装して検証して見ることにしましょう。

こちらがそのRubyのコードです。

# -*- coding: utf-8 -*-
#アドバイス付きの選択
def select_use_advise(array, index)
	!check(array,index)
end

#当たり判定
def check(array , index)
	array[index]==1
end

hit_not_change = 0.0
hit_change = 0.0
iter=1000
array =[1,0,0].shuffle
iter.times{
	array.shuffle
	index = rand(3)
	if(check(array,index))
		hit_not_change = hit_not_change + 1
	end
	if(select_use_advise(array,index))
		hit_change = hit_change + 1
	end
}
puts "変えなかった場合 : "+hit_not_change.to_s+" 確率 :"+(hit_not_change/iter*100).to_s+" %"
puts "変えた場合 : " + hit_change.to_s+" 確率 :"+(hit_change/iter*100).to_s+" %"

紆余曲折を経てコレぐらい簡単になりました。

因みに実行結果は以下のとおりに。

変えなかった場合 : 318.0 確率 :31.8 %
変えた場合 : 682.0 確率 :68.2 %

皆さんが気になるのはコード内でアドバイス付きの解答の部分ではじめにハズレを選択していた時に、かならず当たるという形式をとっているところだと思いますが、これは至極当然ではじめに選んだものが外れていればハズレが開いているので絶対に当たり、はじめに選択していたものが当たりだったら選択肢を変えたら外れてしまうという可能性しか無いのです。

そしてはじめに選んだものは1/3で当たりなので、選択肢を変えた場合1-1/3=2/3となり選び変えたほうが絶対にいいと思う。

(間違ってたりした場合は連絡をいただけると助かります。)