蒙特卡羅方法概述

計算方法的名稱大多是與數學術語相關的,唯有蒙特卡羅方法名稱特殊。大家知道,蒙特卡羅是地中海北岸的一個風景優美的城市,它是一座世界上有名的賭城。饒有興趣的是科學家們競用它命名了一種數學計算方法。那麼,賭博與隨機模擬(亦稱統計試驗)有什麼關係呢?其實,賭博本身就可以看作是一種最簡單的統計試驗。例如擲骰子,一個均勻正方形的六面體,它在每一面刻有1到6的六個數碼,如果要想知道擲骰子時某一面向上機會的多少,既可以用數學理論來證明,也可以用多次投擲方法來驗證。只要投擲的數目足夠多,就一定能證明每一面朝上的機會是1/6。類似扔硬幣正反面朝上機會顯然各都是1/2。有人做了30000次投擲試驗,統計的結果正面向上的次數是14994次。也就是說,十分接近1/2了。這二個例子告訴我們,少量的試驗結果可隨是無規律的.數學上稱隨機性,而大量的試驗就能檢驗或發現某些規律,也就是說有必然性,數學上叫統計性。對賭博來說,既有隨機性也有統計性。

    當然,實際問題要比擲骰子和硬幣複雜得多。但是,統計數學的現象和規律是類似的,由於這種方法受到賭博的啓示,所以人們就形象地用賭博城蒙特卡羅來命名這種計算方法。獨具風格的計算方法。

    MC(Monte Carlo)是上世紀四十年代,Los Alamos實驗室(LANL)曼哈頓計劃中由Stanislaw Ulam和Von Neumann兩位數學家倡導和創建的一種獨具特色的數值模擬方法。爲體現方法的內涵,他們用世界著名賭城的名字將其命名爲Monte Carlo方法。

    MC方法也被稱爲統計實驗方法,Monte Carlo藉助計算機,發展功能強大和計算高效的程序是應用的前提。MCNP即是蒙特卡羅大型科學計算程序,用於處理連續能量、時間相關、三維幾何、中子-光子-電子輻射輸運問題。

蒙特卡羅方法不僅名稱獨特,它的計算模擬過程也獨具風格,因而它常給人們帶上一層神祕的色彩。但是,分析這種方法的基本特點就會發現,它的規律並不難掌握。用蒙特卡羅求解問題首先要建立一個概率模型或隨機過程,使它的參數等於問題的解,然後通過對模型或過程的觀察或抽樣試驗來計算所求參數的統計特徵,最後再輸出所求解的近似值。解的精度可以用估計值的標準誤差來表示。根據概率論的定理,只要重複抽樣隨次數N趨向無窮大時,則其隨機變量的算術平均將精確等於它的數學期望,即所求問題的解。當然,N實際上不可能取無窮大,但只要取到與問題相應的足夠大便可十分逼近於所求的真實解。反之,N小了就得不到正確的結果。這就決定了只有在高速電子計算機上纔能有效地應用這種方法。蒙特卡羅方法既可求解隨機性問題,又可以求解確定性問題。所謂隨機問題,是指問題的過程或參量受到隨機性的影響,當然最後結果遵從統計規律,是確定的。例如,在覈反應或核武器爆炸中,中子或伽瑪射線在介質中的輸運問題是隨機性問題。因爲粒子和介質元素髮生什麼相互作用,碰撞後如何運動都有隨機性。我們可以用蒙待卡羅方法直接模擬這種輸運過程,只要足夠多的抽樣,便可獲得精確解。1946年,美國科學家首先在電子計算機上對中子連鎖反應進行了模擬,並且把第一個實驗程序命名爲蒙特卡羅程序。

    因此,蒙特卡羅方法首先在覈科學研究中得到應用。其他如運籌學中的庫存問題,隨機服務系統中的排隊問題等都屬隨機性問題;另一類是確定性問題,如計算定積分、解偏微分方程、線性代數方程等,它們可以用差分法、數值積分法等方法求解,但同樣也可以用蒙特卡羅方法求解。在某些情況下,蒙特卡羅方法還更有優越性,如統計物理中常遇到的計算某物理系統的平均量,象內能、自由能、熵等均是高維積分,用通常數值積分法十分困難,而用Metroplis提出的特殊蒙特卡羅方法則能精確高效地求解出結果,從而使其在統計物理、凝聚態物理研究中成爲一種標準算法。

