. X, }4 C z9 \假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如:积分)的复杂程度是成正比的。蒙特卡洛方法是怎么计算的呢?假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候,结果就越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。 : P% [2 l* e$ I9 r8 E * e j% @9 I" F' `: u* i& x6 y& q, K
5 x' Q, b& _" K4 B
. Z6 P; Q+ p( W; m$ L0 Z% `8 V ! \4 c, X6 {" X5 J/ s$ q3 u3 r; e( k
蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解。 ; {: ^7 n7 C0 d& X " E0 H- [7 N. S5 v2 s; z8 C% W . V; o8 W% e8 m: _3 h/ p6 U8 T蒙特卡罗方法与一般计算方法有很大区别,一般计算方法对于解决多维或因素复杂的问题非常困难,而蒙特卡罗方法对于解决这方面的问题却比较简单。其特点如下:' w* L, t3 w# C1 N# K Z- \
' L' e2 N' L' f* R
% I& b& h# K4 Z3 ]! p3 u" N1 A- [% z ! D" o/ u1 `) I# B3 U l/ D. W1 D& W5 ~! l, R- X
4 Y- R W0 F1 X6 j
1 l3 y; a1 }0 S2 Y $ o+ g U4 R" I2 v 05 动态规划、回溯搜索、分治算法、分支定界等计算机算法 * Z- `- f5 O- S5 I在数学建模竞赛中,如:92 年 B 题用分枝定界法,97年 B 题是典型的动态规划问题,此外 98 年 B 题体现了分治算法。 8 N+ m+ z9 @5 A9 Q* R 8 E$ @: h o- ~ $ h/ b+ X- O& L, b ^; c' R! ~/ S+ B8 `6 f& B , A# B, t& G/ _! w5 [- q3 w3 R, h, `; j
& u" ]1 K7 B* c( W* ?/ S0 M8 L这方面问题和 ACM 程序设计竞赛中的问题类似,推荐看一下算法导论,与《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。 ) E; _4 K+ d6 Z, Q5 I4 u ) b& E9 r8 W1 F & a/ O. b1 {7 U5 W- \ 06 最优化理论的三大经典算法:模拟退火法、神经网络、遗传算法, `+ h" @& h& ?' D
这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。 1 Y/ X( w( u& r4 N $ i% L. H' Q' `+ E% L3 d1 X+ W' B. ~. C! {: z
在数学建模竞赛中:比如 97 年 A 题的模拟退火算法,00 年 B 题的神经网络分类算法,01 年 B 题这种难题也可以使用神经网络。( H F4 |2 X4 J% u
" _# W$ y9 H# d* b. K' }8 X7 o- }& E7 @
还有美国竞赛 89 年 A 题也和 BP 算法有关系,当时是 86 年刚提出 BP 算法,89 年就考了,说明赛题可能是当今前沿科技的抽象体现。 ! [5 E' n; ]0 T4 k% }% q0 w0 O ! q$ k" t' u$ L9 y4 ?4 m' P8 w2 h8 x2 m' t- ?
03 年 B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。# t0 X6 f0 ?' ^6 Q, L
, J; Z7 d: E8 A
# z; z$ W) A. u6 S# p2 }6 g+ l! \) i( F' J; ?( q
8 r: U( e9 @/ j" N 3 j$ Y$ R. ^" z: Q# N3 L - G- ?; }5 Z5 U& t1 X: V# ^/ Q + M/ _& i; H- t3 z5 _4 D- D" k" F: `
6 G' {" c# b3 F+ i2 [( o
5 a/ C& A `# E7 D }" Q# Z 07 网格算法和穷举法 7 X5 h* L) t6 [1 s$ E- @, S网格算法和穷举法一样,只是网格法是连续问题的穷举。: N: m% ~6 [7 J8 ]( a' K* y, m
) W+ x4 S- t+ x" H# \* k6 C
9 E. E3 r- A( t& g' O. Q4 ^
比如要求在 N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,比如在 [a;b] 区间内取 M+1 个点,那么这样循环就需要进行 (M+1)N 次运算,所以计算量很大。 ! r* U2 |8 Z4 S2 y - b- r* H; k V( I$ H- @$ r0 g # n+ I8 d- S+ K8 e在数学建模竞赛中:比如 97 年 A 题、99 年 B 题都可以用网格法搜索,这种方法最好在运算速度较快的计算机中进行,还有要用高级语言来做,最好不要用MATLAB 做网格,否则会算很久。 ' A. M% `- }; Q2 P) g ~) q n) C% p8 S5 c
' m n. b+ R$ u, I' i M
穷举法大家都熟悉,自不用多说了。) c: h1 u A; S5 `6 }2 m5 I% y
% m- l; f, {" b8 f6 [. n ' _4 b3 l9 j, s' m! J 08 一些连续离散化方法+ J5 e9 h% ]6 T% r' R) A
大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界中,计算机只能处理离散的量,所以需要对连续量进行离散处理。 f! y4 r6 `* i
4 |9 ]4 C% w3 u7 f! d- z