标题: 数学建模十类经典算法(1) [打印本页] 作者: 百年孤独 时间: 2016-3-29 16:54 标题: 数学建模十类经典算法(1) 1、蒙特卡罗方法(MC)(Monte Carlo): ' H1 B; z1 a0 S5 b# |7 ]$ S蒙特卡罗(Monte Carlo)方法,或称计算机随机模拟方法,是一种基于“随机数”的计算方法。这一方法源于美国在第二次世界大战进行研制原子弹的“曼哈顿计划”。该计划的主持人之一、数学家冯·诺伊曼用驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,为它蒙上了一层神秘色彩。 ) c9 W9 s/ B" G0 W+ d蒙特卡罗方法的基本原理及思想如下: , j8 u% b* B$ o/ `
当所要求解的问题是某种事件出现的概率,或者是某个随机变量的期望值时,它们可以通过某种“试验”的方法,得到这种事件出现的频率,或者这个随机变数的平均值,并用它们作为问题的解。这就是蒙特卡罗方法的基本思想。蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解。 + |0 \+ q" O! s! R! i- w9 r$ A
+ t1 I# ^: R- j# b6 ~' H+ f7 V
可以把蒙特卡罗解题归结为三个主要步骤: ! ?- ^4 q" g+ {6 d3 V. @2 m
构造或描述概率过程;实现从已知概率分布抽样;建立各种估计量。 3 ^0 z- Z7 D: V% O, A, u例: 蒲丰氏问题5 C s. w. W: a+ D. v* B! m
! L4 d4 m$ G" c2 B, b- u
为了求得圆周率π值,在十九世纪后期,有很多人作了这样的试验:将长为2l的一根针任意投到地面上,用针与一组相间距离为2a( l<a)的平行线相交的频率代替概率P,再利用准确的关系式: 5 q5 a+ T( c0 G# Q4 L8 x 8 B& C# [8 |" D7 n5 R% x6 u1 T1 F7 q# H4 E$ V* V3 r
求出π值:4 X3 d1 \9 r; [ ( m* H" Z8 i6 k4 Y. ~
' \ ^9 o% Q1 J+ p) L$ R其中N为投计次数,n为针与平行线相交次数。这就是古典概率论中著名的蒲丰氏问题。 ) G& @5 q6 _9 u一些人进行了实验,其结果列于下表 : , L! g" T" `; B" Y2 d $ ^) I' R7 W* i: y- l设针投到地面上的位置可以用一组参数(x,θ)来描述,x为针中心的坐标,θ为针与平行线的夹角,如图所示。+ q7 ?+ b3 G6 a! O8 [ # F: A2 h$ o) v+ |9 h! M2 e8 N任意投针,就是意味着x与θ都是任意取的,但x的范围限于〔0,a〕,夹角θ的范围限于〔0,π〕。在此情况下,针与平行线相交的数学条件是:) Z( u- r. f2 L# S1 [/ y ( ^8 T; x) B5 ?: Y如何产生任意的(x,θ)?x在〔0,a〕上任意取值,表示x在〔0,a〕上是均匀分布的,其分布密度函数为: ' _' ` b% s' s3 q3 k0 _ 2 Y% B( ?1 Q4 D& z 3 h0 E7 E1 @: {! b' z$ c# k类似地,θ的分布密度函数为: 9 k: e7 y7 s. t . Y, H( F1 ~6 m' R
% Y, J- X8 g0 Q/ Q% {
因此,产生任意的(x,θ)的过程就变成了由f1(x)抽样x及由f2(θ)抽样θ的过程了。由此得到: ( d9 H( \4 R; q, w I 8 `# {& h8 W! ?0 A2 r* o其中ξ1,ξ2均为(0,1)上均匀分布的随机变量。 . \7 X- r" i& k8 {: i: d每次投针试验,实际上变成在计算机上从两个均匀分布的随机变量中抽样得到(x,θ),然后定义描述针与平行线相交状况的随机变量s(x,θ),为 P" {% e8 N! j: Y- i$ C. T: v / F# H7 l7 F9 q" s3 H
如果投针N次,则 8 g- ]0 J' ^. E5 k) k; j 1 d" d3 f2 C* X: a是针与平行线相交概率P的估计值。事实上, , d, i1 z4 r; U" B2 x, G) J- y! K ' l. o( r G" Z/ ]; f 8 q- Z4 H0 ?0 o; A于是有: . ~; b, C$ x) \% T4 H+ U+ ]! o( G5 P2 K: J9 b
因此,可以通俗地说,蒙特卡罗方法是用随机试验的方法计算积分,即将所要计算的积分看作服从某种分布密度函数f(r)的随机变量g(r)的数学期望 # F! I/ V/ {, h, V : S; n- }% F. Q8 n6 v
通过某种试验,得到N个观察值r1,r2,…,rN(用概率语言来说,从分布密度函数f(r)中抽取N个子样r1,r2,…,rN,),将相应的N个随机变量的值g(r1),g(r2),…,g(rN)的算术平均值 ( E! Y! _: k/ N% c9 J" ]& W/ s( S; m5 w D+ ?
作为积分的估计值(近似值)。 . }. `* ]; I6 [1 ]8 T3 ^, `4 R用比较抽象的概率语言描述蒙特卡罗方法解题的步骤如下:构造一个概率空间(W ,A,P),其中,W 是一个事件**,A是**W 的子集,P是在A上建立的某个概率测度;在这个概率空间中,选取一个随机变量q (w ), 使得这个随机变量的期望值正好是所要求的解Q ,然后用q (w )的简单子样的算术平均值作为Q 的近似值。 , v) g: B# S0 G! e
举个例子就是97 年的A 题,每个零件都有自己的标定值,也都有自己的容差等级,而求解最优的组合方案将要面对着的是一个极其复杂的公式和108 种容差选取方案,根本不可能去求解析解,那如何去找到最优的方案呢?随机性模拟搜索最优方案就是其中的一种方法,在每个零件可行的区间中按照正态分布随机的选取一个标定值和选取一个容差值作为一种方案,然后通过蒙特卡罗算法仿真出大量的方案,从中选取一个最佳的。 ) ]* q5 ?! U8 E" c3 n) ]1 t+ v& u: n5 n
另一个例子就是2003年的彩票问题第二问,要求设计一种更好的方案,首先方案的优劣取决于很多复杂的因素,同样不可能刻画出一个模型进行求解,只能靠随机仿真模拟。 1 E+ a7 r* m" Z
" A3 ?. a/ n! z [蒙特卡罗方法的计算程序: ! o, s# C, X7 \0 P F$ v3 G关于蒙特卡罗方法的计算程序已经有很多,如:EGS4、FLUKA、ETRAN、ITS、MCNP、GEANT等。这些程序大多经过了多年的发展,花费了巨大的工作量。除欧洲核子研究中心(CERN)发行的GEANT主要用于高能物理探测器响应和粒子径迹的模拟外,其它程序都深入到低能领域,并被广泛应用。 2 G, _: o3 O" D$ X % }' F1 {9 w. N