MC方法主要應用於粒子輸運問題上,它的適用範圍分爲實驗覈物理、反應堆核物理以及粒子輻射效應、抗輻射加固等方面。

    MC方法求解粒子輸運問題時,應該遵循四個主要的步驟:弄清楚粒子輸運的全部物理過程;確定適用的MC技巧;確定描述粒子運動的狀態參數和狀態序列;確定粒子輸運過程中有關分佈的抽樣方法。

    MC模擬粒子輸運過程包括以下幾個物理過程,它對於我們理解MCNP程序的運算是很有用的。模擬粒子輸運過程大致分爲:源分佈抽樣,確定輸運粒子的初始狀態;空間、能量和運動的隨機遊動過程,確定粒子輸運過程中的狀態;記錄貢獻與分析結果。

    MC統計模擬方法可以採用一些基本技巧,包括直接模擬方法、簡單加權方法、統計估計方法、指數變換方法等,通過程序設計者對模擬程序的優化,可以極大地提高MCNP的能力。

蒙特卡羅方法有其獨特的優點,第一,與所求解問題的幾何維數及問題條件關係不大,幾何越複雜,它相對優點越明顯。例如,在粒子輸運問題中,用差分法解二維問題比一線問題幾乎要多4倍以上的時間,而採用蒙特卡羅方法則幾乎不受影響。第二,適應性強。例如,積分域形狀特殊時,用一般積分法求解困難大,而蒙特卡羅法則不受影響,對問題也不一定要進行離散化,可連續處理,如粒子能量可以連續跟蹤模擬等。第三,程序結構簡單,所需計算機存貯單元比其他數值方法少,容易建立通用性很強的應用軟件。應當指出,蒙特卡羅計算結果的收斂性與抽樣數N的平方根成反比,這就決定了要得到高精度解就必須用高速電子計算機實現大N抽樣。但是它的誤差只依賴於標準方差σ及。因此,要節省時間就既要研究各種模擬方法以減少方差、提高效率,所以降低方差的各種抽樣技巧便成爲研究該方法的重要內容。

蒙特卡羅方法有很強的適應性,問題的幾何形狀的複雜性對它的影響不大。該方法的收斂性是指概率意義下的收斂,因此問題維數的增加不會影響它的收斂速度,而且存貯單元也很省,這些是用該方法處理大型複雜問題時的優勢。因此,隨着電子計算機的發展和科學技術問題的日趨複雜,蒙特卡羅方法的應用也越來越廣泛。它不僅較好地解決了多重積分計算、微分方程求解、積分方程求解、特徵值計算和非線性方程組求解等高難度和複雜的數學計算問題,而且在統計物理、核物理、真空技術、系統科學、信息科學、公用事業、地質、醫學,可靠性及計算機科學等廣泛的領域都得到成功的應用。

爲對mc方法有個初步的認識先看個用mc方法求圓周率的例子。

   設園的半徑是r,圓心位於xoy平面的(r,r)處,且內切於邊長爲2r的正方形中,那麼顯然正方形的面積是S1=4r×r,用mc方法計算圓的面積的基本思想是隨機的正方形範圍內部畫點,若共畫了N個點,而落在圓內部的有M個點,當N足夠大的時候,圓的面積可爲s=M/N*S1,基本方法是首先產生兩個隨機數x和y其值域爲[0,2r],然後進行判斷(x,y)是否落在圓內

