--- title: 【數學理論】 04. 你該更換你的選擇嗎?(下) — 蒙提霍爾悖論 (Monty Hall Paradox) tags: - 【數學理論】 - 悖論 url: https://hackmd.io/hT5fsVT-TfG4VYGZvVY77Q lastSync: 2025-05-25T08:45:35.854Z hackmd: url: https://hackmd.io/hT5fsVT-TfG4VYGZvVY77Q title: 【數學理論】 04. 你該更換你的選擇嗎?(下) — 蒙提霍爾悖論 (Monty Hall Paradox) lastSync: 2025-05-25T05:17:17.456Z --- 你該更換你的選擇嗎?(下) === <font size=4><font color=gray>蒙提霍爾悖論 (Monty Hall Paradox)</font><br></font><br> --- <!-- 20250524 --> 現在你已經了解了貝式定理並且熟悉如何計算,接下來就進入正題:**蒙提霍爾悖論**。 <br> 首先我們先來複習一下[**上一篇**](https://hackmd.io/@lewisjjj800/r1yyOQgfxx)提到**三門問題**的情境: <br> >[!Note] **三門問題** >觀眾先隨機選一扇門,接著主持人把另外兩扇門的其中一扇打開之後,詢問觀眾要不要更換選擇。 <br> 這時候就可以分成兩種情況: 1. 觀眾先隨機選一扇門,接著主持人把另外兩扇門的其中一扇打開之後,觀眾選擇不換門,最後獲得<font color=red>跑車</font>的機率。 2. 觀眾先隨機選一扇門,接著主持人把另外兩扇門的其中一扇打開之後,觀眾選擇換門,最後獲得<font color=red>跑車</font>的機率。 <br> 為了不讓整篇文太過冗贅,我們定義一下幾個名詞: 刪門:主持人把另外兩扇門的其中一扇打開,畢竟他刪掉觀眾可以換過去的選擇,因此這個動作後續稱為**刪門**。 <font color=red>跑車門</font>:門後是<font color=red>跑車</font>的門。 <font color=blue>山羊門</font>:門後是<font color=blue>山羊</font>的門。 <br> 現在我們先以數學方式來證明**蒙提霍爾悖論** <br> ## **數學證明** <br> 我們以**觀眾角度**,分別以下列兩種情況計算貝式定理結果。 <br> --- ### **情況1:觀眾選擇**不換門**的情況下,最後獲得<font color=red>跑車</font>的機率。** <br> 在這種情況下獲得<font color=red>跑車</font>的機率只有一種,就是車子就在觀眾一開始選擇的門後,因此我們可以列出以下機率。 $P(H)$:一開始就選中<font color=red>跑車門</font>的機率 $P(¬H)$:一開始沒選中<font color=red>跑車門</font>的機率 $P(E \vert H)$:選中<font color=red>跑車門</font>的情況下,選擇要換的機率 $P(E \vert ¬H)$:沒選中<font color=red>跑車門</font>的情況下,選擇要換的機率 $P(E)$:主持人刪門,觀眾選擇不換門後,選中<font color=red>跑車門</font>與<font color=blue>山羊門</font>的機率總和 <br> 這個時候我們就能計算出以下各種機率: <br> $P(H)=\dfrac{1}{3}$ $P(¬H)=\dfrac{2}{3}$ $P(E \vert H)=\dfrac{1}{2}$ 在觀眾選中<font color=red>跑車門</font>的前提下,主持人刪<font color=blue>山羊門</font>,觀眾選擇不換門的機率是 $\dfrac{1}{2}$ $P(E \vert ¬H)=\dfrac{1}{2}$ 在觀眾沒選中<font color=red>跑車門</font>的前提下,主持人刪<font color=blue>山羊門</font>,觀眾選擇不換門的機率是 $\dfrac{1}{2}$ $P(E)=$主持人刪門,觀眾選擇不換門的情況下,選中<font color=red>跑車門</font>的機率+選中<font color=blue>山羊門</font>的機率 &ensp;&nbsp;&ensp;&ensp;&emsp;$=P(H)\times P(E \vert H)+P(¬H)\times P(E \vert ¬H)$ &ensp;&nbsp;&ensp;&ensp;&emsp;$=\dfrac{1}{3} \times \dfrac{1}{2} + \dfrac{2}{3} \times \dfrac{1}{2} = \dfrac{1}{2}$ <br> 接下來一樣應用**貝式定理**,把上面的數據代入貝式定理公式: <br> $P(H \vert E)=\dfrac{\dfrac{1}{3}\times \dfrac{1}{2}}{\dfrac{1}{2}} = \dfrac{1}{3}$ <br> 因此我們可以知道,當我們選擇**不換門**,我們最後選中<font color=red>跑車門</font>的機率依舊是 $\dfrac{1}{3}$ <br> 這其實很直覺,畢竟一開始選中<font color=red>跑車門</font>的機率就是 $\dfrac{1}{3}$ ,觀眾從頭到尾都沒換門,跟主持人刪不刪門沒關係。 <br> 接下來我們考慮第二種情況:選擇**換門**的情況下,選中車子的機率。 <br> --- ### **情況2:觀眾選擇**換門**的情況下,最後獲得<font color=red>跑車</font>的機率。** <br> $P(H)$:一開始就選中<font color=red>跑車門</font>的機率 $P(¬H)$:一開始沒選中<font color=red>跑車門</font>的機率 $P(E \vert H)$:選中<font color=red>跑車門</font>的情況下,選擇要換的機率 $P(E \vert ¬H)$:沒選中<font color=red>跑車門</font>的情況下,選擇要換的機率 $P(E)$:主持人刪門,觀眾選擇不換門後,選中<font color=red>跑車門</font>與<font color=blue>山羊門</font>的機率總和 這個時候我們就能計算出以下各種機率: $P(H)=\dfrac{1}{3}$ $P(¬H)=\dfrac{2}{3}$ $P(E \vert H)=\dfrac{1}{2}$ 在觀眾選中<font color=red>跑車門</font>的前提下,主持人刪<font color=blue>山羊門</font>,觀眾選擇不換門的機率是 $\dfrac{1}{2}$ $P(E \vert ¬H)=\dfrac{1}{2}$ 在觀眾沒選中<font color=red>跑車門</font>的前提下,主持人刪<font color=blue>山羊門</font>,觀眾選擇不換門的機率是 $\dfrac{1}{2}$ $P(E)=$主持人刪門,觀眾選擇不換門的情況下,選中<font color=red>跑車門</font>的機率+選中<font color=blue>山羊門</font>的機率 &ensp;&nbsp;&ensp;&ensp;&emsp;$=P(H)\times P(E \vert H)+P(¬H)\times P(E \vert ¬H)$ &ensp;&nbsp;&ensp;&ensp;&emsp;$=\dfrac{1}{3} \times \dfrac{1}{2} + \dfrac{2}{3} \times \dfrac{1}{2} = \dfrac{1}{2}$ <br> 以上這些機率跟不換門的情況一模一樣,但接下來要**注意**,因為我們要求的是:**觀眾選擇換門,最後獲得<font color=red>跑車</font>的機率**。因此**不能**一開始就選中<font color=red>跑車門</font>,這樣選擇換門後才會選到<font color=red>跑車門</font>,所以應用**貝式定理**時,我們要求的其實是: $P(¬H \vert E)=\dfrac{P(¬H)P(E \vert ¬H)}{P(E)}$ <br> 一樣應用**貝式定理**,把上面的數據代入貝式定理公式: <br> $P(¬H \vert E)=\dfrac{\dfrac{2}{3}\times \dfrac{1}{2}}{\dfrac{1}{2}} = \dfrac{2}{3}$ <br> 因此我們可以知道,當我們選擇**換門**,我們最後選中<font color=red>跑車門</font>的機率就會提高到 $\dfrac{2}{3}$ --- <br> 當你覺得數學證明麻煩、不直觀、問題一大堆時,我們就能用最簡單、最直觀、大家看了都一目了然的證明法:**窮舉法(Proof by exhaustion)** <br> 窮舉法的證明精隨就是:**把所有可能性都列出來**,舉個例子:你該如何證明「**28這個數字的因數共有6個**」?,那方法很簡單,就是把28的因數都列出來,數一遍看有沒有六個就可以證明了。 <br> 但聰明的你大概也想到了,這大概只能適用於邏輯與結構比較簡單的命題,如果今天要我證明「**1797973393這個數字的因數是不是有4個**」?那要我窮舉到死可能也證明不出來他是不是對的。 <br> >事實上1797973393是由兩個質數(27361、65713)相乘出來的,而一種特殊的非對稱密碼法-RSA加密演算法正是利用兩個質數作為加密與解密的兩個鑰匙(key)來進行加密,未來提及到密碼學再詳細展開。 <br> 接下來我們用窮舉證明法列出表格來證明。 <br> ## **窮舉證明法** <br> 我們以**觀眾角度**,把所有可能的情況列舉出來,首先是**觀眾選擇死都不換門**的所有情況: |**選擇情況**| <font color=red>跑車門</font> | <font color=blue>山羊門</font> | <font color=blue>山羊門</font> | |-|-|--|---| |**情況一**| <font color=red>**最終選擇**</font> | 主持人刪門 | -- | |**情況二**| -- | **最終選擇** | 主持人刪門 | |**情況三**| -- | 主持人刪門 | **最終選擇** | <br> 上述表格可以看到,因為觀眾死都不換門,所以一開始的選擇就是**最終選擇**,這時我們就可以看到,這三種情況中觀眾真正會贏得<font color=red>跑車</font>的情況只能在一開始就選中<font color=red>跑車門</font>,因此贏得<font color=red>跑車</font>的機率為 $\dfrac{1}{3}$ <br> 接下來我們同樣以觀眾角度,把**觀眾無論如何都會換門**的所有情況列舉出來: |**選擇情況**| <font color=red>跑車門</font> | <font color=blue>山羊門</font> | <font color=blue>山羊門</font> | |-|-|--|---| |**情況一**| 第一次選擇 | 主持人刪門 | **最終選擇** | |**情況二**| <font color=red>**最終選擇**</font> | 第一次選擇 | 主持人刪門 | |**情況三**| <font color=red>**最終選擇**</font> | 主持人刪門 | 第一次選擇 | <br> 因為觀眾無論如何都會換門,因此在第一次選擇時沒選中<font color=red>跑車門</font>的話,主持人就會好心的幫觀眾把另外一扇<font color=blue>山羊門</font>給刪了,這種情況下觀眾在換門時就只會換到<font color=red>跑車門</font>。 <br> 這時我們就可以看到,這三種情況中觀眾真正會贏得<font color=red>跑車</font>的情況就是在一開始就不要選中<font color=red>跑車門</font>,而<font color=blue>山羊門</font>有兩扇可以在一開始給觀眾選,因此贏得<font color=red>跑車</font>的機率為 $\dfrac{2}{3}$ <br> 因為把所有情況列出來了,我們可以看到**觀眾換門確實贏得<font color=red>跑車</font>的機率比不換還高**,因此根據窮舉法驗證了應該要更換選擇。 <br> 幸好蒙提霍爾悖論只是**三門問題**,還能在短時間窮舉出來,要是變成**千門問題**那實在難以窮舉了。 <br> 如果你覺得還是不夠簡單、不夠直觀,那就把問題最簡化,將核心概念抽取出來,把三門問題轉化成**取球問題**。 <br> ## **取球問題** <br> >[!Note] **取球問題** **有兩個箱子,你跟主持人分別持有一個箱子,你的箱子是空的,主持人的箱子有1000顆球,其中有一顆<font color=orange>金球</font>,抽到金球就能獲得汽車,而其他都是<font color=blue>藍球</font>。現在主持人下令,你可以從這1000顆球中盲抽一顆,放入自己的箱子中,並把箱子關起來,這當中你無法看到抽到的球是什麼顏色。隨後主持人以你看不到的角度偷偷打開箱子,把998顆<font color=blue>藍球</font>拿出來。這時你跟主持人的箱子都只剩下一顆球,主持人提出你可以選擇要從哪個箱子抽球,你要抽哪個箱子的球?** <br> 可以發現這是簡化版三門問題,只是為了讓換不換的結果差異性更大,因此改成一千顆球。 <br> 接下來我們搭配圖片來分析一下: <br> <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/04/01.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="800"> <br> 在最一開始時,你的箱子是空的,主持人的箱子有1000顆球,其中有一顆<font color=orange>**金球**</font>。 <br> <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/04/02.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="800"> <br> 隨後你從這1000顆球中盲抽一顆,放入自己的箱子中,並把箱子關起來,這當中你無法看到抽到的球是什麼顏色。 <br> <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/04/03.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="800"> <br> 這時你可以很明確知道,你從這1000顆球中盲抽一顆,抽中<font color=orange>**金球**</font>的機率是 $\dfrac{1}{1000}$,而因為主持人的箱子還有999顆球,因此<font color=orange>**金球**</font>在主持人箱子的機率是 $\dfrac{999}{1000}$。 <br> <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/04/04.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="800"> <br> 這時主持人以你看不到的角度偷偷打開箱子,把998顆<font color=blue>**藍球**</font>拿出來,你跟主持人的箱子都只剩下一顆球。 <br> **但這並不影響<font color=orange>金球</font>在主持人箱子的機率!**,因此機率仍然是$\dfrac{999}{1000}$。 <br> 也就是說,<font color=orange>**金球**</font>在主持人箱子的機率是 $\dfrac{999}{1000}$ ,而且他幫你把 **箱子中所有的<font color=blue>藍球</font>** 都挑出來了,剩下的那顆球就有極高機率就是<font color=orange>**金球**</font>。 <br> 所以當你可以從這兩個箱子中選擇時,兩個箱子中各剩一顆球,他們是不是金球的機率並不是分別為 $\dfrac{1}{1000}$ ,在你箱子中是 <font color=orange>**金球**</font>的機率為 $\dfrac{1}{1000}$ ,在主持人箱子中是 <font color=orange>**金球**</font>的機率為 $\dfrac{999}{1000}$ 。 <br> 因此,你應該要選擇你的箱子(中獎機率 $\dfrac{1}{1000}$) ,還是主持人的箱子 (中獎機率 $\dfrac{999}{1000}$) 呢?我想答案已經顯而易見了。 <br> ## **實驗** <br> 最後,為了驗證上述的結果,我們可以利用Python來替我們模擬這個情況。 :::spoiler 點擊以查看程式碼 ```python= import random # 定義一個名為 "Monty_Hall_Function" 的函式 # 其中 n 為給定門的數量,"Change" 則為布林值,如果布林值為 "True" 則換門,反之為 "False" def Monty_Hall_Function(n, Change): # 跑車所在的門 Car = random.randrange(1,n+1) #你選擇的門 You_Pick = random.randrange(1,n+1) # 以下定義選擇的情況 # 如果跑車門跟你選擇的門一樣,那選擇換門就不會中獎 if(You_Pick == Car): if(Change): return False else: return True # 如果跑車門跟你選擇的門不一樣,那選擇換門就會中獎 else: if(Change): return True else: return False # 定義一個名為 "Monty_Hall_Test" 的函式 # 當中可以輸入 Monty_Hall_Test(實驗執行次數, 總共幾道門, 要不要換) # 其中要換的話就輸入 "True",反之則為 "False" def Monty_Hall_Test(Number_of_Try, Number_of_Doors, Change): count = 0 Win_Car = 0 while( count < Number_of_Try ): #執行結果 result = Monty_Hall_Function(Number_of_Doors,Change) if(result): Win_Car += 1 count = count+1 # 此次實驗贏得跑車的機率 Prob = Win_Car/Number_of_Try print('總共有', Number_of_Doors, '道門') if(Change == True): print('如果換門的話:') else: print('如果不換門的話:') print(Number_of_Try,'次實驗中會贏得跑車', Win_Car,'次') print('贏得跑車的機率:', Prob) return Prob ``` ::: <br> 要實驗的話就可以輸入我定義的函式: ``` Monty_Hall_Test(實驗執行次數, 總共幾道門, 要不要換) ``` <br> 首先我們先來看看**不換門**的實驗結果: 設定「**實驗執行了十萬次,總共三道門,選擇不換門(輸入False)**」,輸入以下程式: ``` Monty_Hall_Test(100000,3,False) ``` <br> 接著就會輸出以下結果: ``` 總共有 3 道門 如果不換門的話: 100000 次實驗中會贏得跑車 33334 次 贏得跑車的機率: 0.33334 ``` >因為給定的程式是亂數隨機跑的,所以每次輸出的結果都會不太一樣。 --- 那接著我們來看看如果選擇**換門**的實驗結果。 <br> 設定「**實驗執行了十萬次,總共三道門,選擇換門(輸入True)**」,輸入以下程式: ``` Monty_Hall_Test(100000,3,True) ``` <br> 接著就會輸出以下結果: ``` 總共有 3 道門 如果換門的話: 100000 次實驗中會贏得跑車 66601 次 贏得跑車的機率: 0.66601 ``` <br> 通過上面輸出的兩種結果可以看到:<font color=red>**選擇換門之後贏得跑車的機率真的比不換還要「多」大約** $\dfrac{1}{3}$ **。**</font> --- 那我們來看看**取球問題**的命題: <br> 設定「**實驗執行了十萬次,總共1000顆球,選擇更換手裡的箱子(輸入True)**」,輸入以下程式: ``` Monty_Hall_Test(100000,1000,True) ``` <br> 接著就會輸出以下結果: ``` 總共有 1000 顆球 如果更換手裡的箱子的話: 100000 次實驗中會贏得金球 99893 次 贏得金球的機率: 0.99893 ``` >如果輸出的中文字要改變,print裡面的描述也要更改哦。 <br> 所以你可以看到,如果三門問題拓展成像**取球問題**一樣有一千道門的話,那更換選擇後贏得跑車的概率就會接近 $100\%$ ,因此<font color=red>**你該更換你的選擇**</font>。 <br> **蒙提霍爾悖論**已經徹頭徹尾被我們以數學方法、窮舉法、簡化思考的方法揭開那名為**悖論**的面紗,最後更以程式模擬出結果,相信經過一輪各種知識激盪後,你可以更加理解所謂的**三門問題**。 <br> 當然在數學上還有很多值得細細品味的**悖論**,就如同先前說的一樣,我會一一介紹。 <br> 我是Lewis,我們[**下一篇**](https://hackmd.io/@lewisjjj800/r1z4qUxzxg)專欄見!