« ”九十九十九”(舞城王太郎)を読んだ。 | トップページ | 「グレイブディッガー」を読んだ。 »

2013年4月10日 (水)

モンティホール問題のモンテカルロシミュレーションをExcel VBAと高速メルセンヌツイスタで。

モンティ・ホール問題というのがある。

Wikipediaを引用すると、、、

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

と言う話。実は変えた方が当たる確率が2倍になる、、、というのはなかなか直感に反する話。ではシミュレーションで見てみよう。

でコードは、、、

Rosetta Codeというサイトがあって、さまざまな問題をさまざまなプログラム言語で書いてる。これすごいな。

そこのMonty Hall Problemを見てみると、

http://rosettacode.org/wiki/Monty_Hall_problem

まあ、Excel VBAに対応するにはBASICを移植するのが簡単だろう。しかし乱数はちゃんといいやつを使おう。↓で使ったものを再度使ってみた。

メルセンヌツイスタの高速版(SFMT)がExcel VBAで簡単に使える!

で、試行回数を10~10^6まで、乱数の種を100個変えてシミュレーションしてみた。

こんな感じ(点線は乱数の種を変えた時のMIN/MAX)。

Montyhall

本当だ!変えた時の方が2/3、変えないと1/3になる!

コードはこんな感じ。Rosetta Codeはまだまだ見て行ってみよう。

Option Explicit

Private Sub 実行_Click()
    Dim s As Integer
    Dim total As Long, switchWins As Long, stayWins As Long
    Dim plays As Long
    Dim doors(3) As Integer
    Dim winner As Integer, choice As Integer, shown As Integer
    Dim i As Integer
   
    total = 1000
   
    s = 1
   
    Call InitMt(s)
   

    switchWins = 0
    stayWins = 0
   

    For plays = 1 To total
   
        doors(1) = 0
        doors(2) = 0
        doors(3) = 0
       
        winner = NextInt(3) + 1
        doors(winner) = 1
        choice = NextInt(3) + 1
       
        For i = 1 To 3
            If i <> winner And i <> choice Then
                shown = i
                Exit For
            End If
        Next i

        If doors(choice) = 1 Then
            stayWins = stayWins + 1
        Else
            switchWins = switchWins + 1
        End If
       
    Next plays
   
   
    Worksheets("Sheet1").Cells(2, 4) = stayWins
    Worksheets("Sheet1").Cells(2, 5) = switchWins
   

   
End Sub

« ”九十九十九”(舞城王太郎)を読んだ。 | トップページ | 「グレイブディッガー」を読んだ。 »

学問・資格」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/512682/57141172

この記事へのトラックバック一覧です: モンティホール問題のモンテカルロシミュレーションをExcel VBAと高速メルセンヌツイスタで。:

« ”九十九十九”(舞城王太郎)を読んだ。 | トップページ | 「グレイブディッガー」を読んだ。 »

最近の記事

最近のコメント

2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
フォト
無料ブログはココログ