(x-r)2+(y-r)2<r2

記錄下總的點數N和落在圓中的點數M,則圓的面積爲S=4r2M/N,從而得pi=4×M/N

這裏要注意兩點:第一,兩個隨機數要是在矩形範圍內均勻分佈得。大部分計算機語言提供了隨機數發生器,可產生0-1之間得均勻隨機數,經過適當得變換不難變成任意值域得均勻隨機數。第二,隨機數得個頭N必須要足夠大。已確保一定得精度。負責由於統計漲落過大而使得誤差很大,這是統計方法得自身得規律。

mc方法不僅能用於物理方程得數值計算,也可以用於物理過程得數字模擬。氫原子的電子雲模擬就是一個簡單的例證,由量子力學可以得知氫原子的s態波函數 ψ=ψ(r)只是半徑的函數,於θ,φ無關,而氫原子中的電子沿半徑r的分佈密度即電子在半徑r處單位厚度球殼內出現的機率

D=4×pi×r2×ψ2

習慣上把這種分佈稱作爲電子雲。

氫的基態1s態(n=1,l=0,m=0),有

D=1/(a1*a1*a1)4×r2×e-2r/a1

Dmax=1.1

r0=0.25nm

其中a1=5。29×10-2 nm,是D的最大值Dmax處的r值,其值是與波爾半徑相同,r0是Dmax處的r值,其值與波爾半徑相同。r0是D收斂處的r值,即D的收斂點。

氫的2s態(n=2,l=0,m=0)有

D=1/(8×a1*a1*a1)×(2-r/a1)2×e-r/a1

Dmax=0.14

r0=1.0nm

氫原子的3s態(n=3,l=0,m=0)有

D=1/(81×81×3×a1*a1*a1)[27-18*r/a1+2*(r/a)2]×e-2r/3a1

Dmax=0.2

r0=2.0nm

氫的電子雲的模擬是依據上述的分佈函數用繪圖點的密度來描繪電子的概率分佈函數,在氫原子例子中設隨機數發生器可產生0-1的隨機數,記做rand(k)(k=1,2,3……),首先利用一個隨機數rand(1)來產生一個隨機的電子半徑軌道

r=r0*rand(1)

顯然0<r<r0,由r計算出D(r)。再產生一個隨機的概率判據D0=Dmax* rand(2)進行判斷,如果D(r)<D0,則從新開始,否則再產生一個隨機的角度值

θ=2*pi*rand(3)。最後計算要描繪的點的座標x=srcosθ y=srsinθ。其中s是控制圖形的尺寸因子,與每納米點數相對應。繪出點(x,y)後再從新上述的過程,經過足夠多的次數電子雲的圖貌就由點的疏密反應出來了。



隨機數的真與僞

   蒙特卡羅方法模擬問題都離不開隨機抽樣,於是就需要產生各種概率分佈的隨機變量,其中最簡單也最重要的隨機變量是在[0,1]上均勻分佈的隨機變量。我們把[0,1]上均勻分佈隨機變量的抽樣值稱之爲隨機數。因此在電子計算機上如何產生這種“真正”的隨機變量,就變得特別重要。

   隨機抽樣的一種方法是物理方法,它應用某種物理現象的隨機性,在計算機上設有專門的附件實現,稱爲“隨機數發生器”。它所產大的隨機數倒是“真”的隨機數,但其缺點是過程一去不復返,不能進行重複檢查,而且設備費用昂貴,不實用。另一種是目前廣泛使用的數學方法,它用迭代過程實現,每個相鄰數由其前一個數,或前一組的數通過某些算術或邏輯運算求得。顯然,這樣的一系列數就不是真正的隨機數,但它們只要能通過一系列局部隨機性檢驗,就可當作隨機數來使用。科學家們定義這種數爲“僞隨機數”,其優點是在計算機中只要貯存幾個初值,其他數就可通過迭代算得,速度快,費用低,可以重複。這正適合蒙特卡羅模擬計算需要,“僞”的就比“真”的有用。

   產生僞隨機數的方法又是一門特殊學科,要涉及數論等理論,這裏就不願詳述了。選擇方法必須注意使產生的僞隨機數序列有隨機性好、在計算機上容易實現、省時、週期長等特點。現在,各種大、中、小型電子計算機的軟件系統中一般都有產生僞隨機數的專用於程序,連微機及計算器中也有簡單的僞隨機數產生子程序,可見用途之廣。日益廣泛的應用

