摘要

圖片來源:http://1.bp.blogspot.com
A White-Box Simulation of Monte Carlo Method for Schedule Risks

白箱蒙地卡羅模擬於時程風險之應用

關鍵詞/ 白箱蒙地卡羅、模擬16、時程風險
Keywords / White-Box Monte Carlo Method,Sinulation,Schedule Risk

本文利用MS Excel ©與 Project ©內建的VBA指令集來實作蒙地卡羅方法,對一個專案時程進行大量模擬,再透過統計圖表分析該專案的特徵。提供專案管理團隊有意導入此模擬時,一個明確的作法,並可藉此一窺蒙地卡羅模擬的所有過程與數據。最後,針對本模擬所遭遇到的可能限制提出改善建議,讓未來欲從事相關研究人員可以依循的參考。

文字設定:

前言 Introduction

專案管理知識體系(PMBOK, Project Management Body of Knowledge)經多年的發展,已成為專案管理的標準而被廣泛應用在不同行業,例如軟體、工程、土木、營建與汽車等。根據PMBOK指南中的定義,將專案管理分為九大知識領域,包含整合、範疇、時間、成本、品質、人力資源、溝通、風險與採購管理。其中在專案管理實務中,使用頻率最高的2個數學分析技術分別為,時間管理內的要徑圖與溝通管理內的S-Curves。但在計畫階段所產出的要徑圖與S-曲線圖皆由專家經驗或歷史資料所制定出來的,其中包含許多不確定因數,也因為如此,人們常透過蒙地卡羅方法來對所定義的模型進行測試與驗證,以找出模型的特徵。

蒙地卡羅方法 Monte Carlo Method

參考維基百科的說明,蒙地卡羅方法也稱統計模擬方法,是一種以機率統計理論為主,且非常重要的數值計算方法。也就是透過隨機數來解決很多計算問題的方法(圖一)。蒙地卡羅方法在計算物理學(如粒子輸運計算、空氣動力學計算、量子熱力學計算),宏觀經濟學,生物醫學,金融工程學等領域應用廣泛。

