もちろん、扉を選び直したほうが正解となる確率が $2/3$ になることに異論は無い。その上で、ある意味答えを $1/2$ とする説を思いついた。
まずは 2/3 となるケースでシミュレート
Python でシミュレーションをする。まずは $2/3$ となるケース。
import random
def _choose_door(first_chosen_door, rest_door):
return rest_door
def main(trials=1000000, door_num=2):
# 結果を格納する。
result = {True: 0, False: 0}
# trials の回数だけ試行。
for i in range(trials):
# ドアを 3つ 準備する。
doors = list(range(door_num + 1))
# 正解ドアを準備。
correct_door = random.randint(0, len(doors) - 1)
# Challenger が door を一つ選択する。
random.shuffle(doors)
first_chosen_door = doors[0]
# 司会者がハズレの door の一つを選択肢から取り除く。
removed_door = [d for d in doors if d not in [first_chosen_door, correct_door]][0]
# 残ったドア。
rest_door = [d for d in doors if d not in [first_chosen_door, removed_door]][0]
# Challenger が door をもう一度選ぶ。
final_chosen_door = _choose_door(first_chosen_door, rest_door)
# Judge.
result[final_chosen_door == correct_door] += 1
# Show results.
total_count = sum(result.values())
print(f'total count: {total_count}')
print(f'True count: {result[True]}, False count: {result[False]}')
print(f'True ratio: {result[True] / total_count}, False ratio: {result[False] / total_count}')
main()
実行結果は以下。期待通り。
total count: 1000000
True count: 666922, False count: 333078
True ratio: 0.666922, False ratio: 0.333078
1/2 説
上は、「挑戦者は必ずドアを選び直す」という戦略をとっている。すなわち、挑戦者がドアを選び直す確率は $1$ である。
ここで「挑戦者は確率 $1/2$ の確率でドアを選び直す」という戦略で考える。コードを書き換えるならば _choose_door
を以下のようにする。
def _choose_door(first_chosen_door, rest_door):
return [first_chosen_door, rest_door][random.randint(0, 1)]
これで実行し直すと、正解の確率が $1/2$ となる。
total count: 1000000
True count: 499292, False count: 500708
True ratio: 0.499292, False ratio: 0.500708
これをどう捉えればよいか
「挑戦者が2回目で正解のドアを選択する確率」は、「挑戦者が2回目で選び直さない確率」と「選び直さないときに正解のドアである確率」の掛け算の結果と、「挑戦者が2回目で選び直す確率」と「選び直したときの正解のドアである確率」の掛け算の結果を足し合わせたものになる。すなわち以下のようになる。
$$\frac{1}{2} \cdot \frac23 + \frac12 \cdot \frac13 = \frac12.$$
これは次のように考えられないか:
「ドアを選び直すことに意味なんてないよ(=どちらを選んでも正解の確率は 1/2 だよ)」という、モンティ・ホール問題を知らない素朴な挑戦者が、その信念に従って確率 1/2 でドアを選び直す・留まるのどちらかの選択をする限り、結果的に正解のドアを選ぶ確率は 1/2 となる。
なんとも寓話的で、面白いんじゃないか。どうなんだ。