When it’s ready.

出来るまで出来ない

納得する訳にはいかない、9万9999回の結果だとはいえ。モンティーホールのクソ野郎

いつもお世話になってます3tchアプリ。勢い板一覧で、モンティーホール問題のスレが上がってました。コレ
問題自体は知っていて、どっちを選べばいいかも知ってるけど理屈を完全に理解していませんでした。
よくよく問題読んでも、言葉遊びにしか思えなくて、どれ選んでも一緒だろとか思ってたんだけども
気になってしょうがないので実際に何百回もやってみれば分かるよねってことでPCに頑張ってもらいました。

#!/usr/bin/env python
#coding:utf-8

from random import randint

def get_num(strt=0, end=2):
  return randint(strt, end)

class Game():
  def __init__(self):
    self.tgt = get_num()
    self.first_choice = get_num()
    self.second_choice = get_num()

  def reset(self):
    self.tgt = get_num()
    self.first_choice = get_num()
    self.second_choice = get_num()

  def judge_one(self):
    if self.tgt == self.first_choice:
      return 1
    else:
      return 0

  def judge_two(self):
    if self.tgt == self.first_choice:
      return 0
    else:
      return 1

  def get_result(self):
    return [self.judge_one(), self.judge_two()]

def main():
  all_res = [0, 0]
  game = Game()
  for i in range(99999):
    cur_game = game.get_result()
    all_res[0] += cur_game[0]
    all_res[1] += cur_game[1]
    game.reset()
  print all_res

if __name__ == '__main__':
  main()

選択しが3つの場合は、変えない:変えるの正解の割合は1:2になります。
もうね、悔しいくらい1:2になるよ。10万回を4回やった結果
(10万回くらいやったら、何回正解するかの数)

変えない 変える
[33413, 66586]
[33161, 66838]
[33299, 66700]
[33354, 66645]
[33216, 66783]

で、結局今はすごい理解している。実際に数字をまざまざと見せつけられたり
ソース書くときに何が起きてるのか理解しながら書いたおかげな気がする。

よーするに、初め選ぶときには3分の1だったわけだ。
(んで、このあとにいろんなくだりがあるんだけど、そんな事をまるっと無視して)
変えるっていうときは、その一個以外のすべてのコマを選んだ事と同等という訳だ。

そ〜考えたら、はじめから変えられると言われてようが言われてなかろうが
変えたほうが当たる確率が高いに決まってる。

例えば選択しが100個あった時に、変えた時と変えない時の正解の確率は
(10万回くらいやった時に当たる回数)

変えない 変える
[968, 99031]
[1033, 98966]
[1021, 98978]
[1001, 98998]

変えた時のほうがほとんどあたってる。そりゃそうだ。1:99だもんね。

とここまで書いて、やっぱり納得出来ない、仕組みは理解できてるつもりなんだけど
やっぱり、全然なっとくできなーーーーーーーーい!!!

多分、サンプリングが少なくて100億回とかやったら同じ確率になるんじゃね?
って密かに思ってるとか思ってないとか。


## 間違った計算してたら教えて下さい。