飞鱼海

Monte Carlo方法简介(转载)

Monte Carlo方法简介(转载)
       今天向大家介绍一下我现在主要做的这个东东。 Monte Carlo方法又称为随机抽样技巧或统计实验方法,属于计算数学的一个分支,它是在上世纪四十年代中期,为适应当时的曼哈顿计划需求而在美国Los Alamos实验室发展起来的,说白了就是美国为了造原子弹才逼出来的。Monte Carlo方法与一般的计算方法有很大的区别,一般计算方法对解决多维或因素复杂的问题非常困难,而Monte Carlo方法对解决这类问题却比较简单,因此Monte Carlo方法自从它诞生之日起就得到了快速的发展,现以发展成为计算数学中一个不可缺少的重要组成部分。 


       Monte Carlo方法创始人主要是这四位:Stanislaw Marcin Ulam, Enrico Fermi, John von Neumann(学计算机的肯定都认识这个牛人吧)和 Nicholas Metropolis。 Stanislaw Marcin Ulam是波兰裔美籍数学家,早年是研究拓扑的,后因参与曼哈顿工程,兴趣遂转向应用数学,他首先提出用Monte Carlo方法解决计算数学中的一些问题,然后又将其应用到解决链式反应的理论中去,可以说是MC方法的奠基人;Enrico Fermi是个物理大牛,理论和实验同时都是大牛,这在物理界很少见,在“物理大牛的八卦”那篇文章里提到这个人很多次,对于这么牛的人只能是英年早逝了(别说我嘴损啊,上帝都嫉妒!);John von Neumann可以说是计算机界的牛顿吧,太牛了,结果和Fermi一样,被上帝嫉妒了;Nicholas Metropolis,希腊裔美籍数学家,物理学家,计算机科学家,这个人对Monte Carlo方法做的贡献相当大,正式由于他提出的一种什么算法(名字忘了),才使得Monte Carlo方法能够得到如此广泛的应用,这人现在还活着,与前几位牛人不同,Metropolis很专一,他一生主要的贡献就是Monte Carlo方法。 
Monte <wbr>Carlo方法简介Monte <wbr>Carlo方法简介Monte <wbr>Carlo方法简介Monte <wbr>Carlo方法简介
 
       Monte Carol方法这个名字比较有意思,为什么叫Monte Carlo呢?这得从Monte Carlo方法的历史讲起。原来卓卓跟我吹牛b的时候提到过一个地方叫摩纳哥,在法国(不是摩洛哥哦,这个在北非),Monte Carlo是摩纳哥的一个地名,有人说摩纳哥只有两个地方,除了皇宫就是Monte Carlo……MonteCarlo与拉斯维加斯、澳门并称为世界三大赌城。Ulam说之所以叫做Monte Carlo方法,是为了纪念他的舅舅,而他的舅舅是个赌徒,经常去Monte Carlo赌钱,所以就叫做Monte Carlo方法,这个理由确实比较诡异,不过如果了解Monte Carlo方法原理的话,我们会发现Monte Carlo方法其实就是个赌博游戏,叫这个名字还是很贴切的。 
  
      现在来看一下为什么说MC方法是赌博游戏,这要从它的基本思想入手。MC方法的基本思想是:当所要求解的问题是某种事件出现的概率或者是某个随机变量的期望时,可以通过某种实验的方法得到该事件出现的概率,或者这个随机变量的平均值,并用它们作为问题的解。应用MC方法解决实际问题时,并不是像通常的数理统计方法那样通过真实的实验来完成的,而是抓住事物运动过程的数量和几何特征,利用数学方法加以模拟,即进行一种数字模拟实验,模拟实验的次数越多,其模拟结果就越接近于真实值。对于特定的数学或物理问题,若要得到较为准确的模拟结果,往往需要上万次,甚至数十万、数百万次的数字模拟实验,其运算量相当庞大,因此在电子计算机没有发明以前,MC方法本身并没有多大的发展与应用。在电子计算机出现和飞速发展以后,利用MC方法进行大量的数字模拟实验成为可能,MC方法终于迎来了发展的春天。由此可见,MC方法是与电子计算机的发展紧密的联系在一起的,是数理统计与电子计算机相结合的产物。 
  
上一段说的比较抽象,下面可以举个简单的例子:比如说要计算圆周率pi,用MC方法解决此问题的思路如下: 
  
