- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564676 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174626
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
! C9 K1 r0 B8 |, _数学建模十大经典算法漫谈; G. Z! [( l6 M% u2 \
数学建模十大算法漫谈
+ C* m5 K- e: m7 \4 a, z
" y* V/ G2 P% n, \ g8 d; S
) F- `0 w2 {8 o2 R$ |9 }
* @4 L! S5 Q5 D) P2 t. G作者:July 二零一一年一月二十九日( s0 V4 w! Q+ T- D* Q% L: R
: I2 t& }( p% o- T5 \5 m
本文参考:3 J- w7 ]* n" E" d& G9 @
I、 细数二十世纪最伟大的十大算法 [译者:本人July]* d: N, d: j( U t6 O% w: h/ |0 }% X
II、 本BLOG内 经典算法研究系列
8 o7 V' `1 A) U0 ^8 yIII、维基百科
4 a2 r m0 @% I, i! Q" r2 h; o! Q. [! m$ H
------------------------------------------
1 [) `( B. ]3 x( H4 O( j0 B, c( `. e R9 q
博主说明:! a7 R6 V/ _0 r% ^& u+ s+ V
1、此数学建模十大算法依据网上的一份榜单而写,本文对此十大算法作一一简单介绍。8 z0 h M% n2 t' a( N
这只是一份榜单而已,数学建模中还有很多的算法,未一一囊括。欢迎读者提供更多的好的算法。
, A* {5 v4 K% W& s4 h5 o2、在具体阐述每一算法的应用时,除了列出常见的应用之外,4 c- o+ i& E, g( S5 ]- I
同时,还会具体结合数学建模竞赛一一阐述。
D+ X2 y% g, T4 _; ]7 Y; U毕竟,此十大算法,在数学建模竞赛中有着无比广泛而重要的应用。$ M2 }6 B7 K6 u5 h7 ?- D9 r
且,凡是标着“某某年某国某题”,即是那一年某个国家的数学建模竞赛原题。$ d3 T( [% _$ Y% b
3、此十大算法,在一些经典的算法设计书籍上,无过多阐述。
1 ?7 w0 `% C% y9 K若要具体细致的深入研究,还得请参考国内或国际上关于此十大算法的优秀论文。
" D% G2 O7 J% Z8 k谢谢。
) a2 Q) v I9 M+ H8 x
8 A& s' L) D) z7 E
- g5 c v" m$ [9 K7 j" Q+ Y: N0 Z+ d5 \% z& m5 F
. l' R4 e7 T4 _
. B- p: x. s, ^8 d: [* k) K一、蒙特卡罗算法! A5 j- T5 h* x2 k
1946年,美国拉斯阿莫斯国家实验室的三位科学家John von Neumann,Stan Ulam 和 Nick Metropolis* ]( [/ b$ o7 C0 q. w# U; E2 A: l
共同发明了,蒙特卡罗方法。& P) r" c& s+ Q. s8 q! ]
5 b' [) f3 }7 x- e+ Y2 \
( g9 e! z/ U% e; [9 x' q" E此算法被评为20世纪最伟大的十大算法之一,详情,请参见我的博文:1 T! b% u( N* h% @1 Q1 u/ E
http://blog.csdn.net/v_JULY_v/archive/2011/01/10/6127953.aspx% E# S4 ]3 H; H+ @' G
* R$ f4 {& ~, y2 x; z7 P9 l' D7 o, N; ^1 O- x! w
0 e* O5 v8 w& p3 Q蒙特卡罗方法(Monte Carlo method),又称随机抽样或统计模拟方法,是一种以概率统计理论为指导! `) _/ L. K& k+ W: {9 w
6 f/ t' @$ q" s9 t
的一类非常重要的数值计算方法。此方法使用随机数(或更常见的伪随机数)来解决很多计算问题的方
5 b7 |+ X4 b# P& f q
' h1 w" t' {% E* U- _法。
. `) ?8 ^5 y, z1 j; |6 M
" j& x6 c0 G o J+ t9 v: X
* \5 p2 Y0 }' d; z. C6 n% Y: L" a, c4 q% f& A
由于传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真) F8 p4 ?5 H8 n
) v, |- K1 S4 n! ]
实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。
' ~; K. H I8 a) Y: V, W2 T2 W1 H/ Q" s1 |& q9 d4 G- ~- u- @
蒙特卡罗方法的基本原理及思想如下:9 l+ D* J. W. Q
当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法
" O8 D @0 b8 v. L: P6 B/ ~4 p, i0 O1 i1 ~( Z
,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作3 _+ G, Z* `! E; g: w! c% {; P
& l0 @. [; W8 i8 H. W为问题的解。- }9 Y/ Q; [2 _+ e) c
7 V0 n" P1 {; x" }
- \4 J. M- T: h" C( r+ ?$ [7 a0 e$ j5 B2 S& }- v
有一个例子可以使你比较直观地了解蒙特卡洛方法:
( ^$ R8 N u2 u3 l假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如,积分)的复杂程
9 V' c" h4 C$ \6 x. Q& U! i, y }& I' j( j& t+ I# }
度是成正比的。蒙特卡洛方法是怎么计算的呢?假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然4 y2 B R1 m5 L- W6 B
$ T6 U7 Z6 o' _6 V2 K" h- M
后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候& v g+ I; \$ L; l* b
9 k& _3 r! D! w- L
,结果就越精确。% f# T/ {: B8 d6 s/ W* m
在这里我们要假定豆子都在一个平面上,相互之间没有重叠。. P! Q* u( A$ g/ _
" p' x# \7 ~ b4 D) W; F, i6 |
, h: [* r: r) h! b1 F蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模
5 F' I4 L$ k6 |8 d
8 C$ t/ h5 a9 K( w+ L5 J拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的
8 I. z7 n4 Q& s- K0 q* S0 d. \: Q+ Y/ J. b' _1 ~
近似解。
/ S8 D; F( v9 S1 p& a+ `! p' C9 w d# ^: x" Q+ j3 G3 P+ Q- n( j
5 k' C3 K4 Y) X5 ~. [2 F1 M, i" F/ `. j) v1 |$ T9 s
蒙特卡罗方法与一般计算方法有很大区别,一般计算方法对于解决多维或因素复杂的问题非常困难,而
- ?5 s" _1 M* N+ a$ I. m2 _' Q# }8 E; w+ u$ N+ d; B v: r' B8 F
蒙特卡罗方法对于解决这方面的问题却比较简单。其特点如下: 9 Q( F+ m: d& o1 ~( t
I、 直接追踪粒子,物理思路清晰,易于理解。 1 i: o2 y9 v/ t6 \; l- p9 G
II、 采用随机抽样的方法,较真切的模拟粒子输运的过程,反映了统计涨落的规律。
( ^5 ~( o1 n: r" w- ^3 VIII、不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法。
/ [3 q& z. @# V等等。
$ d+ {/ s. F: i' l
5 X( w) ^* A8 Y: i, `9 G, B; A! Y此算法,日后还会在本BLOG 内详细阐述。
$ C( {+ m( u! |. `' D6 o6 O* v" t& k7 ^3 x7 `
) _/ d' Q( X1 F8 M+ M! b
' g/ x2 _& Q9 R4 c0 b" ^
! V. c/ h. s- a4 E
二、数据拟合、参数估计、插值等数据处理算法/ b" s6 K6 n/ I9 Y' a
我们通常会遇到大量的数据需要处理, 而处理数据的关键就在于这些算法,通常使用Matlab作为工具。" Q/ m! i& P& s
8 ]0 j. }& v6 Y* r5 n
数据拟合在数学建模比赛中中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是98年数0 P9 j6 {: p/ h1 ]
6 \/ p+ Q3 t# b* K
学建模美国赛A题,生物组织切片的三维插值处理,94年A题逢山开路,山体海拔高度的插值计算,还有
' k9 {5 T9 z* B3 A. w5 V7 i
1 w4 I8 [: Z7 y( C; L- @吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。
6 q" q. G$ ~# a# l& |& O9 J3 ]# k1 m
: q' ~/ C: d6 T: A- a. R4 u0 w7 O
9 S0 T! b1 c6 ]( e. s* w
此类问题在 MATLAB 中有很多现成的函数可以调用,熟悉MATLAB,这些方法都能游刃有余的用好。
2 [9 X" ~$ t5 ]& z; [8 K" \" S2 o$ V. V1 U
, Y/ j3 u: j# u% R+ A
$ f1 n7 \0 f% b& h* s* q# }5 ^2 ]
' `' y) r4 A n& p三、线性规划、整数规划、多元规划、二次规划等规划类问题. Y5 K$ U, m# M* ^3 U! x3 v" i
数学建模竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件
8 a: i. A4 I/ J ^
$ L/ D/ `' z: R+ o) m1 M. {、几个函数表达式作为目标函数的问题,遇到这类问题,求解就是关键了,比如98年B题,用很多不等式# o5 o' Z& `$ v$ H7 p4 ~$ d
4 E9 U1 n& R; f# b7 e9 F& H完全可以把问题刻画清楚,因此列举出规划后用 Lindo 、 Lingo 等软件来进行解决比较方便,所以还+ v: n& l8 ]% s5 n7 U9 c0 r# y
$ W- a2 @" I3 E" [
需要熟悉这两个软件。' D {% a) a, U9 |7 d6 \4 J
$ f+ N8 b g9 }' H- e* o% |/ C& [2 F- O; W4 V. n
* M3 F, e$ ^+ O4 m# f: e& K9 _3 {) O8 H% c/ E
四、图论算法- }4 @ ^* ]; i3 k5 r# }
这类问题算法有很多,! H% c4 P3 x3 L& I0 W5 d8 D) W
包括: Dijkstra 、 Floyd 、 Prim 、 Bellman-Ford ,最大流,二分匹配等问题。/ b3 h2 }; v5 A
9 d' p( i4 Q: z: ]7 K
" G$ ^; y& M0 R5 }+ o& B
/ j1 L: I0 o. \- C% N& I( y关于此类图论算法,可参考Introduction to Algorithms--算法导论,关于图算法的第22章-第26章。
d: U, h& s9 d' z同时,本BLOG内经典算法研究系列,对Dijkstra算法有所简单描述,
8 _& H- E" h; J9 E6 Z& H# s3 H-----------
! C' F! D$ x5 X/ q- g7 Z经典算法研究系列:二、Dijkstra 算法初探
' t& f0 h f. m7 H/ ~http://blog.csdn.net/v_JULY_v/archive/2010/12/24/6096981.aspx
6 b0 |: Y: V4 ^
* o. |, s, B6 c- f' @0 i, m1 l更多,请关注本BLOG 日后更新的博文。
: u: h* | f0 A. t+ `' w0 u! U% b% { l2 `
1 |* |+ k6 o! \) \. G7 {/ ]" ^
* p" k+ [. u! M6 Z
* l+ H a% |5 {; L. h& Z8 \" q6 E: h五、动态规划、回溯搜索、分治算法、分支定界等计算机算法
f" G- w2 }) r& U% B在数学建模竞赛中,如:92 年B题用分枝定界法, 97年B题是典型的动态规划问题,, F* e2 \: _2 d' V
此外 98 年 B 题体现了分治算法。
0 {& i5 H( P, k4 q) M/ E A
& Q+ ?, w" z2 g' u% A6 V$ v3 ]: v$ o" I
5 u4 q5 h" y1 C这方面问题和 ACM 程序设计竞赛中的问题类似,
% Y8 P/ ^' U' V9 c8 F/ B7 K推荐看一下算法导论,与《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。
! q3 x2 ~; F5 k1 v; D! J% k: j& b/ X4 Z2 N4 b
- U% B! S. @1 \, n X
0 U2 I) @1 y' H1 ?" R2 k" r4 g* x$ l/ q7 u* l
六、最优化理论的三大经典算法:模拟退火法、神经网络、遗传算法 2 |7 c& ]& k$ p/ [
这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。( i$ C' m! A! z; c7 f/ ~/ p
- G5 w% D6 }0 \/ R在数学建模竞赛中:比如97年A题的模拟退火算法,00年B题的神经网络分类算法,01年B题这种难题也可3 H; _$ u4 l6 \! W' t# V, {
1 |1 y8 l5 R' j' Q. _ J% S& n以使用神经网络,还有美国竞赛89年A题也和 BP 算法有关系,当时是86年刚提出BP算法,89年就考了,8 B: I4 J4 H# C( a5 f& L9 B- a
3 G# s1 D5 s4 v( H# E! y1 h, B
说明赛题可能是当今前沿科技的抽象体现。 ' C6 q+ l0 s) O
03 年 B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。
! c" a9 ~/ T9 f7 Z H' p4 [, `4 a7 M9 S7 V% L" J9 S- O
2 h4 H( i {( X6 C0 j
6 j9 a3 q+ a: h1 T5 _另,本人对人工智能非常感兴趣,遗传算法已在本BLOG内有所阐述,敬请参见。
; ]6 e& F. D2 \0 q5 o----------2 d" @* e: [% o* y8 k0 N% ?
经典算法研究系列:七、深入浅出遗传算法,透析GA本质
7 {. D, U" K' B$ @, V% w" phttp://blog.csdn.net/v_JULY_v/archive/2011/01/12/6132775.aspx
- ?+ z4 G; z2 T' l; R, w- Q: g
3 ]- U4 w; Q! [; f$ P: h
, m3 e* j& o2 m: ~其它俩大算法,模拟退火法,与神经网络,也定会在本BLOG内日后的博文更新中,详细阐述。5 _) c! O' ?: i. ?6 e! ^
3 D+ s& K7 I, G/ J; d# S J/ T7 O% f; m* ^' d& p+ C) I# C
2 m3 O. |7 v" \" }. ~2 `$ X
/ f) x0 Y" d, O1 ~% U# Y# [七、网格算法和穷举法
0 g0 h5 z2 Q, w* E网格算法和穷举法一样,只是网格法是连续问题的穷举。% g* w3 p9 ^ L7 a( ]' q
比如要求在 N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,
9 D0 K9 |* O1 T6 i: p1 c, T3 o比如在 [ a; b ] 区间内取 M +1 个点,就是 a; a +( b ? a ) =M; a +2 ¢ ( b ? a ) =M ; …;b0 i6 P7 s2 B! s# N, _
) E* I' A7 @+ W那么这样循环就需要进行 ( M + 1) N 次运算,所以计算量很大。
3 y- Z- a3 i; W
4 G- e3 w" R) g9 v8 D
4 r$ \* _# i" `& s p在数学建模竞赛中:比如 97 年 A 题、 99 年 B 题都可以用网格法搜索,这种方法最好在运算速度较 m" i! @" ]. x5 B; ?9 g! @
/ K7 i7 P$ F8 n4 m/ Q- N* c7 G快的计算机中进行,还有要用高级语言来做,最好不要用 MATLAB 做网格,否则会算很久。/ b; `' |/ P; e, e* c9 N
/ t1 w0 A# z: O- O+ d
穷举法大家都熟悉,自不用多说了。 1 X0 z0 B! V; Y" ] d' c' b
: i0 c, @9 ~+ @6 E1 ]
& p/ N, Q0 m1 v2 t
1 _3 j/ |* m0 z7 Q* r# ]0 P6 R7 h- V, v7 T: `( Q
八、一些连续离散化方法
, `& M: u, G3 l9 J) j) q* ~大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界5 r$ m9 D% z- o: ?% s% ~& S
+ B8 B" l0 g9 t. W( I中,计算机只能处理离散的量,所以需要对连续量进行离散处理。, n6 l- C" y% F# S5 x
! d) G" H) {- y, i g' K
6 E: e& b+ v1 Y& A4 ?& u: y+ b
这种方法应用很广,而且和上面的很多算法有关。& ]' {) }- e& R
事实上,网格算法、蒙特卡罗算法、模拟退火都用了这个思想。
4 n/ k0 O. n+ g, V0 v6 H; Q: |3 f$ `7 n" n2 W. T7 [
: z; H+ H2 p3 z* E# R
- a9 g- `' w! f' K2 B3 k$ ?
6 r" v- b* _6 g, w& c+ U* Q* D5 J九、数值分析算法9 B7 A) `4 v& Y$ k2 r- s
数值分析(numerical analysis),是数学的一个分支,主要研究连续数学(区别于离散数学)问题的
) @! x+ t' o: _6 r
! \0 p' e" \3 A5 U& S. `算法。% B: E) w$ Q" c% A$ m% K6 b
9 ]+ ]; ~! M D& r4 K如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比 如方程组求解、矩阵运算、8 J, d5 L5 x! @1 I
& i! Z$ S6 v, ^: X1 `; w函数积分等算法就需要额外编写库函数进行调用。
4 i J) B. E9 [! ?5 C1 _( b7 e: W# Z- i; T2 n
这类算法是针对高级语言而专门设的,如果你用的是 MATLAB 、 Mathematica ,大可不必准备,
6 L# ^2 y- o; V" y1 F, A因为像数值分析中有很多函数一般的数学软件是具备的。2 X! m6 E5 W4 W; k! ]. i7 o
) P- p/ @8 }6 ^
# a9 I9 e% l2 R* f* I+ \" H( `
$ s) }; B( P+ d9 R- O* ~/ s# C+ J
) b0 k& e# l. M6 l: m+ q, s
十、图象处理算法
}8 t C# ~6 Y/ K8 `1 g在数学建模竞赛中:比如01 年 A 题中需要你会读 BMP 图象、美国赛 98 年 A 题需要你知道三维插值 E) d" K: u% R. c
8 I' @. n% E; ~+ [# Y1 d计算, 03 年 B 题要求更高,不但需要编程计算还要进行处理,而数模论文中也有很多图片需要展示,
! Y9 d* {3 j; l
9 T6 |9 `9 F! P* [ x; a因此图象处理就是关键。做好这类问题,重要的是把MATLAB 学好,特别是图象处理的部分。
: Z# W8 ~. Q; [---------------------
- w3 _2 T9 ?( }9 H- ^- I: O作者:画面太乱了
# c3 _' |1 C! q5 O来源:CSDN ! P1 S/ j: E4 p( t+ [
# l5 O6 }! j* C6 l. Z( ?7 m
/ `# ^& F+ \4 u
+ c' V$ t, G' X& t5 F5 L5 R( q |
zan
|