モンティ・ホール問題は、テレビ番組「Let’s Make a Deal」でホストを務めたモンティ・ホールに由来する有名な確率問題です。この問題は、直感に反する結果を持つため、多くの人々を混乱させることで知られています。
問題の概要
以下は、モンティ・ホール問題の基本的な設定です:
- あなたは3つのドアのうち1つを選ぶように求められます。
- 1つのドアの後ろには車があり、残りの2つのドアの後ろにはヤギがいます。
- あなたがドアを選んだ後、ホストであるモンティ・ホールは、残りの2つのドアのうち1つを開け、そこにヤギがいることを示します。
- その後、モンティ・ホールは、あなたが最初に選んだドアを変更するかどうかを尋ねます。
問題の質問
「ドアを変更するべきか、それとも最初の選択をそのままにするべきか?」
答え
直感に反して、ドアを変更することが有利です。具体的には、ドアを変更すると車を獲得する確率は2/3であり、変更しない場合の確率は1/3です。
なぜ変更するのが有利なのか?
- 最初の選択:
- 最初に選んだドアが車のドアである確率は1/3。
- 最初に選んだドアがヤギのドアである確率は2/3。
- モンティ・ホールの行動:
- モンティは必ずヤギのいるドアを開けます。最初に選んだドアが車のドアであった場合、モンティが開けるドアはどちらか一方のヤギのドアです。
- 最初に選んだドアがヤギのドアであった場合、モンティは残りのもう一方のヤギのドアを開けます。
- 選択の変更:
- 最初に選んだドアが車のドアであった場合、変更するとヤギを選んでしまいます(確率1/3)。
- 最初に選んだドアがヤギのドアであった場合、変更すると車を選ぶことになります(確率2/3)。
したがって、ドアを変更することで車を獲得する確率が2/3になり、有利なのです。
Pythonでシミュレーション
以下は、Pythonを使ったモンティ・ホール問題のシミュレーションです:
import random
def monty_hall_simulation(switch: bool, trials: int = 10000) -> float:
wins = 0
for _ in range(trials):
# 隠し場所を設定
doors = ['goat', 'goat', 'car']
random.shuffle(doors)
# プレイヤーが1つのドアを選ぶ
player_choice = random.choice([0, 1, 2])
# モンティがヤギのいるドアを開ける
remaining_doors = [i for i in range(3) if i != player_choice and doors[i] == 'goat']
monty_opens = random.choice(remaining_doors)
# プレイヤーがドアを変更する場合
if switch:
player_choice = [i for i in range(3) if i != player_choice and i != monty_opens][0]
# 勝利をカウント
if doors[player_choice] == 'car':
wins += 1
return wins / trials
# シミュレーションを実行
switching_win_rate = monty_hall_simulation(switch=True)
not_switching_win_rate = monty_hall_simulation(switch=False)
print(f"ドアを変更する場合の勝率: {switching_win_rate * 100:.2f}%")
print(f"ドアを変更しない場合の勝率: {not_switching_win_rate * 100:.2f}%")
このコードを実行すると、ドアを変更する場合の勝率が約66.67%、変更しない場合の勝率が約33.33%であることが確認できます。
モンティ・ホール問題は確率の面白さを感じる良い例であり、直感に反する結果が得られるため、多くの人々に興味深い学習経験を提供します。
コメント