在线时间 90 小时 最后登录 2018-12-27 注册时间 2016-4-22 听众数 17 收听数 0 能力 20 分 体力 23480 点 威望 2 点 阅读权限 200 积分 7548 相册 0 日志 0 记录 0 帖子 126 主题 100 精华 2 分享 0 好友 6
升级 50.96%
TA的每日心情 开心 2018-6-4 15:01
签到天数: 7 天
[LV.3]偶尔看看II
群组 : 2018年大象老师国赛优
群组 : 高考备战
群组 : 2018中小学数学建模冬
5 p) e. D) y, ^. z3 J 数学建模比赛 是本科生和研究生阶段最重要的比赛之一,包括全国大学生数学建模竞赛(俗称“国赛”)和美国大学生数学建模竞赛(俗称“美赛”)。在这些比赛中取得好成绩,不仅有助于保研、有助于找工作,更重要的是形成科学的思维模式。下面列举了十大算法,在数学建模竞赛中有着无比广泛而重要的应用。
7 c' k# g0 V% j+ E2 C9 s8 s
1 c) b: {& Z/ ^: P9 y1 x' y 01
+ [8 U# J0 h% |/ W% r. J. `6 k 2 M. C* R6 M% D7 H
蒙特卡罗算法
8 |( B. _9 _' t G7 d( }
1946 年,美国拉斯阿莫斯国家实验室的三位科学家 JohnvonNeumann, Stan Ulam和 Nick Metropolis 共同发明了蒙特卡罗方法。
: v6 x% ^; G3 G- W+ g0 y5 `& G 蒙特卡罗方法(Monte Carlo method),又称随机抽样或统计模拟方法,是一种以概率统计理论为指导的一类非常重要的数值计算方法。此方法使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。
d7 ^) A9 |1 o# X3 ^ 3 T7 m* i# [4 \5 }% _3 J; t
由于传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。
0 q0 a% z& O1 h0 y& H; P1 d- _
$ Q" L. c+ q) c1 r; | 蒙特卡罗方法的基本原理及思想如下: 6 p7 H# X d+ }
2 y" h1 _8 m4 t3 n6 t" l$ Y 当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。) ~& q6 B0 v* k- e/ E
% a+ U- w6 _' W# q" R3 O* j$ ^2 Z, Z 举个栗子,直观了解蒙特卡洛方法:
- Q( o' g- a2 U% j I5 Z; _7 g 6 C% j- G: X$ S" S! {% Q
假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如:积分)的复杂程度是成正比的。蒙特卡洛方法是怎么计算的呢?假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候,结果就越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。
3 t2 u( C ^4 ^3 N' J5 ^$ q) P
8 s9 _) n& E% i4 n7 C5 H
$ l7 o& R/ B2 |9 }+ @+ F 蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解。 h; o. N H( n8 V
% d1 H9 Z5 u- Y# i! G# F 蒙特卡罗方法与一般计算方法有很大区别,一般计算方法对于解决多维或因素复杂的问题非常困难,而蒙特卡罗方法对于解决这方面的问题却比较简单。其特点如下:
! _2 J# ]% K- ]# I3 V
, M' x4 H8 g% L+ t2 o a、 直接追踪粒子,物理思路清晰,易于理解;5 n( B% r1 e& b( F D" O+ F
" F% u/ ?7 h( i" a4 d b、 采用随机抽样的方法,较真切的模拟粒子输运的过程,反映了统计涨落的规律;% f5 u1 P0 I+ C! u) C
' |% {& ?6 |/ s( y/ c+ d3 W/ C c、 不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法等等
/ `7 t( z! ^) ?2 O* ]7 v8 v* k g# U : j' Z4 V- L. H( j. h, a! s. D
02
- ~5 ?4 p/ v' n; f/ a8 y
8 f% r+ u& I! M5 V6 V6 m 数据拟合、参数估计、插值等数据处理算法
$ K) B4 e7 K* Y7 Y
! u9 r3 A9 m" I4 w
我们通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用 Matlab 作为工具。, d# S6 ]/ y( k; E* _$ _
% v* D! i- d. a9 q0 o- [
数据拟合在数学建模比赛中中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是 98 年数学建模美国赛 A 题,生物组织切片的三维插值处理,94 年 A 题逢山开路,山体海拔高度的插值计算,还有吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。4 V$ Q/ y- _5 v' W
" c7 P5 p* r7 R' b3 n( s7 k
. E8 K% a$ f+ b% _9 p2 C
此类问题在 MATLAB 中有很多现成的函数可以调用,熟悉 MATLAB,这些方法都能游刃有余的用好。' t4 [: r( F" I
8 }; o1 |# L% e$ `4 Z0 D 03
. j* w# N9 o+ @5 |) A5 Y _' j # w! X, S: v& r! r x9 j e6 @- x
线性规划、整数规划、多元规划、二次规划等规划类问题
& l5 ^+ A* U) V) C
: K0 p' c) i- { 数学建模竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件、几个函数表达式作为目标函数的问题。6 o3 }) ^/ ?2 O" O) u2 N
( J6 w; k: O7 |% O N 遇到这类问题,求解就是关键了,比如 98 年 B 题,用很多不等式完全可以把问题刻画清楚,因此列举出规划后用 Lindo、Lingo 等软件来进行解决比较方便,所以还需要熟悉这两个软件。
9 s- ~$ W, \, h- S6 ~- ^( @ 9 [: d% E- W+ W* m" Q. {4 ]; p
04
* I/ W0 B( p+ V' f# r7 D
# H5 m0 U6 B4 k/ [) ?
图论算法
, e c$ N \% I
8 i- ? [2 \+ F& ?1 ] 这类问题算法有很多,包括:Dijkstra、Floyd、Prim、Bellman-Ford,最大流,二分匹配等问题。
* ^, F1 p* k% l* K6 ~
, }/ H- ?, W" l; o2 u+ x) s 关于此类图论算法,可参考 IntroductiontoAlgorithms--算法导论,关于图算法的第22章-第26章。# w" W, N( e+ j J/ t, y8 T
' y- W. |" Z, B5 _
) H+ S6 L% a2 T1 i' [6 d; `

! Z9 p- @* ]( b7 B% a5 M/ A9 L
7 A- r. a U+ w* `" C4 s$ | 05
8 Q/ E) O5 J! Q % I+ }/ o/ k7 x. D2 u5 G5 G
动态规划、回溯搜索、分治算法、分支定界等计算机算法
/ w2 x: A% w& d% \
( e8 S9 _- A1 C- S 在数学建模竞赛中,如:92 年 B 题用分枝定界法,97年 B 题是典型的动态规划问题,此外 98 年 B 题体现了分治算法。
) {6 W0 E) N. u! _# g1 {
% z$ B7 [: H5 n4 e3 X) V' P
/ u3 b$ q" U! Y3 B& [ 这方面问题和 ACM 程序设计竞赛中的问题类似,推荐看一下算法导论,与《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。 K! V0 Q8 P+ A, Q
& g! t3 Y6 n0 X 06
+ N( W1 f0 D+ L% x, F
5 `+ K9 d; v B) E& W 最优化理论的三大经典算法:模拟退火法、神经网络、遗传算法
4 z: x* p @* ?% E) H* ~ $ {, [" n: m+ r h) ^
这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。+ I/ P& u8 l# m% T) x
" E4 p; N# s" _/ h
在数学建模竞赛中:比如 97 年 A 题的模拟退火算法,00 年 B 题的神经网络分类算法,01 年 B 题这种难题也可以使用神经网络。
@6 Z" \6 B$ g. V9 r" d5 `( J, O# m
: m- W( e: R7 |/ W 还有美国竞赛 89 年 A 题也和 BP 算法有关系,当时是 86 年刚提出 BP 算法,89 年就考了,说明赛题可能是当今前沿科技的抽象体现。$ ?5 g5 [* |- S( l3 ~# u: e
3 Z5 |0 ?' z& G* x 03 年 B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。) q& `. G, I4 @. Y' U1 b
, Q3 p' C+ C" I& n

9 ^: ?9 ~8 m, T4 J# q 3 x- }/ i6 n% r: L8 E. ^) l
7 `" l5 Z0 A7 h- F 07
0 }+ E& f+ i2 ?- J5 F Y' D$ E4 a
$ @# g4 K. ]: E n3 E" J
网格算法和穷举法
- r+ }+ x. q* L8 x m* e
$ H+ g, q4 f2 M$ E/ @
网格算法和穷举法一样,只是网格法是连续问题的穷举。
/ h6 @1 C2 k( E8 H S' F/ D: T ; i+ T. ^; ?2 P4 N9 u
比如要求在 N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,比如在 [a;b] 区间内取 M+1 个点,那么这样循环就需要进行 (M+1)N 次运算,所以计算量很大。9 d; ]# L# ?. g* x
t- R9 A) C1 `1 O1 t! M 在数学建模竞赛中:比如 97 年 A 题、99 年 B 题都可以用网格法搜索,这种方法最好在运算速度较快的计算机中进行,还有要用高级语言来做,最好不要用MATLAB 做网格,否则会算很久。
# z/ W1 |" a% M% `7 _; G 2 z! B3 d" h2 n7 ]# I

$ C" v1 P, Y# n2 g6 G 9 h) _: e2 s# K/ ^' G
穷举法大家都熟悉,自不用多说了。
& S2 \: U+ V9 j% A1 v: o : E E, ?1 W$ ^ J; O
08
% g, X0 h& i+ O
3 y) A" u( k- g$ o9 D f- x2 I 一些连续离散化方法
- Z; v& e3 e1 i7 g: m( C& W
/ R1 U5 z* ~+ |1 K 大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界中,计算机只能处理离散的量,所以需要对连续量进行离散处理。
5 C& h8 {# P6 H" g- n
0 @& I# J' r2 K6 n* J0 T; z% Y1 \, D 这种方法应用很广,而且和上面的很多算法有关。事实上,网格算法、蒙特卡罗算法、模拟退火都用了这个思想。/ \ N. E4 b# W4 s5 [" q6 F
0 E! q9 B j6 {5 g0 ]0 J- J9 D 09
2 {0 E* R( ^" S1 y) t. g8 R $ K0 h, k8 C* R, C% a
数值分析算法
- L6 Y K3 a$ `6 m
0 U+ K7 D2 ]0 V: z3 F4 P) A 数值分析(numericalanalysis),是数学的一个分支,主要研究连续数学(区别于离散数学)问题的算法。
. R# g# h; F+ I/ g! Y; W7 Q
1 r& K. J8 E! Y8 b9 N; _ 如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。/ d) ?- ]/ q+ d& p9 S
; K* y% G% R. e! }1 y( Y2 `+ S
这类算法是针对高级语言而专门设的,如果你用的是 MATLAB、Mathematica,大可不必准备,因为像数值分析中有很多函数一般的数学软件是具备的。3 M" |. C( w- @: I% X, w( f
! n# A! D1 N' C8 J7 o! o3 Y 10
& Q+ {! D; v, V/ }! Y3 i
* }$ E. [! ?& I 图象处理算法
( c: B. r0 V s3 Z4 P/ l 0 j+ z7 o& G1 W: s
在数学建模竞赛中:比如 01 年 A 题中需要你会读 BMP 图象、美国赛 98 年 A 题需要你知道三维插值计算,03 年 B 题要求更高,不但需要编程计算还要进行处理,而数模论文中也有很多图片需要展示,因此图象处理就是关键。做好这类问题,重要的是把 MATLAB 学好,特别是图象处理的部分。3 `0 Y+ x& Y( E1 E* V
% [4 R. j4 J" ^) E2 n/ ]
2 y: d: ~* s; f- |3 p, B
z4 U3 E$ O8 R5 g4 W5 l6 F
& V+ s, J* u: g' W; B
zan