iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 30
1
AI & Data

連接數學與現實世界的橋樑 -- 數學建模系列 第 30

Day 30 : 機率模型的模擬 -- 蒙地卡羅法

在一開始介紹的最佳化模型,最重要的是求解的方法,因為有許多的最佳化問題非常難求出解析解。而在第二部分提到的動態模型,雖然解析穩態行為,但是對於時變行為則需透過模擬的方式來求解。機率模型則較為複雜,多數的情況下
都需要靠模擬的方式才能求得其解,在這就介紹其中一種方法,蒙地卡羅法

範例

根據氣象預報,這周每天的降雨概率是50%,試問連續3天都下雨的機率是多少

  1. 提出問題
    變量:
    https://chart.googleapis.com/chart?cht=tx&chl=X_t%20%3D%200%20%5Crightarrow第t天沒下雨;
    https://chart.googleapis.com/chart?cht=tx&chl=X_t%20%3D%201%20%5Crightarrow第t天下雨
    假設:
    https://chart.googleapis.com/chart?cht=tx&chl=X_1%2C%20X_2%2C%20%5Cdots%20%2C%20X_7%20是獨立的
    https://chart.googleapis.com/chart?cht=tx&chl=Pr%7BX_t%20%3D%200%7D%20%3D%20Pr%7BX_t%20%3D%201%7D%20%3D%20%5Cfrac%7B1%7D%7B2%7D
    目標:
    https://chart.googleapis.com/chart?cht=tx&chl=t%20%3D%201%2C%202%2C%203%2C%204%2C%20or%205https://chart.googleapis.com/chart?cht=tx&chl=X_t%20%3D%20X_%7Bt%2B1%7D%20%3D%20X_%7Bt%2B2%7D%20%3D%201的機率
  2. 選擇建模方法
    使用蒙地卡羅模擬法,其方法是透過接連重複的試驗,每一次的試驗其結果有所不同,且每一次皆為獨立的隨機測試,因此每一次的結果都會略有不同。根據強大數法則,當https://chart.googleapis.com/chart?cht=tx&chl=n%20%5Crightarrow%20%5Cinfty時,https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7BY_1%20%2B%20%5Cdots%20%2B%20Y_n%7D%7Bn%7D%20%5Crightarrow%20E(Y)。因此,可以使用https://chart.googleapis.com/chart?cht=tx&chl=Y_1%2C%20Y_2%2C%20%20%5Cdots%2C%20%20Y_n的平均數來估計https://chart.googleapis.com/chart?cht=tx&chl=Y的真實期望值。
  3. 推導模型的數學表達式
    程式碼如下
    import random
    
    def rainydaysimulation(p):
        C = 0
        Y = 0
    
        for i in range(7):
            if random.random() < p:
                C+=1
            else:
                C = 0
    
            if C >= 3:
                Y = 1
        return Y
    
    probs = [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]
    trails = 100
    S = []
    for p in probs:
        cnt = 0
        for i in range(trails):
            Y = rainydaysimulation(p)
            cnt += Y
        S.append(cnt)
    
    print(S)
    
  4. 求解問題
    令參數https://chart.googleapis.com/chart?cht=tx&amp;chl=p為雨天機率,若隨機出來的值小於https://chart.googleapis.com/chart?cht=tx&amp;chl=p則為雨天,反之,則為晴天。https://chart.googleapis.com/chart?cht=tx&amp;chl=C為連續雨天的天數。
    https://chart.googleapis.com/chart?cht=tx&amp;chl=%5B13%2C%2030%2C%2032%2C%2053%2C%2075%2C%2087%5D是依據不同參數https://chart.googleapis.com/chart?cht=tx&amp;chl=p%20%3D%200.3%2C%200.4%2C%200.5%2C%200.6%20%2C0.7%2C%200.8以及100試驗而得到連續3天雨天的週數。
  5. 說明分析結果
    以一周每天下雨機率50%(https://chart.googleapis.com/chart?cht=tx&amp;chl=p%20%3D%200.5)來看,一周內至少連續3天下雨的機率為32%。

心得

終於堅持到這一天,之前一直看這各位高手的分享、教學文,沒想到自己也可上面留下學習的足跡。看著各位參賽者的文章滿滿的技術,再回頭看看自己的內容,覺得自嘆不如、濫芋充數。然而,在這過程中還是得到了很多,有著連續PO文的外力,讓我漸漸養成固定的學習時間、想要分享更高品質的文章。這一次的系列文仍有許多需要補充的內容,之後會陸續補上。這30天不是結束,而是開始,透過鐵人賽督促自己持續學習與進步,提升自我能力分享更具價值的技術文。


上一篇
Day 29 : 隨機過程 -- 時間序列
系列文
連接數學與現實世界的橋樑 -- 數學建模30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
阿展展展
iT邦好手 1 級 ‧ 2020-03-07 11:25:51

數學的世界博大精深!!
恭喜完賽 /images/emoticon/emoticon32.gif

我要留言

立即登入留言