2、假隨機數的產生

   真的隨機數如同擲骰子一樣,產生1-6範圍內的隨機整數,抽獎用的搖號碼機產生的0-9範圍內的隨機整數,這些真的隨機數除了統計規律外無其他規律可循。假隨機數就是用某種算法給出的似乎隨機的數,既然數的給出是按照某種算法的那麼就有某種規律,那麼這些數必然有一定的週期,設週期是n那麼n+1就一定是第一個數了,此後均要一次重複出現。當然如果週期足夠大,可使在整個使用過程中不至於呈現週期性,那麼假隨機數也是使用的。例如,讓計算機的假隨機數發生器其週期大於機器的記憶單元數。此外假隨機數的統計性質也是表徵隨機數品質的又一個重要的指標。均勻分佈的隨機數,即要求數的出現是隨機均勻的,也要求數的分佈是均勻的。至於評價數的均勻,這裏不作介紹。

2、1 均勻隨機數的產生

產生均勻隨機數常用冪剩餘法,例如可按如下的公式產生隨機數

xn=cx n-1(modN)

或者寫成xn=cx n-1-Nint(cx n-1/N)

其中c、N爲給定的常數,給出x0後,就可以用上式依次給出x1,x2……等等,如何確定常數c、N、X0是十分關鍵的問題,人們仍然在不斷的研究中,現面給出c、N和X0的一般原則。N的取值一般取N=2 m-1,其中m爲計算機的二進制數的字長,N-1一般取計算機能表現出來的最大整數,如字長16位的N=2^15=32768;字長32位的 N=2^31=2147483648,c的取值一般取c=8*M+-3,其中M位任一正整數,如有取 c=16897,c=65539,c=397204099等,建議取c~N1/2,這樣統計性比較好,關於x0的取值,一般取x0爲奇數,如x0=13。可以檢驗其他條件不變,x0是奇數時,週期是T,偶數時週期時T/2。如N=64,c=5,x0=2則得

x1=10

x2=50

x3=58

x4=34

x5=42

x6=18

x7=26

x8=2

如此可見x8=x0,可見這列數字得週期是8,若令x0=1,其餘不變,則數列爲

5,25,51,49,53,9,45,33,37,57,29,17,21,41,13,1

則週期爲16

若按照上式產生得隨機序列其值域爲0~N-1,若要產生0~1之間的得隨機數只要把每個隨機數在除以N即可。

2、2隨機性統計檢驗

一個好得隨機數發生器或一個好得隨機數生成程序要有兩個條件

1、生成的隨機數有足夠長的週期。2、生成的隨機數列應當有真正隨機序列的統計性質。其週期的長短比較容易測試和判斷,爾統計性質的優劣則不那麼簡單了。下面着重討論統計性質的兩種常用的檢驗方法,頻數分佈檢驗和行程頻數檢驗。

先討論頻數分佈檢驗。對於一個均勻分佈的隨機數發生器,設所產生的隨機數序列的值域爲[0,1],則所產生的隨機數字應與從0~1之間均勻的頻數分佈一致,爲檢驗頻數分佈情況,可按畫統計直方圖的方法,將整個至於分成M個寬度相等的子區間,設xi是第i子區間內出現的隨機數的個數,即第i個子區間的頻數,則所有子區間中隨機數的個數的平均頻數

