5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

モンティ・ホール問題が納得いかなかったので、モンテカルロシミュレーションしてみた

Last updated at Posted at 2019-01-25

#モンティ・ホール問題の解説が納得いかなかったので、モンテカルロシミュレーションしてみた

モンティ・ホール問題

何回読んでも納得がいかない。
そこでpythonでシミュレーションしてみました。

使い方

引数として、試行回数を指定。

python monty.py 1000

code

import random
import sys

#引数
n = int(sys.argv[1])

#賞を得るのに、成功すると1、失敗すると0を返す
#change ドアを変更するか
#True:変更する
#False:変更しない
def monty(change):
    #3枚のドア
    doors = [0,0,0]
    #乱数でどのドアに賞品があるかを決める
    prize = random.randint(0,2)
    doors[prize] = 1
    #参加者がドアを選ぶ
    select = random.randint(0,2)

    #続いてmontyがドアを選ぶ
    while True:
        monty_select = random.randint(0,2)
        if monty_select != select and doors[monty_select] == 0:#賞品が無く、参加者が選ばなかったドアを選ぶ
            break            

    if change:#ドアを変更する場合
        while True:
            select_change = random.randint(0,2)
            if monty_select != select_change and select != select_change:#montyも参加者も選ばないドア
                select = select_change
                break
    if doors[select] == 1:#賞を得られたら1を返す
        return 1
    return 0#賞が得られなければ0を返す

change = 0
nochange = 0
for i in range(n):#指定回数を繰り返す
    change += monty(True)
    nochange += monty(False)

#結果の表示
print("turn",n, "change",change,"nochange", nochange)

実行結果

何回やってみても、ドアを変えるほうが賞品をもらえる回数がほぼ2倍になりました。

turn 1000 change 700 nochange 320
turn 1000 change 678 nochange 356
turn 1000 change 658 nochange 333
turn 1000 change 649 nochange 310

実行環境

MacBook-Pro-2016
Python 3.5.2 :: Anaconda 4.2.0 (x86_64)

づつく
モンティ・ホール問題が納得いかなかったので、モンテカルロシミュレーションしてみた(2)

5
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?