天天看點

蒙特卡羅方法入門

蒙特卡羅方法入門

蒙特卡羅方法是一種計算方法。原理是通過大量随機樣本,去了解一個系統,進而得到所要計算的值。

它非常強大和靈活,又相當簡單易懂,很容易實作。對于許多問題來說,它往往是最簡單的計算方法,有時甚至是唯一可行的方法。

蒙特卡羅方法入門

它誕生于上個世紀40年代美國的"曼哈頓計劃",名字來源于賭城蒙特卡羅,象征機率。

第一個例子是,如何用蒙特卡羅方法計算圓周率π。

正方形内部有一個相切的圓,它們的面積之比是π/4。

蒙特卡羅方法入門
蒙特卡羅方法入門

現在,在這個正方形内部,随機産生10000個點(即10000個坐标對 (x, y)),計算它們與中心點的距離,進而判斷是否落在圓的内部。

蒙特卡羅方法入門

上面的方法加以推廣,就可以計算任意一個積分的值。

蒙特卡羅方法入門

比如,計算函數 y = x2 在 [0, 1] 區間的積分,就是求出下圖紅色部分的面積。

蒙特卡羅方法入門

這個函數在 (1,1) 點的取值為1,是以整個紅色區域在一個面積為1的正方形裡面。在該正方形内部,産生大量随機點,可以計算出有多少點落在紅色區域(判斷條件 y < x2)。這個比重就是所要求的積分值。

用matlab模拟100萬個随機點,結果為0.3328。

蒙特卡羅方法不僅可以用于計算,還可以用于模拟系統内部的随機運動。下面的例子模拟單車道的交通堵塞。

根據 nagel-schreckenberg 模型,車輛的運動滿足以下規則。

目前速度是 v 。 如果前面沒車,它在下一秒的速度會提高到 v + 1 ,直到達到規定的最高限速。 如果前面有車,距離為d,且 d < v,那麼它在下一秒的速度會降低到 d - 1 。 此外,司機還會以機率 p 随機減速, 将下一秒的速度降低到 v - 1 。

在一條直線上,随機産生100個點,代表道路上的100輛車,另取機率 p 為 0.3 。

蒙特卡羅方法入門

上圖中,橫軸代表距離(從左到右),縱軸代表時間(從上到下),是以每一行就表示下一秒的道路情況。

可以看到,該模型會随機産生交通擁堵(圖形上黑色聚集的部分)。這就證明了,單車道即使沒有任何原因,也會産生交通堵塞。

某産品由八個零件堆疊組成。也就是說,這八個零件的厚度總和,等于該産品的厚度。

蒙特卡羅方法入門

已知該産品的厚度,必須控制在27mm以内,但是每個零件有一定的機率,厚度會超出誤差。請問有多大的機率,産品的厚度會超出27mm?

蒙特卡羅方法入門

取100000個随機樣本,每個樣本有8個值,對應8個零件各自的厚度。計算發現,産品的合格率為99.9979%,即百萬分之21的機率,厚度會超出27mm。

證券市場有時交易活躍,有時交易冷清。下面是你對市場的預測。

如果交易冷清,你會以平均價11元,賣出5萬股。

如果交易活躍,你會以平均價8元,賣出10萬股。

如果交易溫和,你會以平均價10元,賣出7.5萬股。

已知你的成本在每股5.5元到7.5元之間,平均是6.5元。請問接下來的交易,你的淨利潤會是多少?

取1000個随機樣本,每個樣本有兩個數值:一個是證券的成本(5.5元到7.5元之間的均勻分布),另一個是目前市場狀态(冷清、活躍、溫和,各有三分之一可能)。

蒙特卡羅方法入門

模拟計算得到,平均淨利潤為92, 427美元。

<a href="http://www.solver.com/monte-carlo-simulation-example" target="_blank">monte carlo simulation tutorial</a>

<a href="http://blog.sina.com.cn/s/blog_7e4eb7870100r3tn.html" target="_blank">蒙特卡羅(monte carlo)模拟的一個應用執行個體</a>

(完)