怎麼通俗理解蒙特卡洛模擬?
網上的蒙特卡洛都是側重於公式推導,但是怎麼能把蒙特卡洛的思想通俗的表達出來?蒙特卡洛的優缺點有哪些呢?
我有篇文章介紹蒙特卡洛模擬的,看完這個應該就明白蒙特卡洛模擬的思想了。
蒙特卡洛模擬作為一種常用的模擬技術,在PMBOK里經常可以看到它的身影,其主要出現在風險管理知識領域中的定量風險分析過程,是用於做項目定量風險分析的工具之一,同時蒙特卡洛模擬也可以用於估算進度或成本以及制定進度計劃等。(全文共 2741 字,閱讀大約需要 10 分鐘。)
蒙特卡洛模擬由於在PMBOK里講得較為簡單和抽象,理解起來稍微有點困難。為了讓大家更加通透地理解蒙特卡洛模擬的作用及其過程原理,本文試圖通過一個簡單的例子來實操模擬一下這個蒙特卡洛模擬的過程。
一、簡要介紹
到底什麼是蒙特卡洛模擬呢?蒙特卡洛模擬是一種統計學的方法,用來模擬大量數據。可能童鞋們看到這個定義更暈了,到底什麼是統計學方法,模擬大量數據幹什麼?別著急下面會慢慢一一道來。
我們先來簡單介紹一下關於蒙特卡洛模擬的一些背景知識。蒙特卡洛模擬是在二戰期間,當時在原子彈研製的項目中,為了模擬裂變物質的中子隨機擴散現象,由美國數學家馮·諾伊曼(學計算機的同學都知道這位馮同志的大名,人稱「計算機之父」)和烏拉姆等發明的一種統計方法。之所以起名叫蒙特卡洛模擬,是因為蒙特卡洛在是歐洲袖珍國家摩納哥一個城市,這個城市在當時是非常著名的一個賭城。因為賭博的本質是算概率,而蒙特卡洛模擬正是以概率為基礎的一種方法,所以用賭城的名字為這種方法命名。
蒙特卡洛模擬是在計算機上模擬項目實施了成千上萬次,每次輸入都隨機選擇輸入值。由於每個輸入很多時候本身就是一個估計區間,因此計算機模型會隨機選取每個輸入的該區間內的任意值,通過大量成千上萬甚至百萬次的模擬次數,最終得出一個累計概率分布圖,這個就是蒙特卡洛模擬。
二、 模擬過程
蒙特卡洛模擬在實際的項目管理應用中一般較為複雜,而且很多時候用在專業的項目風險分析軟體裡面(比如Pertmaster),通常用在較為大型的項目和企業中。我們這篇文章只是為了讓童鞋們對於蒙特卡洛模擬有個更為直觀清晰的認識,同時鑒於篇幅和不至於讓講解過於晦澀,所以這兒我們只是準備用Excel工具來簡單地模擬和介紹一下蒙特卡洛模擬的實施操作過程,這樣大家也能對蒙特卡洛模擬有個更為直觀地了解。
我們以定量分析項目總持續時間為例來簡要介紹一下蒙特卡洛模擬。比如說我們現在有個項目,該項目共有三個WBS要素分別是設計、建造和測試,為了簡單起見我們假設這三個WBS要素的預估的工期概率分布都呈標準正態分布,各自的平均工期、標準差以及最悲觀、最可能和最樂觀的估計工期如下圖所示(我們這兒簡單地認為基於正態分布的工期的最悲觀/最樂觀的估算工期定在均值正負3個標準差的位置),而且三者之間都是完成到開始的邏輯關係,這樣整個項目工期就是這三個WBS要素工期之和。
現在我們需要用蒙特卡洛模擬來以這三個要素的工期的分布為輸入,來模擬得到整個項目的工期概率分布圖。由於設計、建造和測試這三個要素都是呈標準正態分布,我們可以根據上面表格中的各自的均值和標準差數據大致畫出這三個要素工期的概率分布圖如下面的樣子:
我們要用蒙特卡洛模擬來定量分析整個項目的工期進度風險。於是我們用計算機來模擬項目的實施,我們的思路是: 第一步:隨機選取每個WBS要素的工期值作為輸入(因為每個要素的工期不是恆定的,本身就是一個估計的分布區間); 第二步:然後把三個WBS要素的值相加得到整個項目的工期值,這樣就完成了一次模擬; 第三步:重複第一二步,然後就這樣一次一次的模擬,需要模擬成千上萬次最終得到成千上萬個整個項目總工期的數值; 第四步:再對這些海量模擬次數得到海量總工期數值進行統計分析,得出其最終的項目總工期估計的概率分布。
我們先做第一步。第一步需要我們先產生這些每個要素的隨機工期值。Excel裡面有個函數可以生成呈正態分布的隨機數,就是NORMINV。我們的設計要素的第一個隨機工期取值的公式就是這麼寫的:=ROUND(NORMINV(RAND(),$E$3,$F$3),0),如下圖所示:
解釋一下這個公式:ROUND(NORMINV(RAND(),$E$3,$F$3),0),RAND() 是生成0到1之間的隨機數,NORMINV(RAND(),$E$3,$F$3) 是生成呈均值為E3(圖中為14)、標準差為F3(圖中為2)的正態分布的隨機數,ROUND 是四捨五入的意思,這樣回車我們就生成了設計這個要素的第一個隨機工期值17。同理我們把這個公式值往下拉,複製400次(我們此例中模擬400次),就得到了400個呈正態分布的隨機工期值;然後建造和測試的隨機工期值也是照葫蘆畫瓢,這樣我們就得到了這3個要素的400次模擬的隨機值,再每次的3個要素的隨機值相加得到總工期的模擬值,如下圖所示:
此時前三步就做完了得到了總工期的一組數據(400個)。現在開始做第四步對這組數據做統計分析和作圖。
4.1 先把總工期這一列(圖中E列)400個值拷貝一份,粘貼數值到另外一列(注意粘貼的時候選擇「選擇性粘貼」然後選「值」,因為隨機數隨時變動,這兒需要把值固定下來),用MAX和MIN函數計算出這一列400個值的最大值為76,和最小值為45,作為分組依據,然後在旁邊 I 列依次升序排列42-78(前後多取幾個數值圖像更完整)這部分數值作為分組數據,如下圖所示:
4.2 然後計算每個分組數據在總工期這組數據中出現的概率,這兒需要用到函數FREQUENCY,計算概率的公式為:=FREQUENCY(H8:H407,I8:I40)/400,意思是統計每個分組數據在總工期這一組數據中出現的次數,再除以模擬總次數400就得到這個分組數據出現的概率。再計算一個累積概率值,累積概率值就是前面的所有單個概率值加起來的概率,比如算分組數據46的累積概率值就是把46以下的數值的概率值全部加起來,這樣我們就得到關於分組數據在總工期這組數據中出現的概率和累積概率的數據,如下表格所示:
4.3 通過對上面表格的數據,以分組數據為X軸,出現概率和累積概率的值為Y軸於是可以做出下面關於總工期的概率分布圖:
紅色柱狀圖是整個項目估計剛好多少天完工的概率數據,比如圖中60天對應的概率大約是11%,表示整個項目剛好60天完工的概率是11%;藍線就是我們PMBOK上定量風險分析得到的那張S曲線圖,也是我們最終蒙特卡洛模擬需要得到的最終的模擬輸出:總工期的概率分布圖。通過這個S曲線,我們可以預測整個項目在多少天內完工的概率。比如我們需要預測整個項目在56天完工的概率,通過S曲線了解到56天對應的累積概率是34%左右,也就是整個項目56天內完工的概率是34%,那麼56天內不能完工的概率就是1-34%=66%,這就是風險。如果覺得風險太高無法接受,那麼我們可以把工期適當規劃長一些,比如60天,這樣查詢S曲線可以得到60天內整個項目完工的概率是70%,這樣就只有剩下30%的不能按時完工的風險,項目在進度方面的風險就大大降低了。
好了,至此關於蒙特卡洛模擬的基本概念和操作流程就說完了,希望能通過本文對大家學習和理解蒙特卡洛模擬有所助益,如有任何疑問、建議或指正,歡迎留言交流,謝謝閱讀。
歡迎關注作者微信公眾號「項目管理漫筆」(微信號:PMViewpoint)以及時獲取作者的後續更新文章,推薦閱讀作者更多的文章(直接點擊下面的標題)::
詳解掙值管理(EVM)
詳解凈現值(NPV)與內部報酬率(IRR)
什麼是邊際效益遞減規律?
「活動」失蹤了嗎? | 《PMBOK?指南》第6版解讀
如何用通俗的案例解釋「借殼上市」?
通俗理解,舉個最簡單的例子:
在這個問題中,要估計π的值,我們不需要任何複雜的幾何方法,只需要知道單位圓的面積是π,框住圓的正方形面積是4就可以了,剩下的事情就是在這個正方形里玩命的iid均勻採樣。
這就是蒙特卡洛方法最大的優點,面對很多複雜問題的時候,蒙特卡洛方法就像一個暴力解題的機器,我們甚至無需知道這個問題中的種種細節,可以直接把問題本身當成一個黑盒子,只要可以設計出一個採樣的模式,接下來就是電腦的事情,程序最多幾十行,非常簡單有效。
但是進一步,我們可能還想知道,為什麼採樣次數越多結果會越準確?採樣次數增多結果總是會變得更加準確嗎?當我採樣采了1000次的時候,對這個π的估計可以準確到什麼程度?小數點後幾位可以認為是相對準確的?
由於這個演算法完全是隨機的,假設這個對π的估計是W,我們就會想要知道p(|W-π|&<επ)的lower bound,最終這個lower bound可以由Chernoff bound推出:
所以說在這個問題中隨著採樣次數增多,估計誤差概率是指數級衰減的,這個演算法可以得到非常好的效果。
最後說MC的缺點,個人感覺MC的問題中,如果涉及到在高維空間中採樣,它基本上是無法debug,無法判斷效果好壞的。一旦中間步驟出現了問題,可能要非常長的時候後才會發現這裡有問題。
P.S. 用了以前上課時候的ppt截圖,侵刪。
看我以前的文章。
其實MC的最根本思想就是一句話:通過生成隨機數來模擬複雜的積分運算。
蒙特卡洛模擬就是用隨機模擬的方法解決統計推斷的問題。無論是什麼問題,首先把它轉為一個統計模型的參數估計或者假設檢驗的問題,然後用隨機模擬的方法給予解決。比如求積分,首先把積分看成某分布的期望,然後通過模擬服從分布的隨機數,求隨機數的平均值,該平均值就是積分的估計。
推薦閱讀:
※低差異序列(一)- 常見序列的定義及性質
※halton序列是怎麼確定的?
※蒙特卡洛方法中,有哪些演算法或者技巧讓你耳目一新,提高智商?
※蒙特卡洛樹搜索 MCTS 入門
※Q quant秘技——MC方差縮減(對偶變數篇)
TAG:蒙特卡洛方法 |