|||
数学模拟与Monte Carlo 方法
Monte Carlo方法,也称为蒙特卡罗方法是一种计算机随机模拟方法,也就是随机抽样方法或基于“随机数”的统计试验方法,属于计算数学的一个分支。这种方法是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。它使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。把一些复杂的事件、过程和机理用大量的模拟实验来进行刻画和研究,最后得到一些结论。这些结论具有很高的参考价值。与它对应的是确定性算法。(参见书后参考文献)。
Monte Carlo方法的基本思想很早以前就被人们所发现和利用。早在17世纪,人们就知道用事件发生的“频率”来决定事件的“概率”。19世纪人们用投针试验的方法来决定圆周率π。这一方法成型于美国在第二次世界大战研制原子弹的“曼哈顿计划”。该计划的主持人之一,美籍匈牙利著名数学家,计算机科学的奠基人冯·诺伊曼(John Von Neumann 1903-1957)用驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,为它蒙上了一层神秘色彩。本世纪40年代电子计算机的出现,特别是近年来高速电子计算机的出现,使得用数学方法在计算机上大量、快速地模拟这样的试验成为可能。
这种方法的基本思想是:当所要求解的问题是某种事件出现的概率,或者是某个随机变量的期望值时,通过某种“试验”的方法,得到这种事件出现的频率,或者这个随机变数的平均值,并用它们作为问题的解。即以概率模型为基础,抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,用实验的结果来作为所讨论问题的近似解。就象民意测验结果不是全部登记选民的意见,而是通过对选民进行小规模的抽样调查得到的可能的民意。
Monte Carlo方法的一个关键点是随机数的计算机抽取。计算机不能产生真正的随机数,但在一般情形下,计算机产生的伪随机数是够用的,对于这方面的知识,读者可以参考这方面的专业书。
下面的简例可以了解这个方法是怎么用的。
例子考虑平面上的一个边长为1的正方形及其内部的一个形状不规则的“图形”(如下图的正方形中的黄色图形),如何求出这个“图形”的面积呢?Monte Carlo方法是这样一种“随机化”的方法:向该正方形“随机地”投掷N个点,其中有M个点落于“图形”内,则该“图形”的面积近似为M/N。
解模 对这个问题,古典的方法是大量地、随机地向这个正方形方框里投针,看看落在黄色图形里的针与所有所投出针的比例,我们可以估算出黄色图形的面积。用现代方法,我们可以用计算机抽取在方形中均匀分布的随机数,然后算出落在黄色图形里的随机数与所有抽出随机数的比例并以此来估算黄色图形面积。
Monte Carlo 方法已广泛地应用于许多应用领域,如计算物理学、金融计算、量子热力学计算、分子动力学等。Monte Carlo方法的优点是计算复杂性不再依赖于维数,并适用于研究复杂的和机理不清的体系。近代计算机的发展,使得该方法的适用范围大大扩展。我们可以用其仿真演习一个城市的灾难应对能力;也可以用其实测分析一套生产新型管理系统;还可以进行沙盘推演,模拟一场现代化战争。
其解题过程有下列三个主要步骤:
构造或描述概率过程:对于本身就具有随机性质的问题,主要是正确描述和模拟这个概率过程,对于本来不是随机性质的确定性问题,比如计算定积分,就必须事先构造一个人为的概率过程,它的某些参量正好是所要求问题的解。即要将不具有随机性质的问题转化为随机性质的问题。
实现从已知概率分布抽样:构造了概率模型以后,按照这个概率分布抽取随机变量(或随机向量),这一般可以直接由软件包调用,或抽取均匀分布的随机数构造。这样,就成为实现Monte Carlo方法模拟实验的基本手段,这也是Monte Carlo方法被称为随机抽样的原因。
建立各种估计量:一般说来,构造了概率模型并能从中抽样后,即实现模拟实验后,我们就要确定一个随机变量,作为所要求的问题的解,我们称它为无偏估计。建立各种估计量,相当于对模拟实验的结果进行考察和登记,从中得到问题的解。
我们先通过用Monte Carlo方法计算定积分来从理论上这个方法是如何工作的。
考虑积分 :
(略)......
下面,我们再来看几个用Monte Carlo方法建模解模的实例。
问题一 中子传墙问题 下图是一个中子穿过用于中子屏蔽的铅墙示意图。铅墙的高度远大于左右厚度。设中子是垂直由左端进入铅墙,在铅墙中运行一个单位距离然后与一个铅原子碰撞。碰撞后,任意改变方向,并继续运行一个单位后与另一个铅原子碰撞。这样下去,如果中子在铅墙里消耗掉所有的能量或者从左端逸出就被视为中子被铅墙挡住,如果中子穿过铅墙由右端逸出就视为中子逸出。如果铅墙厚度为5个单位,中子运行7个单位后能量耗尽,求中子逸出的几率。
这个问题并不复杂,但不容易找到一个解析表达式。而用模拟的方法求解却可以方便地得到满意的结果。下面我们给出这个问题的模拟程序。
(略)......
我们运行程序得出逸出铅墙的中子的可能性约为0.28%。
应用 有了这个数字,我们可以报告安全部门,如果数字不能达到安全要求,我们则要加厚铅墙。
问题二 图书馆借书问题 图书馆里有一本教学参考书,下表显示连续索借间隔时间和借出时间与概率之间的关系:
索借间隔时间(天) | 1 | 2 | 3 | 4 | 5 |
概率 | 0.1 | 0.4 | 0.3 | 0.1 | 0.1 |
借出时间(天) | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
概率 | 0.05 | 0.10 | 0.15 | 0.20 | 0.25 | 0.15 | 0.10 |
试求索借请求被拒绝的概率以及书本在外的时间比例。如果要将索借请求被拒绝的概率降到10%以下,图书馆应该准备该书几本拷贝?
分析 这个问题索借请求和持书时间都是随机量,要解决题设问题,比较好的方法是用Monto Carlo模拟......
算法伪代码和程序如下:
(略)......
运行结果可知仅需三个拷贝就可以满足需要。
问题三 理发师问题 理发店有三名理发师,平均每隔分钟有一名顾客到店,(即顾客到店时间间隔服从参数为10的指数分布)顾客按先到先理发的原则接受服务,平均理发时间服从区间[15,30]上的均匀分布. 假定理发师从上午10:00开始工作,但理发店从上午9:50起开门迎客,下午17:50关门,但之前已经在店内的顾客仍将接受服务. 顾客按先后次序排队. 只要有顾客在,理发师就不能休息;没有顾客时理发师休息. 早休息的理发师为新顾客服务. 试问这样一个排队系统的顾客平均等待时间,每个理发师一天内的理发次数及相应的劳动强度;理发店的营业时间分别为多少?
(略)......
在该次模拟中,总服务时间为491分钟,劳动强度为0.7418,各名理发师的理发次数分别为17,16,16.
思考题 如果考虑理发师中午有半小时的吃饭休息时间,2.理发师有快慢手,问题怎么解?
(注:本文与正式出版本的相应章节有删节有差异)
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-24 05:30
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社