---
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>的機率
     $=P(H)\times P(E \vert H)+P(¬H)\times P(E \vert ¬H)$
     $=\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>的機率
     $=P(H)\times P(E \vert H)+P(¬H)\times P(E \vert ¬H)$
     $=\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)專欄見!