更新於 2020/12/31閱讀時間約 3 分鐘

蒙地卡羅模擬法(Monte Carlo Simulation)

大家在閱讀的時候會很常看到一個關鍵字蒙地卡羅模擬法,或許有些人早就已經熟悉了,但擔心部分讀者還不了解,因此特地寫一篇文章說明。
蒙地卡羅模擬法是什麼呢?用非常簡短的方式來回答即使用電腦、程式來模擬實際狀況。所以在我們的系列文中可以看到我使用蒙地卡羅模擬法來模擬擲骰子和抓魚,再使用模擬出來的結果做進一步運算。
大家可能看了簡短版本的回答還是有點不明所以,那我們來講點更詳細一點的介紹吧!
先從蒙地卡羅法的歷史說起,
‘20世紀40年代,在科學家馮·紐曼、斯塔尼斯拉夫·烏拉姆和尼古拉斯·梅特羅波利斯於洛斯阿拉莫斯國家實驗室為核武器計劃工作時,發明了蒙地卡羅方法。因為烏拉姆的叔叔經常在摩納哥的蒙地卡羅賭場輸錢得名,而蒙地卡羅方法正是以機率為基礎的方法’(引用自維基百科),

蒙地卡羅是賭場的名字啦!
所以其實蒙地卡羅充其量只是一個賭場的名字而已,或許讓你聽起來很fancyXD,但並不是什麼高深的科學。
蒙地卡羅法被廣泛應用在各個領域,金融、生醫、物理、經濟…,是一套以機率統計理論為基底的方法。
就舉擲骰子為例,如所述,我們使用蒙地卡羅模擬法模擬擲骰子的過程,
確切來說是怎麼模擬呢?
首先,我們知道這是【兩獨立且公正之骰子】,而我們也知道每一骰子有【6面】,因此擲一骰子的樣本空間為S = {1,2,3,4,5,6},再來就是【骰到每一面的機率皆相等】。
知道了這些,我們就可以使用程式來模擬這個過程,我們使用Julia內的函數rand()從1~6隨機選一個數字,選到每一個值得機率皆相等,這代表了一次【擲骰子】的過程,電腦幫我們從1~6中隨機選一個數代表骰到的點數。而我們希望得知兩骰子和為奇數的機率,所以我們得再執行一次rand(),再從1~6中選一個數字,意即另一個【擲骰子】的過程。
現在,我們有兩個用rand()產出的數字了,也就表示我們模擬了【骰兩個公正且獨立骰子】的過程。 最後,我們便將這兩個數字進行加總並確認是否是奇數,即代表對兩顆骰子的點數進行加總並確認是否是奇數。
以上就是一個蒙地卡羅模擬法的模擬過程,其實並不難,只是名字比較fancy一點而已XD
嗯?那這過程到底有什麼用呢?模擬一次擲骰子的過程是能做什麼嗎?事實上,模擬一次不夠我們可以模擬10000次啊!這只需要花不到1秒就可以達成。模擬10000次相當模擬了10000次擲骰子的過程,我們就可以從這10000次的試驗結果計算擲兩骰子之和為奇數的機率,又或是擲兩骰子加總的平均和擲骰子的變異數。
聽起來還是很沒用嗎?覺得我們都可以算出理論解那為什麼還要用模擬的嗎?或許只是擲骰子這個例子讓你小看它了!
實際上,有些試驗不像擲骰子一樣,其耗時長、花費金額巨大且其理論值也非常難估計。
舉發射火箭為例,若我們想要探討發射火箭的種種效應,因為其方程式複雜難以得出理論解,也許需要實際發射個100次火箭才得以估計,但,發射個一次火箭就得斥資百億,誰能夠讓你發射個一百次呢?這時候蒙地卡羅模擬法的價值就能充分地被體現出來,我們所需要的只是電腦的算力,利用電腦、程式來幫我們模擬這些理論上解不出來而實際模擬又斥資巨大的項目。賴於近來科技的進步,算力也越來越便宜,因此蒙地卡羅模擬法也越來越被廣泛使用在各領域。
參考資料:
有興趣可以至我的blog參考原文文章::

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.