x=(random#)*r 
y=(random#)*r 
dist=sqrt(x^2 + y^2) 
if dist.from.origin (less.than.or.equal.to) r 
let hits=hits+1 
  
      上面这段话可以这样理解:在一个边长为r的正方形内均匀投点,然后判断所投点是否落在与此正方形内切的半径为r的圆内,若点落在圆内,则记录之,否则不记录。那么,如果所投的点足够多且足够均匀的话,落在圆内的点的数目除以总投点数既为圆面积与正方形面积之比,知道了这个值,我们就能够得出pi的值了。 
  
      上面这个例子只是为了说明MC方法的原理,并不能体现出MC方法的优越性,我们来想想下面这个稍微复杂点的例子:扑克摆别扭大家都玩过吧?如果操作无误的话,问一副扑克摆别扭能解开的几率有多少?这个只要制定好规则,用MC方法解就非常easy,别的方法就无法想象了………………………………………… 
  
      由此可见,MC方法说白了其实就是暴力破解法,用咱们的话讲就叫做“简单粗暴”!所以有人把MC方法叫做“最后的方法”。但往往就是这种简单粗暴的方法在处理复杂问题时是非常有效的,上面讲的只是一个最简单的例子,类似的,我们还可以通过MC方法计算各种复杂变态的定积分,方法与上面算pi的手段完全一样。 
  
      现在MC方法已经应用于许多领域,在物理方面,通过MC方法可以模拟粒子与物质相互作用时,发生的各种反应,并对我们感兴趣的物理量进行统计,这里面许多物理量是通过实验手段无法测量的;在金融学领域,好多大公司都用MC方法计算风险投资的风险系数;前几天还看到一篇埃及人的文章是用MC方法模拟埃及的洪灾,然后指导如何修水坝的……总之,只要建立的模型足够好,MC得出的结论就非常可信,还能模拟出统计涨落呢,太逼真了。

    Monte Carlo方法的基本思想很早以前就被人们所发现和利用。早在17世纪,人们就知道用事件发生的"频率"来决定事件的"概率"。19世纪人们用投针试验的方法来决定圆周率π。本世纪40年代电子计算机的出现,特别是近年来高速电子计算机的出现,使得用数学方法在计算机上大量、快速地模拟这样的试验成为可能。
为了说明Monte Carlo方法的基本思想,让我们先来看一个简单的例子,从此例中你可以感受如何用Monte Carlo方法考虑问题。
例:比如y=x^2(对x)从0积到1,结果就是下图红色部分的面积:
函数图像

函数图像

注意到函数在(1,1)点的取值为1,所以整个红色区域在一个面积为1的正方形里面。所以所求区域的面积即为在正方形区域内任取点,点落在所求区域的概率。这个限制条件是y<x^2。用matlab模拟,做一百万次(即共取1000000个点),结果为0.3328,与用积分法算出来的三分之一非常接近。

4三个主要步骤

1。构造或描述概率过程: 对于本身就具有随机性质的问题,如粒子输运问题,主要是正确描述和模拟这个概率过程,对于本来不是随机性质的确定性问题,比如计算定积分,就必须事先构造一个人为的概率过程,它的某些参量正好是所要求问题的解。即要将不具有随机性质的问题转化为随机性质的问题。
2。实现从已知概率分布抽样: 构造了概率模型以后,由于各种概率模型都可以看作是由各种各样的概率分布构成的,因此产生已知概率分布的随机变量(或随机向量),就成为实现蒙特卡罗方法模拟实验的基本手段,这也是蒙特卡罗方法被称为随机抽样的原因。最简单、最基本、最重要的一个概率分布是(0,1)上的均匀分布(或称矩形分布)。随机数就是具有这种均匀分布的随机变量。随机数序列就是具有这种分布的总体的一个简单子样,也就是一个具有这种分布的相互独立的随机变数序列。产生随机数的问题,就是从这个分布的抽样问题。在计算机上,可以用物理方法产生随机数,但价格昂贵,不能重复,使用不便。另一种方法是用数学递推公式产生。这样产生的序列,与真正的随机数序列不同,所以称为伪随机数,或伪随机数序列。不过,经过多种统计检验表明,它与真正的随机数,或随机数序列具有相近的性质,因此可把它作为真正的随机数来使用。由已知分布随机抽样有各种方法,与从(0,1)上均匀分布抽样不同,这些方法都是借助于随机序列来实现的,也就是说,都是以产生随机数为前提的。由此可见,随机数是我们实现蒙特卡罗模拟的基本工具。 建立各种估计量: 一般说来,构造了概率模型并能从中抽样后,即实现模拟实验后,我们就要确定一个随机变量,作为所要求的问题的解,我们称它为无偏估计。
3。建立各种估计量,相当于对模拟实验的结果进行考察和登记,从中得到问题的解。常用的估计量有无偏估计,最大似然估计,渐进有偏估计等,使用最多的是无偏估计。

5模拟的特点

蒙特卡罗方法与一般计算方法有很大区别,一般计算方法对于解决多维或因素复杂的问题非常困难,而蒙特卡罗方法对于解决这方面的问题却比较简单。其特点如下:
· 直接追踪粒子,物理思路清晰,易于理解。
· 采用随机抽样的方法,较真切的模拟粒子输运的过程,反映了统计涨落的规律。
· 不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法。
· MC程序结构清晰简单。
· 研究人员采用MC方法编写程序来解决粒子输运问题,比较容易得到自己想得到的任意中间结果,应用灵活性强。
· MC方法主要弱点是收敛速度较慢和误差的概率性质,其概率误差正比于,如果单纯以增大抽样粒子个数N来减小误差,就要增加很大的计算量。
近十年来,蒙特卡罗方法发展很快,从1983年到1988年期刊论文数量增长了五倍,有几本好书是关于电子? 光子蒙特卡罗问题的[注1],蒙特卡罗方法的代码被认为是黑匣子,它已成为计算数学中不可缺少的组成部分,这主要是因为以下原因:
· 传统的分析方法受到了问题复杂性的限制。
· MC方法直观,对实验者很有吸引力。
· 计算机变得更快更便宜。
· 量子理论的发展为我们提供了辐射与物质相互作用的截面数据。

posted on 2013-10-26 09:15  飞鱼海  阅读(812)  评论(0编辑  收藏  举报