二十世紀最有影響力的十大算法之一: 蒙特卡洛方法


 http://www.uta.edu/faculty/rcli/TopTen/topten.pdf

 

from SIAM News, Volume 33, Number 4

The Best of the 20th Century: Editors Name Top 10 Algorithms
By Barry A. Cipra

 

第一部分:算法介紹

 

 [1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos Scientific Laboratory, cook up the Metropolis algorithm, also known as the Monte Carlo method.]1946年,美國拉斯阿莫斯國家實驗室的三位科學家John von Neumann,Stan Ulam 和 Nick Metropolis共同發明,被稱為蒙特卡洛方法。它的具體定義是:在廣場上畫一個邊長一米的正方形,在正方形內部隨意用粉筆畫一個不規則的形狀,現在要計算這個不規則圖形的面積,怎么計算列?蒙特卡洛(Monte Carlo)方法告訴我們,均勻的向該正方形內撒N(N 是一個很大的自然數)個黃豆,隨后數數有多少個黃豆在這個不規則幾何形狀內部,比如說有M個,那么,這個奇怪形狀的面積便近似於M/N,N越大,算出來的值便越精確。在這里我們要假定豆子都在一個平面上,相互之間沒有重疊。(撒黃豆只是一個比喻。)

第二部分:算法特點

 

 

蒙特卡洛方法的偉大之處,在於對精確性問題無法解決的時候,利用“模擬”的思想來求解。 在各個領域得以應用。本質是模擬(simulation): 利用大量隨機輸入,產生各種輸出;結果的概率分布就是真實分布的“近似”。所以,輸入的分布是否隨機(目前計算機所能做的就是偽隨機,並不能產生真正的隨機分布),這個過程我們成為Sampling Random Variables。 

第三部分:應用和實踐

 實踐:計算機圓周率

蒙特卡洛方法可以用於產生接近pi的近似值。下圖顯示了一個帶有1/4圓在內的正方形單元、落在圈內(紅點)的點和總的投在正方形(紅和綠點)上的點的比率為:pi/4。這一過程稱為使用蒙特卡洛方法來仿真逼近pi實際值。

 

java實現:

 1 import java.util.Random;
 2 public class PiSimulation {
 3  
 4  private static Random rnd = new Random();
 5  public static void main(String args[])
 6  {
 7   //simulate pi
 8   int iter = 10000*10000;//0.1billion
 9   int totalIn = 0;
10   for(int i=0;i<iter;i++)
11   {
12    double x = rnd.nextDouble();
13    double y = rnd.nextDouble();
14    if(inCircle(x, y))
15     totalIn++;
16   }
17   System.out.println("simulate pi:"+((double)totalIn/iter*4));
18  
19  }
20  
21  public static boolean inCircle(double x,double y)//是否在1/4圓范圍之內
22  {
23   if((x*x+y*y)<=1)
24    return true;
25   return false;
26  }
27 }
28 
29 simulate pi:3.14143168
數值分析之模擬計算pi

 

雖然針對pi而言,可能還不精確,但這是一種解決思路。當面對一個無從下手的問題,可行的解決思路都是一種突破。

實踐:在金融領域的應用

用隨機過程理論進行理論建模,在必要時使用Monte Carlo方法對模型做數值模擬。比如預測未來收益和走勢,當然這是非常粗淺的解釋,更為詳細的請閱讀下面的文獻,是經典之作,

當然,一個復雜的問題不可能依靠一個蒙特卡洛模擬就解決,需要大量的其他方法:比如隨機過程、機器學習相關方法、博弈論涉及的方法等綜合應用。

實踐:模擬彩虹 

To simulate the generation of a rainbow using a probability experiment employing the Monte Carlo technique采用蒙特卡洛技術基於概率模型來模擬彩虹產生過程。

第四部分:引用文獻

  1. http://www.lancaster.ac.uk/pg/jamest/Group/intro3.html
  2. http://blog.csdn.net/v_JULY_v/article/details/6127953
  3. http://www.uta.edu/faculty/rcli/TopTen/topten.pdf
  4. http://introcs.cs.princeton.edu/java/stdlib/StdDraw.java
  5. http://www.rebeccapaton.net/rainbows/index.htm
  6. https://www.google.com/books?hl=zh-CN&lr=&id=aeAlBQAAQBAJ&oi=fnd&pg=PA1&ots=kLHdCmPN0q&sig=mBRJajxxDienFBZeSQHN0Rz6q1A#v=onepage&q&f=false

 

當然,還有更多的蒙特卡洛的應用,以后隨着時間積累將不斷補充。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM