蒙特卡洛方法到底有什麼用?
蒙特卡洛方法(Monte Carlo method,也有翻譯成「蒙特卡羅方法」)是以概率和統計的理論、方法為基礎的一種數值計算方法,將所求解的問題同一定的概率模型相聯繫,用計算機實現統計模擬或抽樣,以獲得問題的近似解,故又稱隨機抽樣法或統計試驗法。上述就是蒙特卡洛方法的基本概念,比較抽象,下面結合實際工作中的理解,談一談對蒙特卡洛方法的一些認識。
(1)首先,蒙特卡洛不是個人名,而是個地名,說明該方法與概率有著密切的關聯。
蒙特卡洛方法的提出者是大名鼎鼎的數學家馮·諾伊曼,搞計算機的不可能不知道他(計算機之父),馮·諾伊曼在20世紀40年代中期用馳名世界的賭城—摩納哥的蒙特卡洛來命名這種方法。(大家也別把蒙特卡洛當一個城市,估計和北京的一條街差不了多少,因為摩納哥(不是非洲的摩洛哥)本身就是個袖珍國家,比我國澳門都小的多)。說明該方法與賭博中的隨機性、概率性有著天然而密切的聯繫。幾乎涉及到複雜的、與概率相關的數值計算的領域都有可能會用到。比如計算物理、經濟金融、統計學、機器學習等。
(2)蒙特卡洛沒有什麼高深的理論,它只是一種方法或者說策略。
蒙特卡洛方法並沒有什麼高深的理論支撐,如果一定要說有理論也就只有概率論或統計學中的大數定律了。蒙特卡洛的基本原理簡單描述是先大量模擬,然後計算一個事件發生的次數,再通過這個發生次數除以總模擬次數,得到想要的結果。比如投3個骰子,計算3個骰子同時是6的概率,可以模擬投N次(隨機樣本數),統計同時是6出現的次數C,然後C除以N即是計算結果。
(3)蒙特卡洛方法可以應用在很多場合,但求的是近似解,在模擬樣本數越大的情況下,越接近與真實值,但樣本數增加會帶來計算量的大幅上升。
蒙特卡洛方法不僅僅是算概率哦,再看一個稍複雜點的實例:求函數y=x2在[0,2]區間的積分,即求如下圖所示的紅色區域的面積。當然直接用數學中的定積分公式算更簡單精確,這裡主要是舉例說明下蒙特卡洛方法的使用過程。
繪圖代碼如下:
2.計算落在紅色區域的比重:
但對於涉及不可解析函數或概率分布的模擬及計算,蒙特卡洛方法是個有效的方法。
我們都玩過套圈圈的遊戲,想過為什麼你總是套不上嗎?用蒙特卡洛方法來算一算。
1.設物品中心點坐標為(0,0),物品半徑為5cm。
2.設投圈半徑8cm,投圈中心點圍繞物品中心點呈二維正態分布,均值μ=0cm,標準差σ=20cm,模擬1000次投圈過程。
上圖中紅圈為物品,散點圖為模擬1000次投圈過程中,投圈中心點的位置散布。
3.計算1000次投圈過程中,投圈套住物品的佔比情況。
輸出結果:0.014,即投1000次,有14次能夠套住物品,就是個小概率事件,知道你為什麼套不住了吧。
(5)蒙特卡洛方法本身不是優化方法,與遺傳算法、粒子群等優化算法有著本質的區別。
蒙特卡洛方法與遺傳算法、粒子群算法等智能優化算法有相似之處,比如都屬於隨機近似方法,都不能保證得到最優解等,但它們也有著本質的差別。一是層次不一樣,蒙特卡洛只能稱之為方法,遺傳算法等則屬於仿生智能算法,比蒙特卡洛方法要複雜。二是應用領域不同,蒙特卡洛是一種模擬統計方法,如果問題可以描述成某種統計量的形式,那麼就可以用蒙特卡洛方法來解決;遺傳算法等則適用於大規模的組合優化問題(選址問題、排班問題、管理調度、路線優化)等,以及複雜函數求最值、參數優化等。