【Python練習】實現蒙提霍爾問題

 

(Picture from wiki)


目標:

使用Python代碼來解答蒙提霍爾問題


步驟:

1.拆解蒙提霍爾問題

2.代碼如何實現

3.圖表及結論


1.拆解蒙提霍爾問題

1.1概述

蒙提霍爾是個十分反直覺的問題(更詳細可參考維基百科:蒙提霍爾問題),情況如下:

有三扇門後面有兩支山羊一台車,在選擇一扇門以後,另外兩扇門其中一扇們被打開裡頭是一支山羊,這時候有一次的機會選擇:


*要換門
*還是堅持不換門


問題是換門or不換門哪個方式選中車子的機率比較高呢?

1.2 先設定變數

假設我們是來賓(guest),然後會有第一次選擇門的機會,然後會有一個主持人(host)在我們選擇門以後幫我們打開另外兩扇門的其中一扇,並且在主持人開門後我們可以再選擇要換門或者不要換門。有了這個故事情節,就可以先有五個變數:

*guest_first:來賓第一次選擇門
*host_open:主持人開另外兩扇門其中一扇
*guest_second:來賓選擇要不要換門
*change: 換門
*not_change: 不換門

1.3整理一下三觀

*[注1] 多次重複實驗過程,可以使用迴圈(for loop)
*[注2] 主持人開門(host_open)的結果必須是山羊而不是車子(如果主持人開門後結果是車子遊戲就沒意義)
*[注3] 以上帝視角:如果來賓第一次(guest_first)選到車子,最好的策略就是不要換門(not_change)
*[注4] 以上帝視角:如果來賓第一次(guest first)選到山羊,主持人開門後是另外一支山羊,最好的策略就是換門(change)

2.代碼如何實現

import random as random
import matplotlib.pyplot as plt
%matplotlib inline


random.seed(0)
change = 0
not_change = 0
times = 100000 # 計算10萬次

# [注1]多次重複實驗過程,可以使用迴圈(for loop)
for i in range(times):
    # 先創造兩支山羊跟一台車子的門
    doors = ['goat_1', 'goat_2', 'car']
    random.shuffle(doors)

    # 來賓第一次選擇門 
    guest_first = random.choice(doors)

   
    # 主持人開另外兩扇門其中一扇
    # [注2]主持人開門(host_open)的結果必須是山羊而不是車子(如果主持然開門後結果是車子遊戲就沒意義)
    if guest_first == 'goat_1':
        host_open = 'goat_2'
    elif guest_first == 'goat_2':
        host_open = 'goat_1'
    
    # [注3]以上帝視角來看:來賓第一次(guest_first)就選到車子最好的策略就是不要換門
    elif guest_first == 'car':
        not_change += 1

    # [注4] 以上帝視角來看:來賓第一次需選到山羊,主持人開門後是另外一支山羊,最好的策略就是換門    
    guest_second = doors
    doors.remove(host_open)
    doors.remove(guest_first)
    if guest_second == ['car']:
        change += 1
    

print(f'Get car with not change: {(not_change/times)*100}%')
print(f'Get car with change:{(change/times)*100}%')

3.圖表及結論

執行100,000次的結論就是如果第二次選擇換門,猜中車子的機率就比較高。

Get car with change: 66.606%
Get car with not_change:33.394%




3.1 個人觀點

蒙提霍爾是一反直覺的陷阱題,且是一個很有趣且用基礎的機率公式就能解釋的問題。這位作者倒是提供一個圖文並茂的解法(link)。所以個人小結如下:

蒙提霍爾問題是要滿足有兩個必要條件才成立:

*必須要人人有獎
*選項中的期望效用只有最好跟次好,此兩種效用


結論1:
所以根據必須人人都有獎的條件,公司抽獎僧多粥少的情境是不適用蒙提霍爾問題。

結論2:
所以根據期望效用只有最好跟次好兩種效用,如果三人抽取1、2、3獎的方式也無法套用在蒙提霍爾問題

但最後:
假如有一天你、小明、小美被公司選為最佳業務三巨頭,然後老闆決定給出三份獎金用抽籤的方式送出去,

*獎金分別為5萬、5萬、10萬
*然後小美先抽到了5萬,

這時候你會願意跟小明交換手上的籤嗎? To change or not to change ?

留言

這個網誌中的熱門文章

習慣力(一)打字慢一點的練習心得,並讓我節省更多的時間

筆記術(四)-我的Evernote筆記本分類

項目管理在做啥?(三)黎特爾法則