圖一、蒙地卡羅模擬概要圖 (http:// www.mis.ccu.edu.tw/user/yfyen/)

在解決實際問題的時候應用蒙地卡羅方法主要有5個簡單的步驟:

  • 步驟一,建立參數模型, y = f (X1, X2, … , Xq)。
  • 步驟二,產生一組隨機輸入數值,Xi1, Xi2, …, Xiq。
  • 步驟三,透過步驟二的數值對模型求值,並將結果存為 yi。
  • 步驟四,重複步驟二與三至一定的次數 n。
  • 步驟五,透過相關圖表分析模擬結果。

以蒙地卡羅方法求圓周率為例,一個正方形邊長為1單位長,面積為1平方單位。黃色扇形面積等於半徑為1單位長的1/4圓,面積為pi/4。在正方形內均勻隨機丟石頭,落在扇型內的機率 = 扇型面積÷正方形面積=pi/4。所以只要隨機產生N個座標(x,y),看看座標(x,y)落在扇形中(x2+y2<1)的次數有幾次。落在扇形中的次數除以N再乘上4的數值理論上就會接近圓周率PI(圖二)

圖二、以蒙地卡羅方法求圓周率示意圖 (http://en.wikipedia.org/wiki/Monte_Carlo_method)

近十年來,隨著各種專案管理案例的分享,管理手法的發展日趨成熟。其中在學術與實務上,對數值模擬與分析,大部份都是採用現成的軟體產品進行操作。例如,最知名的@Risk(圖三)與Monte Carlo for Primavera模組等軟體。透過這些動輒近十萬甚至百萬的軟體進行相關參數的調整,並待模擬完成後,直接提供使用者模擬後的最佳解答,這種省略中間過程的做法,就像黑盒子般令人無法一窺究竟,似乎也抹去了模擬過程中所代表的意義。

圖三、@Risk for Excel 軟體畫面 (http://www.palisade.com/risk/)

模型發展 Model Development

為了一窺模擬的究竟,本文將以MS Excel ©內建的VBA(Visual Basic for Application)程式指令,實作專案時程的蒙地卡羅模擬。如此,不僅可以完整呈現整個模擬的過程,一覽所有模擬的分布,更讓我們可以追朔每一個模擬的源頭,再次檢視每一個任務的工期與限制。

參考前述的5個步驟,本次模擬的步驟設計如下:

  • 訂定專案的WBS與每個任務的工期參數模型。
  • 隨機輸入每個任務的工期。
  • 求出時程要徑與各月份的累計實獲值。
  • 重複步驟2與3共1000次。
  • 將得到的模擬數據,透過MS Excel圖表功能呈現完整資訊。

第一步

WBS模型將透過MS Excel ©來實作,在工期的部分,以每個任務的工期作為常態分布的中間值,並給予標準差,透過亂數產生一落於該區間內的值作為新的工期。

而各任務間的關聯部分,原本也打算利用MS Excel ©欄位實作,並利用VBA程式指令撰寫自有的CPM計算函式,以降低整合外部專業時程軟體的複雜性;但考量自行設計的CPM計算函式,不易向第三方證明其公正性,又將成為另一個待驗證的黑箱作業,最後決定透過普及率最高的排程軟體之一MS Project ©作為CPM計算的模型。

第二步

透過MS Excel內建的亂數函式,依所需模擬的次數產生前述模型規範的工期。

第三步

將步驟二產生的專案,逐一發布至步驟一所建立的CPM模型內。透過MS Project自動計算的特性,立即取回要徑,總工期與每月付款金額等資訊。

第四步

重複步驟二與三,並計算模擬時間,以利效能調教用。

第五步

最後透過MS Excel ©對模擬結果進行統計分析,計畫產出要徑統計表,總工期分布圖,S-Curves分布圖。

在VBA程式設計方面,考量實用性,我們預先設計好的MS Excel模擬樣板檔案內含四個步驟按鈕,以提供使用者更多選擇性(圖四)

圖四、MS Excel樣板檔案首頁

按鈕一 產生專案資料

透過VBA指令“Randomize”啟動亂數引擎,再透過“RND”產生亂數表,讓每個任務的工期利用以工期與標準差作為常態分布的參數,產生新的工期,並將結果存入 “DATA”工作表。經重複此步驟1000次後,即可得到所有待模擬的專案資料(圖五)

圖五、產生專案資料的VBA程式碼

按鈕二 開始模擬

依序從第一個專案開始,將每一個任務的工期與成本逐一更新至MS Project上,並於更新完畢後,立即將各任務的要徑狀態,專案總工期與每月現金流量等資訊回存MS Excel內。

按鈕三 產生標準差序列

對所有模擬的總工期進行標準差分析,透過MS Excel ©內建的標準差函式,取得所有參數,包含中間值,最大值,最小值與標準差等。再依序產生分布圖的統計間隔序列(圖六)

圖六、產生標準差序列的VBA程式碼

按鈕四 整合成本資料

為了讓所有模擬結果的曲線長度一致,以利堆疊的呈現。我們先找出所有模擬專案中最長的付款月數作為基數,依序按每個模擬的付款月數與最長付款月數的比例取得付款金額,並將結果存至“CostPercent”工作表內(圖七)

圖七、產生標準差序列的VBA程式碼

模型應用 Model Application

在實際操作方面,我們以一個工期約二年的廠房營建專案為例。首先,我們一如往常的參考歷史資料與專家建議,在MS Project上建立第一層的WBS (Work Breakdown Structure),輸入每個任務的前後關聯與成本資訊(圖八)

圖八、在MS Project上建立專案排程

將WBS與工期匯出至MS Excel ©,並對每個任務給予一個標準差,點選按鈕一將詢問模擬次數,輸入1,000次後,約4秒完成模擬資料的產生(圖九)

圖九、在MS Project上建立專案排程

瀏覽“Data”工作表內的模擬資料,可雙重確認是否有產生不合理的工期,若無誤,可點選按鈕二開始進行模擬。同時,將看見MS Project ©上的工期不斷變化,右側甘特圖中的要徑也隨著變化。最後約106秒後完成模擬,要徑統計圖即可在“CPM統計”工作表中取得(圖十)

圖十、要徑統計表

再透過按鈕三產生標準差序列,而總工時統計圖即可在“Duration Chart” 工作表中取得(圖十一)

圖十一、總工期分佈統計表

最後點選按鈕四整合成本資料,可立即取得所有模擬專案的按月累計實獲值表,並在“Cost Chart”工作表中取得所有專案的S-Curves圖(圖十二)

圖十二、所有專案的S-Curves圖

限制 Limitations

效能,目前以專案WBS的第一層共16個任務為例,模擬1,000次耗時約100秒。若考量模擬10,000次,預估將耗時1,000秒。原本擔心在WBS增加時,會大幅增加模擬的時間,但經測試發現MS Project都在1秒內完成要徑的計算。另外,在模擬次數大幅增加的情況下,尚可透過關閉MS Project動態更新甘特圖的方式,大幅減少螢幕更新的作業,亦可縮短模擬的時間。

項目數量,由於MS Excel ©有256個欄位與65536個行數的限制,因此,在程式發展上,若以欄作為WBS的存放位置,則256個WBS的專案屬於中小型的專案,大型的專案就必須考量以行為存放位置,但模擬次數就被限制在256次內,而這樣的模擬次數則過於不足,未來可考慮分割模擬數據的方式進行。

MS Excel ©的Trend Chart一次只能呈現250條曲線,如本例,1,000次的模擬就必須分成四個曲線來顯示。為了顯示整個S-Curves的風險寬度,未來可考慮對模擬後的數據再做一次標準差分析,最後只需繪製數十條S-Curves即可一窺全貌。

結論 Conclusion

專案時程的發展涉及大量的管理影響因子,給予越多的限制與條件,只會讓模型的特質更狹隘,這類管理性的課題特別適合透過蒙地卡羅方法來模擬。而模型參數的品質將對模擬的結果有絕對的影響,因此,專案管理團隊可將重心放在個任務模型參數的發展上,針對個任務的特性,逐一發展最佳化的參數,讓模擬更接近真實。

由於專案本質的獨特性,市售的軟體產品未必符合各專案的需求,本文透過專案時程發展上,普及率最高且成本最低的二個軟體─MS Excel & Project來完成蒙地卡羅模擬,以取代動輒近十萬甚至百萬的專業模擬軟體。專案管理團隊可依產業特性所需發展自有模擬技術,如此透過科學化的數據分析,更加提高專案團隊與客戶對專案成功的信心。

參考文獻

  1. Brenda McCabe, Monte Carlo Simulation for schedule Risks, Proceedings of the 2003 Winter Simulation Conference.
  2. MBAlib, 蒙特卡羅方法, “http://wiki.mbalib.com/zh-tw/蒙特卡羅方法”。
  3. Wikipedia, A Guide to the Project Management Body of Knowledge, “http://en.wikipedia.org/wiki/A_Guide_to_the_Project_Management_Body_of_Knowledge”.
  4. 吳有微,工程專案時程風險管理蒙地卡羅模擬之應用,中興工程季刊第108期,2010年7月,PP. 55-65。

留言(0)

Further Reading延伸閱讀