蒙提霍爾悖論源碼驗證

蒙提霍爾悖論又稱三門問題Monty Hall Problem,這個問題出自美國的電視游戲節(jié)目Let's Make a Deal。問題名字來自該節(jié)目的主持人蒙提·霍爾(Monty Hall)。在這個秀上有三扇門,其中有一扇門打開后可以獲得一輛汽車,而其余的兩扇門打開后則是山羊。

游戲規(guī)則

游戲的步驟如下:

  • 參加游戲的人選定其中的一扇門
  • 主持人選擇另外兩扇門中的一扇,且打開后只能是山羊,而不能是汽車
  • 給參加游戲的人一個是否交換剩下兩扇門的機會
  • 游戲者做出決定,并打開門

這個悖論的關鍵在于:挑戰(zhàn)者是應該選擇交換還是選擇堅持?這兩種做法有沒有區(qū)別?

從理論的角度分析

一般來說,大多數(shù)的挑戰(zhàn)者在選擇后會認為其實換不換無所謂,其概率是相等的。但是實際上,如果交換的話會有更大的機率獲得汽車。現(xiàn)在我們從理論的角度去考慮這個問題:

首先,我們假設有三扇門,分別為門1,門2, 門3,且挑戰(zhàn)者選擇了門1。

很顯然,汽車在每扇門后的概率為:

門1 門2 門3
對應門后有汽車的概率 1/3 1/3 1/3

按照游戲規(guī)則,接下來主持人需要為挑戰(zhàn)者去除一個干擾項:

門1 門2 門3
對應門后有汽車的概率 1/3 1/3 1/3
去除一個干擾項 去除門2:1/2, 去除門3:1/2 只能去除門3:1 只能去除門2:1

這一步是由挑戰(zhàn)者確定是否交換,對于不交換的情況,那只有門1是汽車的時候,挑戰(zhàn)者才能拿到汽車的獎勵,此時的概率為1/3,而對于交換的情況,只要不是門1的情況,都可以獲得獎勵,概率為2/3。如下表:

門1 門2 門3
對應門后有汽車的概率 1/3 1/3 1/3
去除一個干擾項 去除門2:1/2, 去除門3:1/2 只能去除門3:1 只能去除門2:1
不交換,獲得汽車的概率 P(獲得汽車) = 1/3 * 1/2 + 1/3 * 1/2 =1/3 P(獲得汽車) = 0 P(獲得汽車) = 0
交換后獲得汽車的概率 P(獲得汽車) = 0 P(獲得汽車) = 1/3 * 1 = 1/3 P(獲得汽車) = 1/3 * 1 = 1/3

由此可以看出,直覺中換不換概率相等的認識是錯誤的。

程序模擬源碼

前面一節(jié)對蒙提霍爾悖論做了一些簡單的分析,這一部分會用程序來模擬,并得出了相似的結(jié)果。源碼如下:

# monty problem
# code is not optimal, but it can demonstrate the problem

import random
def open_the_door( doors, player_choice ):

  # choose which door should be open
  sample = [0,1,2]

  if doors[player_choice]:
    sample.remove(player_choice)
    open_door = random.choice(sample)
  else:
    for index, value in enumerate(doors):
      if index != player_choice and not value:
        open_door = index

  return open_door

def monty_problem( total_times, exchange = False ):

  bingo = 0

  for i in range(total_times):
    
    doors = [False, False, False]
    doors[random.randint(0,2)] = True
    player_choice = random.randint(0,2)
    open_door = open_the_door(doors, player_choice)

    if exchange:
      difference = set([0, 1, 2]) - set([player_choice, open_door])
      player_choice = list(difference)[0]

    if doors[player_choice]:
      bingo += 1

  print('P(exchange={}) = {}'.format(exchange ,bingo / total_times))

if __name__ == '__main__':
  monty_problem(100000, False)
  monty_problem(100000, True)

運行結(jié)果如下:

P(exchange=False) = 0.33178
P(exchange=True) = 0.66669

從這里可以看出,不交換和交換的概率分別接近在上一部分的推理結(jié)果。這一部分請自行驗證。

總結(jié)

其實這個問題還可以從另外一個角度,憑直覺給出答案。比如說,現(xiàn)在不僅僅是只有3扇門,而是有100扇,甚至是1000扇門,那么在你選擇了其中的一扇門后,打開其余不是汽車的98或998扇門,那么這個時候,你是換還是不換呢?

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容