Juliaモンティ・ホールシミュレーション
Anonymous
モンティ・ホール問題を繰り返し行い,その確率を確認する実験をJuliaで行いたい。
Julia Math Code Helper
モンティ・ホール問題は非常に興味深い確率の問題ですね。この問題では、3つのドアのうち1つに賞品があり、残りの2つには何もありません。参加者は最初に1つのドアを選び、その後司会者(モンティ・ホール)が参加者が選ばなかったドアの1つを開け、そこに賞品がないことを示します。その後、参加者は最初に選んだドアを変更するかどうかを選択できます。
理論的には、ドアを変更した場合の当たる確率は2/3、変更しない場合は1/3です。この理論を確認するために、Julia言語を使用してシミュレーションを行いましょう。シミュレーションでは、以下の手順を繰り返します:
- ランダムに賞品が隠されたドアを選びます。
- 参加者がランダムにドアを選びます。
- 司会者が、参加者が選んでいないドアのうち賞品がないものを開けます。
- 参加者がドアを変更するかどうかをランダムに決定します。
- 当たりかどうかをチェックし、結果を記録します。
この実験を多数回繰り返し、ドアを変更した場合と変更しない場合の両方の当たり確率を計算します。では、Juliaでこのシミュレーションを行うコードを書いてみましょう。
Julia Math Code Helper
こちらがモンティ・ホール問題のシミュレーションを行うためのJuliaコードです:
julia1using Random 2 3function simulate_monty_hall(trials::Int) 4 change_wins = 0 5 stick_wins = 0 6 7 for _ in 1:trials 8 # 1. ランダムに賞品が隠されたドアを選ぶ 9 prize_door = rand(1:3) 10 # 2. 参加者がランダムにドアを選ぶ 11 chosen_door = rand(1:3) 12 # 3. 司会者が参加者が選んでいないドアのうち賞品がないものを開ける 13 open_door = setdiff(1:3, [chosen_door, prize_door]) |> rand 14 # 4. 参加者がドアを変更するかどうかをランダムに決定 15 if rand(Bool) # 参加者がドアを変更する場合 16 chosen_door = setdiff(1:3, [chosen_door, open_door])[1] 17 change_wins += (chosen_door == prize_door) ? 1 : 0 18 else # 参加者が元の選択を維持する場合 19 stick_wins += (chosen_door == prize_door) ? 1 : 0 20 end 21 end 22 23 (change_win_rate = change_wins / trials, stick_win_rate = stick_wins / trials) 24end 25 26# 例えば10000回の試行でシミュレーションを実行 27simulate_monty_hall(10000)
このコードを実行すると、試行回数(この例では10000回)を指定して、ドアを変更した場合と変更しない場合の当たり確率を計算します。このシミュレーションを通じて、モンティ・ホール問題の確率理論を実証できます。