モンティホール問題のモンテカルロシミュレーションを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)。
本当だ!変えた時の方が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
« ”九十九十九”(舞城王太郎)を読んだ。 | トップページ | 「グレイブディッガー」を読んだ。 »
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2025年1月13日 IEEE Microwave Magazineの特集はニューラルネットワークとマイクロ波、Siversがミリ波ビームフォーマー開発を受注、バイデン・ハリス政権が ワイヤレス革命に1億 1,700 万ドル、HoneywellとNXPが航空機技術で提携(2025.01.13)
- UnityでVisual C#用の数値計算ライブラリMath.NET numericsを使う(1) まずはNuGetForUnityを使ってインストール。2Dゲーム画面に連立方程式を解いた結果を表示。(2025.01.14)
- 高周波・RFニュース 2025年1月9日 CES2025に合わせて各社プレスリリース、特にQualcomm、NVIDIA、INTELが大量。SEMCOのC0G MLCC (1210 inch, 22nF, 1000V)解説、TIのAI搭載60GHz車内レーダ、MarvellのCPO、Qorvoの車載UWB SoC、TDKのセンサがAI白杖に採用(2025.01.09)
- NHK パンサー尾形さんの笑わない数学 微分・積分 スペシャルがもうすぐ始まる。これから見てリアルタイムでポストしたのでそのスレッドを残す。(2024.12.29)
コメント