三門問題(Monty Hall problem)也稱為蒙提霍爾問題或蒙提霍爾悖論,出自美國的電視游戲節目《Let’s Make a Deal》。問題名字來自該節目的主持人蒙提·霍爾(Monty Hall)。
這個游戲的玩法是:參賽者會看見三扇關閉的門,其中一扇門后面有一輛汽車,選中后面有車的那扇門就可以贏得該汽車,而另外兩扇門后面則各藏有一只山羊。當參賽者選定了一扇門,但未去開啟它的時候,節目主持人會開啟剩下兩扇門中的一扇,露出其中一只山羊。主持人其后會問參賽者要不要更換其初始的選擇,選另一扇仍然關上的門。
那么問題來了,參賽者到底要不要更換其初始的選擇呢?
解決這個問題需要用到貝葉斯定理:
讓我們選一個特定的例子來看看:假設三扇門分別為Door A,Door B,Door C,並且參賽者初始選定了Door A,然后主持人展示了Door B。那么參賽者是堅持選擇Door A還是更換成Door C呢?這就要根據Door A和Door C哪個門后汽車出現的概率較大決定了。
也就是說,我們需要解決P(Door A=car|Door A is selected, Door B is revealed)和P(Door C=car|Door A is selected, Door B is revealed)哪個大的問題。
首先,每個門后有車的概率都是1/3:
其次,如果Door A門后有汽車,那么Door A被選擇的幾率是1/3,假設初始選擇了Door A,那么Door B被主持人打開的幾率是1/2:
再次,普通情況下,Door A被選擇的幾率是1/3,Door B被主持人打開的幾率是1/2(因為已經有一扇門被選擇了,選擇的門不能被打開):
同理,如果Door C門后有汽車,那么Door A被選擇的幾率是1/3,假設初始選擇了Door A,那么Door B被主持人打開的幾率是1:
因此,我們可以看到,P(Door C=car|Door A is selected, Door B is revealed)是P(Door A=car|Door A is selected, Door B is revealed)的兩倍。也就是說,更換初始的選擇將會使我們的獲勝幾率提高2倍!
可以用probability tree來幫助理解一下:
如果對上面的計算公式還有疑問,那么讓我們用計算機來模擬一下:
from random import randint from random import choice N = 1000 def simulate(N): m=0 #設置不更換初始選擇贏得汽車的次數 n=0 #設置更換初始選擇贏得汽車的次數 for i in range(N): #模擬1000次游戲 win=randint(1,3) #設置藏有汽車的門,在1-3之間隨機選出 bet1=randint(1,3) #設置初始選擇的門,在1-3之間隨機選出 remain=[i for i in range(1,4) if i!=win and i!=bet1] #剩余可選的門(除去初始選擇的門和藏有汽車的門) monty_reveal=choice(remain) #monty會在剩余可選的門中選擇一扇門打開 bet2=6-bet1-monty_reveal #bet2表示更換初始選擇(用6減是因為三扇門加起來等於6) if bet1==win: #如果初始選擇和藏有汽車的門吻合,那么初始選擇的獲勝次數+1 m+=1 if bet2==win: ##如果更換初始選擇的bet2和藏有汽車的門吻合,那么bet2的獲勝次數+1 n+=1 return n/m print(simulate(N))
2.0211480362537766
最后的結果: 更換初始選擇獲勝的次數差不多是不更換初始選擇獲勝次數的兩倍。
三門問題是有些反直覺的,我們可以這樣來理解:當參賽者選擇Door A時,他的獲勝概率是1/3,當主持人展示了Door B門后沒有汽車以后,這個信息並沒有給參賽者的初始選擇帶來任何有用的信息 ,選擇Door A獲勝的概率仍然是1/3,但是鑒於選擇Door B獲勝的概率降為了0,因此選擇Door C獲勝的概率變為1-1/3,也就是2/3。
參考:https://classroom.udacity.com/courses/st101/lessons/48744119/concepts/484806120923