袁佳婧
摘 要:蒙特卡羅模擬是通過計算機模擬實際發(fā)生的事情。通過蒙特卡羅模擬能計算出相應(yīng)事件發(fā)生的概率,模擬與計算過程有效、可行、易理解。其基本思想是,將各種隨機事件的概率特征與模擬聯(lián)系起來,用試驗的方法確定事件的相應(yīng)概率與數(shù)學(xué)期望。應(yīng)用蒙特卡羅模擬方法解決了實際概率問題,為解決用傳統(tǒng)方法不能解決的問題,提供了有意義的參考。主要介紹蒙特卡羅方法及基本原理,并通過實例說明蒙特卡羅方法在數(shù)學(xué)建模中的應(yīng)用。
關(guān)鍵詞:蒙特卡羅模擬;隨機試驗;正態(tài)分布;數(shù)學(xué)建模
中圖分類號:TB 文獻(xiàn)標(biāo)識碼:Adoi:10.19311/j.cnki.1672-3198.2019.11.106
1 蒙特卡羅方法與基本原理
蒙特卡羅方法又稱為計算機模擬方法,它是以概率統(tǒng)計理論為基礎(chǔ)的一種方法。該方法與一般數(shù)值計算方法有本質(zhì)區(qū)別,蒙特卡羅模擬采用的是頻率近似概率的數(shù)學(xué)思想,來解決物理、數(shù)學(xué)、生產(chǎn)管理或工程技術(shù)等方面的問題。蒙特卡羅方法的起源,最早可以追溯到18世紀(jì)下半葉時,由Buffon提出的用試驗的方法求值,即:蒲豐投針問題。蒲豐投針問題的解決方法就是蒙特卡羅模擬的典型運用。當(dāng)時的投針試驗是利用人工進行實際操作,然后統(tǒng)計試驗結(jié)果,最后得出結(jié)論。但是人工進行大量實際的隨機試驗,一方面成本較高;另一方面統(tǒng)計結(jié)果的準(zhǔn)確率較低,因此只能稱Buffon試驗只能稱為近代統(tǒng)計模擬的雛形。隨著現(xiàn)今計算機技術(shù)的高速發(fā)展,蒙特卡羅模擬實驗已不再需要人工實際操作,通過計算機隨機模擬更加方便快捷,所得的估計值也更精確。
蒙特卡羅模擬方法求解概率問題的基本思想是:當(dāng)所求問題的解是某個隨機變量的數(shù)學(xué)期望或者某個事件的概率,或者是與數(shù)學(xué)期望、概率有關(guān)的量時,通過試驗的方法模擬事件的發(fā)生,求出該事件發(fā)生的頻率,計算所求參數(shù)的統(tǒng)計特征,最后給出近似值作為問題的解。
2 實際問題
校車在每個工作日,都會在A校區(qū)與B校區(qū)之間擺渡。李華家住B校區(qū)附近。校車從A校區(qū)到B校區(qū)的運行時間服從均值為30分鐘,標(biāo)準(zhǔn)差為2分鐘的正態(tài)隨機分布。校車大約中午13:00從A校區(qū)出發(fā),李華大約13:30步行到達(dá)B校區(qū),校車從A校區(qū)出發(fā)的時刻及概率如表1所示。
3 問題分析
記T1為校車從A校區(qū)出發(fā)的時刻,T2為校車從A校區(qū)到B校區(qū)運行的時間,T3為李華到達(dá)B校區(qū)的時刻。T1、T2、T3均是隨機變量,且T2~N(30,22),T1、T3的分布律如表所示:其中記中午13時為時刻t=0。
通過分析可知,此人能及時趕上校車的充分必要條件是:T1+T2>T3。由此得到,此人趕上校車的概率是P{T1+T2>T3}。
4 建立模型
利用蒙特卡羅方法隨機模擬校車出發(fā)時刻,校車車運行時間,李華到達(dá)B校區(qū)的時刻。然后判斷多次試驗中滿足上述充要條件的試驗有多少次。若在n次試驗中,有k次成功,則用頻率k/n作為李華能趕上校車的概率。當(dāng)n很大時,頻率值與概率值近似相等。
設(shè)r1,r2 是(0,1)區(qū)間上均勻分布的隨機數(shù)。則T1,T3的分布律的模擬公式為:
t1=0,0 令 t2 是服從正態(tài)分布N(30,22) 的隨機數(shù),則將t2 看成火車運行時間T2的觀察值。 在每次試驗中,產(chǎn)生兩個U(0,1) 的隨機數(shù)r1,r2,來構(gòu)造 t1,t3。產(chǎn)生一個N(30,22) 的隨機數(shù)r3,來構(gòu)造 t2。當(dāng) t1+t2>t3,認(rèn)為試驗成功(能夠趕上校車)。若在n次試驗中,有k次成功,則用頻率k/n 作為此人趕上火車的概率。當(dāng)n很大時,頻率值與概率值近似相等。 5 模型求解 下面是利用python語言進行蒙特卡羅模擬的程序。其中montefun()是自定義的蒙特卡羅模擬函數(shù)。 import numpy as np def montefun(): t1 = np.random.rand() t2 = np.random.normal(30,2) t3 = np.random.rand() arrtime1=0 arrtime2=t2 arrtime3=0 if t1<0.7: arrtime1=0 elif 0.7<=t1<0.9: arrtime1=5 else: arrtime1 = 10 if t3 < 0.3: arrtime3 = 28 elif 0.3<= t3 <0.7: arrtime3 = 30 elif 0.7<= t3 < 0.9: arrtime3 = 32 else: arrtime3 = 34 return arrtime1,arrtime2,arrtime3 if __name__ == "__main__": t=0 f=0 for i in range(10000): t1,t2,t3 = montefun() if (t1 +t2) > t3: t+=1 else: f += 1 print (float(t)/10000) 程序運行的最后結(jié)果為:0.6317,故李華可以趕上校車的概率是0.6317。 6 模型推廣 眾所周知,在實際生活中有很多概率事件,這些事件可能沒有明確的概率分布。這種情況下,蒙特卡羅模擬是最有效且直接的方法。 我們都玩過套圈圈的游戲:游戲者拿著圈,去套擺放在地上的玩具,如果套中即可拿走。這個游戲貌似很誘人,但事實上投圈游戲攤的老板是穩(wěn)賺不賠的?,F(xiàn)在我們用蒙特卡羅模擬計算能套中的概率,證明這個事實。 假設(shè)目標(biāo)物品中心點的坐標(biāo)為(0,0),目標(biāo)物品的半徑為5cm。下面用python代碼畫出目標(biāo)物品坐標(biāo)圖。 import matplotlib.pyplot as plot import numpy as np import matplotlib.patches as mpts target_circle = mpts.circle([0,0],radius=5,edgecolor='r',fill=False) plot.ylim(-80,80) plot.xlim(-80,80) plot.axes().add_patch(circle_target) plot.show() 代碼運行后得到目標(biāo)物品,如圖1所示。 對此我們假設(shè)投圈的半徑為8cm。投圈中心點圍繞目標(biāo)物品中心點呈二維正態(tài)分布,且假設(shè)其均值和標(biāo)準(zhǔn)差分別為:μ=0cm,σ=20cm。模擬1000個參與游戲者每人投圈1 次,即模擬投圈過程1000次。用python代碼完成模擬的程序如下。 N=1000 u,beta = 0,20 points = u + beta * np.random.randn(N,2) plot.scatter ( [x[0] for x in points],[x[1] for x in points],c=np.random.rand(N),alpha=0.5) 運行代碼之后,得到的投圈中心點的分布圖如圖2所示。 計算1000次投圈的過程中,投圈能夠套住目標(biāo)物品的概率。用python代碼完成計算:print(len([xy for xy in points if xy[0] ** 2 + xy[1] ** 2 < (8-5) ** 2])/N)。 代碼執(zhí)行后輸出的結(jié)果值為0.012??梢越忉尀橥度?000次,其中只有12次能夠套住物品。這是個小概率事件,所以不難理解投圈游戲的老板幾乎時穩(wěn)賺不賠了。 7 總結(jié) 蒙特卡羅方法的發(fā)明,無疑是人類思維史上的重大突破。通過一個隨機性的構(gòu)想,它打破了過去的思考空白區(qū),開啟了人類新的思維空間。 蒙特卡羅方法的使用過程可以歸納為以下三個主要步驟: (1)構(gòu)造概率過程:對于本身具有隨機性質(zhì)的問題,需要正確地描述和模擬這個概率過程;對于本來不是隨機性質(zhì)的確定性問題,需要事先人為地構(gòu)造概率過程,將不具有隨機性質(zhì)的問題轉(zhuǎn)化為隨機性質(zhì)的問題。 (2)利用概率分布抽樣:各種概率模型可以看作是由各種各樣的概率分布構(gòu)成的,所以實現(xiàn)蒙特卡羅方法模擬實驗的基本手段是產(chǎn)生已知概率分布的隨機變量。然后依據(jù)概率分布進行隨機抽樣模擬概率過程。 (3)建立估計量:實現(xiàn)模擬實驗后確定一個隨機變量,作為所要求的問題的解。蒙特卡羅方法通過構(gòu)造符合一定規(guī)則的隨機數(shù)來解決各種實際問題。對于那些由于計算過于復(fù)雜而難以得到解析解或者根本沒有解析解的問題,蒙特卡羅方法是一種有效的求出數(shù)值解的方法。 蒙特卡羅模擬方法的優(yōu)點是能夠比較逼真地描述具有隨機性質(zhì)的事物的特點及物理實驗過程。受幾何條件限制小。程序結(jié)構(gòu)簡單,易于實現(xiàn)。是中學(xué)生入門數(shù)學(xué)建模與實驗的不二選擇。 參考文獻(xiàn) [1]向東等.蒙特卡羅方法在核類本科專業(yè)的教學(xué)初探[J].價值工程,2010,(29). [2]孫榮恒.趣味隨機問題[M].北京:科學(xué)出版社,2008. [3]徐鐘濟.蒙特卡羅方法[M].上海:上海科學(xué)技術(shù)出版社,1985. [4]宋來忠等.數(shù)學(xué)建模常用方法與實驗[M].北京:科學(xué)出版社,2015. [5]汪曉銀等.數(shù)學(xué)建模方法入門及其應(yīng)用[M].北京:科學(xué)出版社,2018.