数学建模社区-数学中国
标题:
数学建模十大经典算法漫谈
[打印本页]
作者:
杨利霞
时间:
2019-7-8 10:46
标题:
数学建模十大经典算法漫谈
) {& Y6 X) h H3 g
数学建模十大经典算法漫谈
& T1 }: Q2 \& e) M( D8 _4 ^# V" P# V* {
数学建模十大算法漫谈
8 E& P! O v7 M. |" [
0 ]+ f8 S3 m" z5 d, B
. \0 y3 Z- F4 j# M% N5 m. E5 i
( m: b8 t E' V4 U' \5 u" r. [
作者:July 二零一一年一月二十九日
K5 R7 x) }8 P) \
! [: r7 ]+ {( q, t5 u
本文参考:
1 Z( j9 c# P$ K" e6 W! z" h
I、 细数二十世纪最伟大的十大算法 [译者:本人July]
, [# N) m$ ~$ g1 F' _
II、 本BLOG内 经典算法研究系列
' G) b. [& ^/ w6 M+ ^
III、维基百科
+ _, |3 g4 L% j; K
8 ~# K& g- m, v$ c; h! q* z" t
------------------------------------------
% m/ f( I# f. Q7 i( y
# x" Z! v# g2 v/ R2 S+ Q4 y
博主说明:
* O ^) k$ J+ \- ?( u
1、此数学建模十大算法依据网上的一份榜单而写,本文对此十大算法作一一简单介绍。
% V5 R4 ?- j; i: h5 N C$ k/ N
这只是一份榜单而已,数学建模中还有很多的算法,未一一囊括。欢迎读者提供更多的好的算法。
( D1 P% C9 ^5 ?) |% E+ B
2、在具体阐述每一算法的应用时,除了列出常见的应用之外,
: R) k: p. b4 \; E( N0 J
同时,还会具体结合数学建模竞赛一一阐述。
/ Y' ]8 f9 h8 M! d
毕竟,此十大算法,在数学建模竞赛中有着无比广泛而重要的应用。
- J m/ y# F% \2 }
且,凡是标着“某某年某国某题”,即是那一年某个国家的数学建模竞赛原题。
3 r9 V* k$ x% x
3、此十大算法,在一些经典的算法设计书籍上,无过多阐述。
3 D1 a0 L/ u8 k0 D. y
若要具体细致的深入研究,还得请参考国内或国际上关于此十大算法的优秀论文。
3 U3 e7 z0 E) f( U7 g8 F
谢谢。
+ ^& P1 E, j5 x% j% L# `2 v3 Y4 ^
& c" v' V# Q/ X) c
, G" g, e* J/ _6 X- r1 l @
9 ?* a8 I D7 N5 t, B$ M
9 Z; O5 M c; J$ [3 P
4 y7 M" @! a$ M" _
一、蒙特卡罗算法
' ?, R' a; G! n5 t
1946年,美国拉斯阿莫斯国家实验室的三位科学家John von Neumann,Stan Ulam 和 Nick Metropolis
1 z, s: k3 F: [) }6 F
共同发明了,蒙特卡罗方法。
0 C) F8 m( c' L. ?! i/ ~' ~
) }" f/ q4 |) p6 S' @, e# W
, R- g! m: h* M& T1 x# o
此算法被评为20世纪最伟大的十大算法之一,详情,请参见我的博文:
1 B5 x' @3 j9 n: C
http://blog.csdn.net/v_JULY_v/archive/2011/01/10/6127953.aspx
$ c+ a1 ?0 D; V3 o% x
) @# B* X, e% C2 W! |% e! d
8 F6 @ F! J0 B
* O3 E/ N1 y" H5 f+ l
蒙特卡罗方法(Monte Carlo method),又称随机抽样或统计模拟方法,是一种以概率统计理论为指导
! Q$ t/ x% b% ~5 U7 [
4 q- @0 g/ b4 D0 P
的一类非常重要的数值计算方法。此方法使用随机数(或更常见的伪随机数)来解决很多计算问题的方
% c6 G1 m; d/ X
% h. F8 i" k( n S. ]; D, f6 {+ d
法。
/ R3 ~9 _2 N( c/ S o" E
4 s8 o# X5 j" Q) E- l
" X- c. ?: E" @
8 L4 v$ c- j2 |* F/ g
由于传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真
& h& P7 O& i2 A* d
; P* D! @4 h6 }5 I) t9 _0 B
实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。
# W" u8 x1 a: b5 l3 N0 L
' K% s6 ~0 @# z
蒙特卡罗方法的基本原理及思想如下:
2 g2 ]* N( V, P. }) N/ n
当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法
& ^: E: F W8 q$ @4 d: x8 g
; s4 [( J+ N$ W- ~8 ]6 l
,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作
5 G. b& n. t |, B
) g( m9 ~6 Q: G6 `( x$ ]
为问题的解。
4 E7 y) R( |6 B$ ]1 a
4 p# d9 _! f" x( x- m0 G
/ U5 l |5 s' ~: F! W* P
6 j6 w: N6 d, l, E& G
有一个例子可以使你比较直观地了解蒙特卡洛方法:
) M- I- V9 f* \% A4 c6 O4 T: v
假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如,积分)的复杂程
, Z y5 o! y6 l# x7 \8 g# d
% F. I0 t* C8 K. ]
度是成正比的。蒙特卡洛方法是怎么计算的呢?假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然
; ^7 Z* [% [3 ?8 p
7 v* h$ T. u1 s7 T- C3 K
后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候
% l& B' W/ K: y* x- v# W
. e6 ^' d# I7 i/ J& V0 M; ^/ K
,结果就越精确。
2 m+ @; z+ j& v2 z- u
在这里我们要假定豆子都在一个平面上,相互之间没有重叠。
# B! R W, \ `, T4 n
+ c* C" E) P0 L1 V: P% Y
$ u, A3 `# m5 b
蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模
$ X( C# s9 j+ g/ U$ [2 R4 W
: v* O. B/ J/ Y1 m2 b
拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的
3 D# A8 k1 T* t% J8 o# O& s& Y3 x
8 A4 e+ P/ i' E* j( _5 z
近似解。
+ X8 Q d- m% ]7 _5 P% Q( I. ~
: y1 `8 N" g1 T3 ~5 d2 c t2 U
6 u* q$ R: s/ i
8 u6 }/ Z% e. t4 U1 {. S
蒙特卡罗方法与一般计算方法有很大区别,一般计算方法对于解决多维或因素复杂的问题非常困难,而
8 u! X; z( q; T( s0 ^
4 h8 M0 Q, u2 t& B! f" N
蒙特卡罗方法对于解决这方面的问题却比较简单。其特点如下:
, \" A8 k' h2 e w( C* o
I、 直接追踪粒子,物理思路清晰,易于理解。
( U1 l- z- w4 x
II、 采用随机抽样的方法,较真切的模拟粒子输运的过程,反映了统计涨落的规律。
% u6 r2 g0 a! N3 M1 w
III、不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法。
! J/ ^# u4 D( F4 l; G. h
等等。
& l" ]+ Z+ a" c( I' K+ x$ B1 ^8 n
3 W5 H) Q2 M6 y& T; @- y5 v7 S/ {
此算法,日后还会在本BLOG 内详细阐述。
* [. `, V. u8 x6 b$ M9 ^2 E
" }/ Q# D7 W Q* a9 P# O
2 Y v5 k) W6 O3 o0 o( X# ]- X
% A8 x/ K" S) N8 t3 o+ W: k6 W4 T
6 m+ S( w. \$ c$ D( ^7 W \3 p
二、数据拟合、参数估计、插值等数据处理算法
( S# f" Y. n0 f4 |2 p$ \7 ?
我们通常会遇到大量的数据需要处理, 而处理数据的关键就在于这些算法,通常使用Matlab作为工具。
0 _5 m1 A2 i! Y
1 m% U5 }2 A! |: ^, l
数据拟合在数学建模比赛中中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是98年数
! ]* t, R Q4 Q( ~% @; `5 m
9 U2 ^0 u0 [" S) ~4 _% H* U# k! ^
学建模美国赛A题,生物组织切片的三维插值处理,94年A题逢山开路,山体海拔高度的插值计算,还有
# {3 ~( P7 n$ P5 y
Z/ y0 I1 _( y: Q: S1 n7 e) t! {
吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。
+ K7 T4 b* Z7 q) |
+ w! \$ Y6 W T4 q5 G0 i
' O$ _# a$ S# ^% w7 l
. x9 T/ t7 S4 _" {4 P
此类问题在 MATLAB 中有很多现成的函数可以调用,熟悉MATLAB,这些方法都能游刃有余的用好。
4 g) ?) d% P- i* Q# D/ k" k
8 @! l$ ~ g+ M* ~/ c3 ]$ I
2 r& n, p4 K% n1 R1 F) s
1 }- [: S% N1 E' {, p8 C
8 }: K X. e* }/ A
三、线性规划、整数规划、多元规划、二次规划等规划类问题
) Z! A9 f& q' Q' M, }; x2 k2 I7 W
数学建模竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件
$ I9 l O: l O$ X$ k
) t ^" `5 f- [0 U/ W: H
、几个函数表达式作为目标函数的问题,遇到这类问题,求解就是关键了,比如98年B题,用很多不等式
- N5 k0 p' h/ Q4 \ s3 i
) F7 C" ? y) u9 x" Z
完全可以把问题刻画清楚,因此列举出规划后用 Lindo 、 Lingo 等软件来进行解决比较方便,所以还
# B- R. ^7 q* j J0 \
; ~7 g. o0 D( j- i: L
需要熟悉这两个软件。
5 X+ Y9 `8 p, ]: F
" x+ I+ X3 w* l6 r6 @7 Q- z6 C' N, X
7 x7 O" I# _$ R; c4 U/ w, d; c9 z
! l! {6 P. |. v D% U# j. ~+ F) Q( W
& P9 w) e1 ?+ P/ r
四、图论算法
/ {% b1 G$ \8 I0 e; L+ }
这类问题算法有很多,
6 `$ F# D1 R% C2 ~ a C2 a, ]# |5 ~
包括: Dijkstra 、 Floyd 、 Prim 、 Bellman-Ford ,最大流,二分匹配等问题。
3 [0 N8 i" Q2 @ j2 v# {
( t ?2 U/ T) p
: T' J' S( {; S, T% P3 v/ h: Z
9 |* t! g, {- M2 @ e
关于此类图论算法,可参考Introduction to Algorithms--算法导论,关于图算法的第22章-第26章。
9 ]: A$ Q, ]+ b g
同时,本BLOG内经典算法研究系列,对Dijkstra算法有所简单描述,
( |# _/ z1 {/ f# o
-----------
) Z6 ~! e! v( R( w
经典算法研究系列:二、Dijkstra 算法初探
; f; |8 e3 s, K) K* |
http://blog.csdn.net/v_JULY_v/archive/2010/12/24/6096981.aspx
) u9 _/ w4 T/ [
% Q" G$ P# w% q0 c" k* Y
更多,请关注本BLOG 日后更新的博文。
- `8 @1 V$ }/ Q$ M
! S- f- r6 _% Y* d! y
/ p7 D) r% T' T& `0 ^# ?" _+ w
( H1 Y5 G3 L& B
, y' C! d8 Z9 r) q; l8 [ X$ \
五、动态规划、回溯搜索、分治算法、分支定界等计算机算法
% o/ w0 q/ P/ ^
在数学建模竞赛中,如:92 年B题用分枝定界法, 97年B题是典型的动态规划问题,
3 S# F- W" g4 M7 p$ _
此外 98 年 B 题体现了分治算法。
/ H. P7 t3 z$ M) r2 [
3 d" r; ]( i3 U+ F3 _
* _5 ]5 D& _# A5 S% s; I) t
这方面问题和 ACM 程序设计竞赛中的问题类似,
# g4 A5 G/ I! l+ w; |3 ^
推荐看一下算法导论,与《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。
3 Z7 i9 K/ b8 U8 E
/ p* N0 l% ^0 ?3 r- S, q- v
* Y4 p& S. \ D& Z9 \. U
' j' |0 h/ ?4 H, Y2 @/ v7 p1 U; L: T
7 y6 u$ L" j- E
六、最优化理论的三大经典算法:模拟退火法、神经网络、遗传算法
* b3 T- w' J/ a0 n; @* u
这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。
/ Y% \: L" B ?2 z
, J& K8 k* D: B" d! L
在数学建模竞赛中:比如97年A题的模拟退火算法,00年B题的神经网络分类算法,01年B题这种难题也可
* I. s S' P( Q
% L, o8 c1 x/ S* O/ O: u
以使用神经网络,还有美国竞赛89年A题也和 BP 算法有关系,当时是86年刚提出BP算法,89年就考了,
3 G. o* ^8 }! w
& {( d8 a: ]9 F
说明赛题可能是当今前沿科技的抽象体现。
: J1 P" a3 E0 c+ |' J
03 年 B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。
: n5 _+ |7 Q* h8 I( J
- l+ @) N6 \1 _* k- l$ M; U
9 n( z% ^3 h& z, k0 }+ E
/ R' b* V2 I7 V: s; K2 K- e' y" g
另,本人对人工智能非常感兴趣,遗传算法已在本BLOG内有所阐述,敬请参见。
4 E$ r3 ?/ C3 s; K5 H4 \
----------
) H0 r6 a. F+ R3 N1 M
经典算法研究系列:七、深入浅出遗传算法,透析GA本质
( I& ^3 w' c( f2 u/ u' M3 k
http://blog.csdn.net/v_JULY_v/archive/2011/01/12/6132775.aspx
$ U4 g9 [; B8 ?+ g' t. o( ~7 z
* O* s" |5 i( k" h4 }; Z
1 k- P1 t/ N% R6 I3 W1 W; e) s b
% Q% n4 _+ B/ L p; b _6 U: K- P5 n
其它俩大算法,模拟退火法,与神经网络,也定会在本BLOG内日后的博文更新中,详细阐述。
6 @' ^& Y6 F% Z* q7 q8 R
; c' y& U" ]) a9 D3 l# r
+ A, C$ l" I5 }# T [
- H( d! h0 k7 C" k+ |
: ^6 L( [, r- B, s
七、网格算法和穷举法
! z. D9 a; h- |( b( g" R$ G5 A- H
网格算法和穷举法一样,只是网格法是连续问题的穷举。
5 }- r" c. h8 k7 n
比如要求在 N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,
1 W V9 G) [/ T( {: ?; C1 w- I
比如在 [ a; b ] 区间内取 M +1 个点,就是 a; a +( b ? a ) =M; a +2 ¢ ( b ? a ) =M ; …;b
9 z, Q, x6 h1 J, _/ Y9 P) w! C
1 b8 o! N4 w: V! s" }5 b) j2 b7 v3 n
那么这样循环就需要进行 ( M + 1) N 次运算,所以计算量很大。
8 `+ S+ o- [- I4 M8 U# `' _" ~
! I; Q( J4 K9 t) _
- [' ~1 V, I* m2 ~5 P
在数学建模竞赛中:比如 97 年 A 题、 99 年 B 题都可以用网格法搜索,这种方法最好在运算速度较
7 w7 `/ d+ H" R: [! t0 C0 B
6 r/ D, b: V2 ]; v! h& `- D' w
快的计算机中进行,还有要用高级语言来做,最好不要用 MATLAB 做网格,否则会算很久。
6 n1 P( s5 u7 d5 J6 Q, A1 O, A$ M
" N: A: k F; O2 I
穷举法大家都熟悉,自不用多说了。
7 i! l8 l2 K8 S& C
) W! A, |9 d2 Q0 E$ p- I( l7 d% J
4 d: v4 ?7 b% U. h
+ k' S5 S" [, d( k9 G- S; F
# o: E" c) R% n( O
八、一些连续离散化方法
, R7 D0 ]' V J, U3 l- M5 n4 H7 @0 M
大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界
# e- e) L& m. H* W; \4 Z
9 t; H5 H7 l$ K% `9 U
中,计算机只能处理离散的量,所以需要对连续量进行离散处理。
8 E" f. R4 j, p7 D9 S4 o
8 H' S; R- A" y. l- k
5 k$ ~' B8 k3 ` s9 {3 ^ t& A
这种方法应用很广,而且和上面的很多算法有关。
: z+ H7 P- W& U2 @6 g" l7 t: k! f
事实上,网格算法、蒙特卡罗算法、模拟退火都用了这个思想。
3 u2 n# G' j& Q# G
6 r# w: q$ |8 N
0 W& F6 N/ [8 K- q8 t3 b
4 r, ^) n8 m- |7 P& C2 A
. i1 Z+ k! `( {2 B3 o5 U: \4 Q* x+ N
九、数值分析算法
. Z0 B8 ?. [& u0 O+ n: Z
数值分析(numerical analysis),是数学的一个分支,主要研究连续数学(区别于离散数学)问题的
! {% t9 B# F$ u# ?7 h
* o0 X9 m& l5 p i% i
算法。
6 O4 \- e* c# j# y0 ]9 q) V% N
; B5 ^ G5 ^2 p/ G2 a
如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比 如方程组求解、矩阵运算、
. W. W% o4 Y( D0 W
( I: D' C7 u, n( c9 c
函数积分等算法就需要额外编写库函数进行调用。
8 g# w( o/ u. U3 t4 o+ s% o6 c3 H
6 P' N3 }6 M9 v0 O" H. T
这类算法是针对高级语言而专门设的,如果你用的是 MATLAB 、 Mathematica ,大可不必准备,
% Z6 a( p3 J- y
因为像数值分析中有很多函数一般的数学软件是具备的。
: z. r1 P8 |6 @0 _6 v" v7 q
/ L E& G: _+ j( o' }
1 U: D7 `3 H5 n& Q4 T. P* h. j
. ~ W/ ?/ \; K, P" C8 g5 P; {* l
# q" f* M7 D. U9 d
十、图象处理算法
8 c9 P. r0 x, m* t9 k) J
在数学建模竞赛中:比如01 年 A 题中需要你会读 BMP 图象、美国赛 98 年 A 题需要你知道三维插值
# y* R, r$ p* D# R$ f1 D9 h
9 v1 t. ?2 n! b4 g5 B# n8 }) A
计算, 03 年 B 题要求更高,不但需要编程计算还要进行处理,而数模论文中也有很多图片需要展示,
9 b3 e5 Z/ y& l/ R F) |0 h
- S8 W& x2 ~4 n2 V
因此图象处理就是关键。做好这类问题,重要的是把MATLAB 学好,特别是图象处理的部分。
+ _' |, Z- G- n6 V* w, M" v, v9 N
---------------------
! O+ N" H* s9 W% ? ?' `/ H
作者:画面太乱了
/ E, A$ b' g# K- Y) C; \% c0 h
来源:CSDN
8 c* L# B0 v$ W# \. q
2 y# ^+ h7 U# J" S2 y
5 l8 }. m) \. Q3 l4 c
9 q0 w5 B7 u4 e" l# Z h; V
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5