モンティ・ホール問題をシミュレーションしてみた

Pocket

モンティ・ホール問題というのがあります。

三つのドアにクルマ、ヤギ、ヤギがランダムに入っている。
プレイヤーは一つのドアを選ぶ。
司会者は残りのドアのうちヤギのいるドアを一つを開ける。
司会者は「変更しますか」と訊く。
プレイヤーは変更すべきか。

モンティ・ホールという司会者のテレビ番組におけるゲームについて、このような問題がありました。
一見、確率は二分の一なので「どちらでもいい」が答えになりそうです。
しかし、「アスク・マリリン」というコラムで、マリリン・ボス・サバントという女性コラムニストが「変更すべき」と回答して、大論争を巻き起こしたそうです。
実験すれば済む話だと思いますが、とにかく著名な数学者も登場して相当、揉めたそうです。

これをPythonで実験してみました。

import random

def main():
  ct = {"goat":0, "car":0}
  number_all = 10000
  for i in range(number_all):
    result = once()
    ct[result] += 1
  print(ct)

def once():
  doors = ["car", "goat", "goat"]
  random.shuffle(doors)
  player_choice = random.randint(0, 2)
  if doors[player_choice] == "goat":
    if player_choice == 0:
      if doors[1] == "goat":
        monty_choice = 1
      else:
        monty_choice = 2
    elif player_choice == 1:
      if doors[0] == "goat":
        monty_choice = 0
      else:
        monty_choice = 2
    else:
      if doors[0] == "goat":
        monty_choice = 0
      else:
        monty_choice = 1
  else:
    temps = [0, 1, 2]
    temps.remove(player_choice)
    random.shuffle(temps)
    monty_choice = temps[0]

  temps2 = [0, 1, 2]
  temps2.remove(player_choice)
  temps2.remove(monty_choice)
  notopen_choice = temps2[0]

  # 変更しない
  # result=doors[player_choice]
  # return result

  # 変更する
  result = doors[notopen_choice]
  return result

if __name__ == "__main__":
  main()

結果
{'goat': 3271, 'car': 6729}

変更した場合、クルマが出てくる確率が3分の2になりました。
明らかに「変更すべき」が正解です。

[ 2023年11月27日 | カテゴリー: 小ネタ | タグ: ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報