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而言,可能還不精確,但這是一種解決思路。當面對一個無從下手的問題,可行的解決思路都是一種突破。
實踐:在金融領域的應用
用隨機過程理論進行理論建模,在必要時使用Monte Carlo方法對模型做數值模擬。比如預測未來收益和走勢,當然這是非常粗淺的解釋,更為詳細的請閱讀下面的文獻,是經典之作,
當然,一個復雜的問題不可能依靠一個蒙特卡洛模擬就解決,需要大量的其他方法:比如隨機過程、機器學習相關方法、博弈論涉及的方法等綜合應用。
實踐:模擬彩虹

第四部分:引用文獻
- http://www.lancaster.ac.uk/pg/jamest/Group/intro3.html
- http://blog.csdn.net/v_JULY_v/article/details/6127953
- http://www.uta.edu/faculty/rcli/TopTen/topten.pdf
- http://introcs.cs.princeton.edu/java/stdlib/StdDraw.java
- http://www.rebeccapaton.net/rainbows/index.htm
- https://www.google.com/books?hl=zh-CN&lr=&id=aeAlBQAAQBAJ&oi=fnd&pg=PA1&ots=kLHdCmPN0q&sig=mBRJajxxDienFBZeSQHN0Rz6q1A#v=onepage&q&f=false
當然,還有更多的蒙特卡洛的應用,以后隨着時間積累將不斷補充。