Julia Math Code Helper

Juliaモンティ・ホールシミュレーション

Julia Math Code Helper

Abrir chat compartido original

Usuario

モンティ・ホール問題を繰り返し行い,その確率を確認する実験をJuliaで行いたい。

Julia Math Code Helper

モンティ・ホール問題は非常に興味深い確率の問題ですね。この問題では、3つのドアのうち1つに賞品があり、残りの2つには何もありません。参加者は最初に1つのドアを選び、その後司会者(モンティ・ホール)が参加者が選ばなかったドアの1つを開け、そこに賞品がないことを示します。その後、参加者は最初に選んだドアを変更するかどうかを選択できます。

理論的には、ドアを変更した場合の当たる確率は2/3、変更しない場合は1/3です。この理論を確認するために、Julia言語を使用してシミュレーションを行いましょう。シミュレーションでは、以下の手順を繰り返します:

  1. ランダムに賞品が隠されたドアを選びます。
  2. 参加者がランダムにドアを選びます。
  3. 司会者が、参加者が選んでいないドアのうち賞品がないものを開けます。
  4. 参加者がドアを変更するかどうかをランダムに決定します。
  5. 当たりかどうかをチェックし、結果を記録します。

この実験を多数回繰り返し、ドアを変更した場合と変更しない場合の両方の当たり確率を計算します。では、Juliaでこのシミュレーションを行うコードを書いてみましょう。

Julia Math Code Helper

こちらがモンティ・ホール問題のシミュレーションを行うためのJuliaコードです:

using Random

function simulate_monty_hall(trials::Int)
    change_wins = 0
    stick_wins = 0

    for _ in 1:trials
        # 1. ランダムに賞品が隠されたドアを選ぶ
        prize_door = rand(1:3)
        # 2. 参加者がランダムにドアを選ぶ
        chosen_door = rand(1:3)
        # 3. 司会者が参加者が選んでいないドアのうち賞品がないものを開ける
        open_door = setdiff(1:3, [chosen_door, prize_door]) |> rand
        # 4. 参加者がドアを変更するかどうかをランダムに決定
        if rand(Bool)  # 参加者がドアを変更する場合
            chosen_door = setdiff(1:3, [chosen_door, open_door])[1]
            change_wins += (chosen_door == prize_door) ? 1 : 0
        else  # 参加者が元の選択を維持する場合
            stick_wins += (chosen_door == prize_door) ? 1 : 0
        end
    end

    (change_win_rate = change_wins / trials, stick_win_rate = stick_wins / trials)
end

# 例えば10000回の試行でシミュレーションを実行
simulate_monty_hall(10000)

このコードを実行すると、試行回数(この例では10000回)を指定して、ドアを変更した場合と変更しない場合の当たり確率を計算します。このシミュレーションを通じて、モンティ・ホール問題の確率理論を実証できます。