- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564692 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174630
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
/ \. J% V8 }3 ~+ b; h
数学建模十大经典算法漫谈# k( |' u0 S% q8 a+ L
数学建模十大算法漫谈
- C6 M5 U& Z& a$ O
* Y" P. u0 X) _% \* W! F" n7 n6 L1 M* g. H- D
+ e2 f0 t3 u2 N- f4 W* ~, Z. p作者:July 二零一一年一月二十九日
1 D7 R) q/ {; N; U- U6 z8 c5 O6 ]" \9 a: o1 A
本文参考:9 E0 I2 Q* _4 q, E+ Z
I、 细数二十世纪最伟大的十大算法 [译者:本人July]; h7 t( s5 n, a" @" u4 Y& z1 J% {
II、 本BLOG内 经典算法研究系列' b, C: T+ J8 C% N/ R8 e
III、维基百科5 F, b9 r9 g, T; F% I$ v
& {! A& P7 Z* U+ C------------------------------------------
, i+ G' N* j. y& M" D# D+ i6 ~4 b
博主说明:" u' V0 K4 p; \8 @
1、此数学建模十大算法依据网上的一份榜单而写,本文对此十大算法作一一简单介绍。/ W' I" h* A0 C; i2 a
这只是一份榜单而已,数学建模中还有很多的算法,未一一囊括。欢迎读者提供更多的好的算法。
/ m% a( T0 F* ~, ~2、在具体阐述每一算法的应用时,除了列出常见的应用之外,$ J) J- H6 d1 c9 O. T
同时,还会具体结合数学建模竞赛一一阐述。5 V$ I# \8 T: x! \* t; F8 g+ ?8 _9 a
毕竟,此十大算法,在数学建模竞赛中有着无比广泛而重要的应用。) D5 H c2 f5 R' n2 }
且,凡是标着“某某年某国某题”,即是那一年某个国家的数学建模竞赛原题。$ v1 O; M! g' q* I g2 C* j- v7 P
3、此十大算法,在一些经典的算法设计书籍上,无过多阐述。
5 F0 h3 v# Q" w8 s' C) S& a若要具体细致的深入研究,还得请参考国内或国际上关于此十大算法的优秀论文。
/ R: P/ M" v( `1 \谢谢。7 B( e/ L" c& h) R# s/ z; y
+ m- ^1 o# a1 t, s5 v
' [5 `( N! {3 U9 Y7 W, k9 X' E4 B, b
& E3 ^( Z+ `# t$ b2 y' t: }. P5 G7 _) n5 [7 F6 {$ a1 Z4 ~
, Z) ?$ u+ T: S& I7 u5 ]
一、蒙特卡罗算法
+ K; M, ~% X# z, c1946年,美国拉斯阿莫斯国家实验室的三位科学家John von Neumann,Stan Ulam 和 Nick Metropolis3 ~- }! s; w7 A) H* ^
共同发明了,蒙特卡罗方法。3 m; u3 t! ]6 l) i: L( O
: [( p/ E S5 Z# D: h! O
. P; S9 P! ]5 Z. C! l此算法被评为20世纪最伟大的十大算法之一,详情,请参见我的博文:
3 v; L) r) S+ o+ r/ rhttp://blog.csdn.net/v_JULY_v/archive/2011/01/10/6127953.aspx- k0 ~7 m3 Q' E F- Z: U. H
7 F: s5 s: _' U+ w3 K& [+ j$ B4 e: J8 t
. x4 d0 M# f- e0 y: @# Y' K蒙特卡罗方法(Monte Carlo method),又称随机抽样或统计模拟方法,是一种以概率统计理论为指导; ?: \& m- b- e5 P; v2 t3 `
M/ m2 g: p& e( `/ i& t的一类非常重要的数值计算方法。此方法使用随机数(或更常见的伪随机数)来解决很多计算问题的方
) X5 a4 ?8 O1 X: P- ^# l6 J3 d1 r. z. |: z5 N; a4 F$ g! l
法。
! v4 j! x7 a% T$ W" H
2 b" W9 ?. R) _
# S# g2 p) J' g) D' g0 G) y! Q v, j
由于传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真
% O4 A4 [9 m" Q
8 X/ H5 |: Y0 k' w+ a6 v& I实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。% d' t g) H, l9 v9 O0 J& I* o
( ~4 o$ s8 [" U7 Y; K
蒙特卡罗方法的基本原理及思想如下:
8 h W# t9 y: j1 z2 ~当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法1 G4 t! H7 I! z7 o* S5 o) ^
5 X& |/ A1 A% f5 w+ p( ~,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作
6 D' Q/ v9 X) x1 m% {- J" ]5 r! u$ G/ ?( Y" M( n+ S; {
为问题的解。( n) ?, G6 r, D- s
) l: f+ H/ g$ z& d( l, P7 _) Q* {* K
# l% J: k7 z" b; H
, G3 [# _8 b0 S5 q5 { z有一个例子可以使你比较直观地了解蒙特卡洛方法:! N$ p6 W3 z5 `8 l, F# |
假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如,积分)的复杂程* W( t q. E+ k) l# j4 j; N: }4 k$ n
# ]$ X; ~; F2 K
度是成正比的。蒙特卡洛方法是怎么计算的呢?假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然
# d+ a5 R4 A( U! e
, K T' _! n- D2 M后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候/ A0 L9 L( B( [
# S0 S/ V% T" o
,结果就越精确。
1 F J, |4 h* H( A在这里我们要假定豆子都在一个平面上,相互之间没有重叠。
+ {4 j$ e: V& w& N8 X4 z& j2 T1 b
5 E. m' }7 c) g$ [& S% n
蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模
# B/ R5 _. E( u$ s
4 @* \* I. I* P8 Y拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的1 w# m$ `: t; Q, M' I( t5 B$ D
. S1 P: r0 W+ u* X3 J) G8 Q近似解。
! W+ P7 L. e0 q; V% N" h- ~
- [, C7 e- @$ `* c5 y" H8 g7 z7 P1 {4 G/ q% w
2 M. X5 @! A/ W+ l: S5 K- }- h) X8 A蒙特卡罗方法与一般计算方法有很大区别,一般计算方法对于解决多维或因素复杂的问题非常困难,而- y7 Y/ y" m6 ?6 S p/ K
( D% o+ y4 Z" a2 a' P
蒙特卡罗方法对于解决这方面的问题却比较简单。其特点如下:
% T) ~& K# [6 t' l: q$ D# ]% QI、 直接追踪粒子,物理思路清晰,易于理解。
0 j6 u* O. h5 Y9 E4 c- r* G$ XII、 采用随机抽样的方法,较真切的模拟粒子输运的过程,反映了统计涨落的规律。! k& _) r6 k! ^- E) M2 E
III、不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法。
1 C1 O: z0 n* ?) R7 n等等。
9 K. A& K2 z0 M# ~$ J
+ u, Y) f8 B- a/ B此算法,日后还会在本BLOG 内详细阐述。; T% |1 N/ e3 w, y0 s7 N+ P( X- z
9 L7 T9 I& g4 L
5 b+ b3 m' l0 n
6 j. v& G2 B2 n+ ~, R9 ^
* n% e2 }! J' D4 R5 C. n! C二、数据拟合、参数估计、插值等数据处理算法
3 u; N1 M8 o/ b) N我们通常会遇到大量的数据需要处理, 而处理数据的关键就在于这些算法,通常使用Matlab作为工具。" m' [/ j% h- d& M- M
" u1 u- \' W/ \- ?% }' ]) v
数据拟合在数学建模比赛中中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是98年数
# a \: L7 I1 J* N: m( d, f
; y: k) M- v. C3 S& H# R) n) s学建模美国赛A题,生物组织切片的三维插值处理,94年A题逢山开路,山体海拔高度的插值计算,还有9 i# M: T ?2 | ]9 b
$ k( t) |4 U' O3 [( V" R5 r吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。( a# W3 n! l9 S- V5 P: f& {# t
8 v0 s o- a( f/ H, C3 e' h* l; e7 q' C; [! A( v& y
# l" Y7 S. G0 N$ ?
此类问题在 MATLAB 中有很多现成的函数可以调用,熟悉MATLAB,这些方法都能游刃有余的用好。
' s- f# n, Y1 x U- g- J; x1 y! D% y7 q D& U; m
( f4 n9 P) v0 H- b) ?) z4 w$ B
* T9 U0 \; m0 X0 |0 Y- i9 W3 x! w# Z+ k, q
三、线性规划、整数规划、多元规划、二次规划等规划类问题! q6 a1 [; V. U) @' d7 H( f
数学建模竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件+ l+ s% }" @( \3 g7 T
* P1 P+ X* [( o/ q2 ~、几个函数表达式作为目标函数的问题,遇到这类问题,求解就是关键了,比如98年B题,用很多不等式! D0 k& C4 I/ g8 M! E) S) u
# _. s$ z9 k8 G6 q ~6 p$ v. E完全可以把问题刻画清楚,因此列举出规划后用 Lindo 、 Lingo 等软件来进行解决比较方便,所以还, m4 B9 K; l1 U! ?6 U3 F# Z
) o5 _3 f4 j4 \需要熟悉这两个软件。2 X5 s0 Z8 K5 \ O( w3 c
0 L1 L# M" k& ` A, S
y( V4 D/ p) J
% [ i0 e5 M/ N+ Y2 G- Z- I9 R- i5 o/ D K5 J/ ]! V2 \1 ^; P3 S* `
四、图论算法& l3 \8 b+ c) W6 M% @
这类问题算法有很多,
! `# c- {5 D+ I* J' ~/ B包括: Dijkstra 、 Floyd 、 Prim 、 Bellman-Ford ,最大流,二分匹配等问题。9 o+ V3 c6 \$ A' L+ C4 @
! r9 m. i3 H( @
# T; P( {. l- c, b2 L5 v7 e$ V o4 ~3 N
关于此类图论算法,可参考Introduction to Algorithms--算法导论,关于图算法的第22章-第26章。2 ?) ~; g- e7 H3 K: j u
同时,本BLOG内经典算法研究系列,对Dijkstra算法有所简单描述,
' y; t: p% X8 H/ l-----------9 S! i9 j6 _3 K( [, a4 m
经典算法研究系列:二、Dijkstra 算法初探
0 y, B* V" k6 H jhttp://blog.csdn.net/v_JULY_v/archive/2010/12/24/6096981.aspx8 E1 z5 r3 q# K3 i
# x6 B7 i; o j' Y! {) `/ z更多,请关注本BLOG 日后更新的博文。8 b7 Q; z) m2 z' Z% D
K. C, c" o$ K: T
$ U: a* l/ W9 k
/ k( F4 x1 I# L# D9 J7 a$ N: s0 r- U. B* a" Y
五、动态规划、回溯搜索、分治算法、分支定界等计算机算法
' r# B) _; W6 r* \5 Q1 C在数学建模竞赛中,如:92 年B题用分枝定界法, 97年B题是典型的动态规划问题,! ]2 g# I3 I( N! q" n* B
此外 98 年 B 题体现了分治算法。1 I# S6 p5 r' f# s5 `
& M0 O; ~. J. _) N7 i; l
( l& }* P/ {" W( p这方面问题和 ACM 程序设计竞赛中的问题类似,& l: A R7 ^, q: A' L
推荐看一下算法导论,与《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。+ c; y/ S' |/ x
0 ~: q& H* O; _2 X! H @$ r8 z6 @; n& B' v" F
; o( O0 p/ O; l) G0 j7 o4 t D. o" w; @
六、最优化理论的三大经典算法:模拟退火法、神经网络、遗传算法 ' I H& E7 R' c$ C% [
这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。$ b6 j5 a( L. n1 D
9 P8 t, c" i- t* x在数学建模竞赛中:比如97年A题的模拟退火算法,00年B题的神经网络分类算法,01年B题这种难题也可0 m7 m" B; w3 w& Y/ Q. r$ U5 e7 Z3 m
; U) \: D0 n& P. V! S# T以使用神经网络,还有美国竞赛89年A题也和 BP 算法有关系,当时是86年刚提出BP算法,89年就考了,
6 ]( F4 i. i+ A& [: N1 s5 C) B' c6 l& b: G) ?6 }8 U$ Y
说明赛题可能是当今前沿科技的抽象体现。
9 M& C! N+ Y& w$ p03 年 B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。$ r& q2 u8 q+ P
) {* s# w v4 I% Z# }- ^+ s: q. R$ ~4 }. l7 t( c ~* L7 `( E
7 K* I" i1 t( o7 J
另,本人对人工智能非常感兴趣,遗传算法已在本BLOG内有所阐述,敬请参见。6 V' k6 K J8 K+ ~8 F8 r1 E
----------
" u+ {) ]( H+ [7 o经典算法研究系列:七、深入浅出遗传算法,透析GA本质
" ]/ n& N$ U0 A3 ?; _- L6 U* p& z. Thttp://blog.csdn.net/v_JULY_v/archive/2011/01/12/6132775.aspx/ Y/ l6 h Q5 z0 S1 X9 L7 I
1 v/ p% K8 R! E+ I$ e; y$ b9 x
/ t L8 k: `& v2 L% ?2 u1 A6 Y) M& `4 j4 x) w
其它俩大算法,模拟退火法,与神经网络,也定会在本BLOG内日后的博文更新中,详细阐述。: ], R3 {9 p1 q; Y1 M! `# S5 n
& {) l4 w, T9 i- ~4 g$ ^7 p* D. U
# A( m5 Q8 V0 @* A3 z0 k: X
% P/ X% f, X/ J) O5 ^* D6 Z: y$ X: d9 h" }, E3 j& H
七、网格算法和穷举法
, ~! [# w1 |) V5 ]网格算法和穷举法一样,只是网格法是连续问题的穷举。: e/ {6 k! Y ?- q& | c, x
比如要求在 N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,
/ P, [8 \# \' b比如在 [ a; b ] 区间内取 M +1 个点,就是 a; a +( b ? a ) =M; a +2 ¢ ( b ? a ) =M ; …;b
& c" P h$ v1 }) p1 r2 d7 u5 o8 O$ B% q* p9 y
那么这样循环就需要进行 ( M + 1) N 次运算,所以计算量很大。
2 W! U2 p( @5 b; S8 X6 |* Z6 Q% a+ k/ s: d: i
2 Z+ O% b$ \$ e, T9 M7 o7 u/ v在数学建模竞赛中:比如 97 年 A 题、 99 年 B 题都可以用网格法搜索,这种方法最好在运算速度较- ^$ E* g* T/ V; o1 l: f, ^
% X3 ^9 J+ r! x" r3 J
快的计算机中进行,还有要用高级语言来做,最好不要用 MATLAB 做网格,否则会算很久。
5 V8 V$ O) P( T7 X. m9 c0 Q. ^9 U
* {4 Y- Q5 F R5 B% ~1 n; ~穷举法大家都熟悉,自不用多说了。
# i7 _ j" J* {- _ p: @
6 v- O8 S4 y! _. G) X$ O: K. ^( u% E
! Y4 e$ H0 U9 f l" Q: \
% j) u v, N' J) o; J八、一些连续离散化方法, J _6 Q; t$ k: b
大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界
, O( P& l- h2 \, b
$ w6 ^) @" o. | E9 B! x& r) |中,计算机只能处理离散的量,所以需要对连续量进行离散处理。
9 a6 o) d& @( N, q3 N+ M* U, e* R
4 [- h5 ]7 s7 k G) T% R, S; H7 h4 b8 L- \# B: | |1 ]# T, N
这种方法应用很广,而且和上面的很多算法有关。3 j+ S0 U0 \- q
事实上,网格算法、蒙特卡罗算法、模拟退火都用了这个思想。 ( d+ k& R" v/ \; }2 D
+ P$ u4 n0 V& N+ c7 J
8 e2 w/ {1 w+ B
5 K9 o8 D2 {# a3 r+ K6 J. |2 ^2 w' y' b% C% [8 c+ {
九、数值分析算法
! m& W8 B/ i" P7 b$ }0 {7 C+ M数值分析(numerical analysis),是数学的一个分支,主要研究连续数学(区别于离散数学)问题的" Q: ~5 D* r& X' [( B5 i( X- a
- ^4 s6 h& D0 {
算法。
" Z( ? A9 K5 J$ [5 `# X; Y( V/ h0 i
如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比 如方程组求解、矩阵运算、( I: A1 `; ?. N6 B+ j
) G9 U8 x* n/ [# F: X/ `! n函数积分等算法就需要额外编写库函数进行调用。1 y' J1 T p8 g7 T$ f4 ^
5 ^, V6 N/ Y: H& l. P
这类算法是针对高级语言而专门设的,如果你用的是 MATLAB 、 Mathematica ,大可不必准备,% C6 q6 E8 _7 i1 D
因为像数值分析中有很多函数一般的数学软件是具备的。" Y4 j/ _* D) N' S8 _1 @. `
. P% W) s+ s/ F
* B8 c w* t$ S, U6 Z* D: j+ g6 I! [8 e! f
6 z5 i) L7 Y5 [& s& J/ y- o0 s
十、图象处理算法
/ g @( p1 O( Y在数学建模竞赛中:比如01 年 A 题中需要你会读 BMP 图象、美国赛 98 年 A 题需要你知道三维插值
7 m5 {1 c2 X! |9 j' R
3 P3 U6 V) k L" g1 X; ^+ i( I计算, 03 年 B 题要求更高,不但需要编程计算还要进行处理,而数模论文中也有很多图片需要展示,. h$ R9 H {; E# l r4 ?% I
) J8 `0 _# V& M, n; T- ]因此图象处理就是关键。做好这类问题,重要的是把MATLAB 学好,特别是图象处理的部分。
' Z0 K7 j& x8 T---------------------
% ?( V1 a9 ~4 ^作者:画面太乱了 * z4 [. F; W7 M: ^9 B
来源:CSDN
3 y8 J1 K) H7 v/ @' S5 S3 q+ \! B7 Q# _
* x9 |% m. c, {5 g8 d4 V
) g* u* \, f( M. a$ D' j( I |
zan
|