鬱悶,沒有公式編輯器,這後面的公式就不介紹了,大概瞭解下算了

就是每一個子區間中出現x個數字的機率要服從高斯分佈規律

行程頻數檢驗中的行程是指數字序列中單調上升或單調下降的連續數字串中數字的個數。由統計規律可知,對一個真正隨機數序列其中行程長度k出現次數的期望值爲E(K)

k=1,E(K)=1/12*(5N+1)

k=2,E(K)=1/60*(11N-14)

……

k<N-1,E(K)=2/(k+3)!*[N(k2+3k+1)-(k3+3k2-k-4)]

行程長度k爲任意值E(K)=1/3(2N-1)

檢驗的方法就是輸出給定隨機數序列中出現的各種行程長度的次數,並與上述的期望值想比較,符合程度好的隨機性好。

上述的兩種檢驗方法都獲得滿意結果的隨機數,一般來說是可以信任的均勻分佈的隨機數序列。但仍然不是真正的隨機數,因爲並不能保證他們滿足真正隨機數的其他統計性質。

3、用mc方法計算積分

已知函數f(x)在區間[a,b]上連續,A點x=a,B點x=b,其函數曲線f(x)-x,如圖。

圖片點擊可在新窗口打開查看此主題相關圖片如下:

下面介紹用mc方法來計算對f(x)的在[a,b]上的定積分

如圖在圖上做一個矩形,其寬度是b-a,高度是f(x)在[a,b]上的最大值f(m),那麼矩形的面積就是s1=(b-a)*f(m),給出兩個隨機數xi和yi,且滿足

a<=xi<=b,0<=yi<=f(m),則所有的隨機點都落在圖中的矩形內。如果不等式yi<f(xi)成立,那麼隨即點(xi,yi)還落在矩形中的陰影區域內。

   總共設產生了N個隨機點,落在陰影中的點數爲M,那麼當N足夠大的時候對f(x)求區間[a,b]上的積分就換算成了求陰影的面積s2=M/N*(b- a)*f(m)。其實這和前面計算圓的面積沒有本質的差別。對於比較複雜的問題,其基本處理方法還是相同的。如用mc方法計算一個具有空洞的球體質量和質心座標等。

   隨着電子計算機技術的發展,大容量、高速度新型計算機不斷問世,蒙特卡羅方法越來越明顯地發揮它的威力。上面已經說到,它首先是在研製核武器及核反應過程中發展起來的。如今,在各種新式武器的研製中,包括核武器、強激光武器、粒子束武器等都得到了廣泛應用,而且在覈電站設計、聚變堆研究中也發展了成套的蒙特卡羅程序軟件。另外,在軍事科學技術研究中也求助於蒙待卡羅方法:在實戰前,對作戰雙方的軍事實力、政治、經濟、地理、氣象等因素進行模擬,但這些因素可能隨時發生變化,如果在計算機上進行“戰鬥”模擬,計算機就可以在很短時間內把一個很長的戰鬥過程模擬下來,告訴我們可能的結果。這樣,軍事指揮人員就可以進行成千上萬次的戰鬥模擬,從中選擇對自己一方量有利又最穩妥的作戰方案,贏得戰爭的勝利。這相當於用計算機進行大規模的軍事演習。現在世界上已有不少國家採用這種模擬方法,並在實際戰鬥中取得了成功。蒙特卡羅方法在國民經濟、科學研究中亦已被廣泛應用。在航天飛行器設計,稀薄氣體分子動力學計算、高能物理、理論物理、凝聚態理論、材料科學、氣象預報、可靠性工程及風險評價、地質探礦乃至醫學科學中都大量使用了此種方法。我們可以毫不誇張地預言,隨着計算機技術包括硬件、軟件的新發展,蒙特卡羅方法應用的領域及深度還將有更大的發展。同時,人們也不會再感到它深奧莫測,而是得心應手的科學研究手段。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章