在线时间 90 小时 最后登录 2018-12-27 注册时间 2016-4-22 听众数 17 收听数 0 能力 20 分 体力 23470 点 威望 2 点 阅读权限 200 积分 7535 相册 0 日志 0 记录 0 帖子 126 主题 100 精华 1 分享 0 好友 6
升级 50.7%
TA的每日心情 开心 2018-6-4 15:01
签到天数: 7 天
[LV.3]偶尔看看II
群组 : 2018年大象老师国赛优
群组 : 高考备战
群组 : 2018中小学数学建模冬
% |8 g( S/ N4 b) A3 F
数学建模比赛 是本科生和研究生阶段最重要的比赛之一,包括全国大学生数学建模竞赛(俗称“国赛”)和美国大学生数学建模竞赛(俗称“美赛”)。在这些比赛中取得好成绩,不仅有助于保研、有助于找工作,更重要的是形成科学的思维模式。下面列举了十大算法,在数学建模竞赛中有着无比广泛而重要的应用。
+ X# T7 D3 l9 }9 \* S
- l# P0 \& k0 k 01
8 }) C7 h+ V* c4 L0 \
0 ~2 v9 ]0 s. j4 J9 n* _1 i/ Q
蒙特卡罗算法
; [8 |9 c" R1 N+ V4 G
1946 年,美国拉斯阿莫斯国家实验室的三位科学家 JohnvonNeumann, Stan Ulam和 Nick Metropolis 共同发明了蒙特卡罗方法。
' _* C' v. E+ d* q9 o4 E7 y 蒙特卡罗方法(Monte Carlo method),又称随机抽样或统计模拟方法,是一种以概率统计理论为指导的一类非常重要的数值计算方法。此方法使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。
. i7 I9 ^. h* A 7 p% g5 F& v8 \( j
由于传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。( o& J8 ^8 Y! K- B E, v( E
- T4 i5 Q' R: F$ {0 m! y+ r. a* d
蒙特卡罗方法的基本原理及思想如下:
0 ?9 V: g" p& f H7 `
1 G7 r" g6 ^: K( a+ | 当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。
# z& T% b n1 d w ; Q/ y8 X' E0 @/ T. ]( r" U" O
举个栗子,直观了解蒙特卡洛方法: , y; V u; q" c) b2 |, c0 T
$ o# a1 n$ u+ k0 C M( G, K0 \
假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如:积分)的复杂程度是成正比的。蒙特卡洛方法是怎么计算的呢?假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候,结果就越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。
# y7 N+ M) z, y. h 2 v( O1 c* m% \. q* m# U8 V8 A% s# z
- s+ d0 C" z( _1 c p
蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解。
$ I' E" X1 K; x! r5 ?
$ e8 C5 Z+ `, i/ \ 蒙特卡罗方法与一般计算方法有很大区别,一般计算方法对于解决多维或因素复杂的问题非常困难,而蒙特卡罗方法对于解决这方面的问题却比较简单。其特点如下:
, p3 e% ?2 k7 }6 @8 k6 A' Y ! f+ Z, g& ^% b" m6 t
a、 直接追踪粒子,物理思路清晰,易于理解;
/ t' Y1 z! k' r/ b
" g. a+ L2 w' U [( s: | b、 采用随机抽样的方法,较真切的模拟粒子输运的过程,反映了统计涨落的规律;0 E" J* [( e2 J9 d. y2 X8 G
( D' r5 J( G; Z( ]- M
c、 不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法等等
% p! T. Y" o' ?, ]/ d$ ? " r% r0 l. G) t
02
' G$ s7 c# ^2 _
n8 f! ~4 D6 L) a5 E5 I
数据拟合、参数估计、插值等数据处理算法
* q; @& M; E# T. I5 C( E$ e
( @1 J8 r: s2 W0 [ 我们通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用 Matlab 作为工具。1 S( d$ @7 s, `* Q& f3 d
7 p2 ?0 J }. c; Q( Y 数据拟合在数学建模比赛中中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是 98 年数学建模美国赛 A 题,生物组织切片的三维插值处理,94 年 A 题逢山开路,山体海拔高度的插值计算,还有吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。& o% X6 h+ c. j) n5 ^3 Y) w8 B
1 A( ~& b- x2 M7 N" F, e, u
$ H0 U( c5 {4 m: ^4 a% x6 x 此类问题在 MATLAB 中有很多现成的函数可以调用,熟悉 MATLAB,这些方法都能游刃有余的用好。
, f" |0 \7 t7 K5 p 3 q3 \ \, J8 _
03
1 b( J0 X ^0 Y C6 Q
- j$ s& K2 ^/ K# ^0 p* e# @ 线性规划、整数规划、多元规划、二次规划等规划类问题
2 e" p( q7 f8 A1 X# b r & u, Y( c! a6 a7 }( B3 {# V4 ?
数学建模竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件、几个函数表达式作为目标函数的问题。
6 _) v0 v. p% m. ^9 f # } K+ F: V/ a! p
遇到这类问题,求解就是关键了,比如 98 年 B 题,用很多不等式完全可以把问题刻画清楚,因此列举出规划后用 Lindo、Lingo 等软件来进行解决比较方便,所以还需要熟悉这两个软件。
2 b( G, f2 O/ W ^& G# f7 k$ E . A) J" {8 z% P; G% Z& ^2 I
04
2 ^' K7 j. S/ {! H2 d8 {8 S7 c 4 B v3 S5 v! Z
图论算法
! c0 G+ p' |5 }' R6 h, x 6 V; p4 n! O! z
这类问题算法有很多,包括:Dijkstra、Floyd、Prim、Bellman-Ford,最大流,二分匹配等问题。 r0 r# v+ V3 X, v! Q3 I
; p& A8 j; m/ }# n ] 关于此类图论算法,可参考 IntroductiontoAlgorithms--算法导论,关于图算法的第22章-第26章。3 t D2 H7 ]4 y5 J; n- ?7 |' ?5 |/ }
( y' Z1 v1 ~" P6 c
% W4 M- ~# O# A% ?0 U
* z+ u3 K6 K; g- ]
# Q/ f" o% Z8 D# U6 D/ z& {. g0 K% Y
05
+ Z' C0 L9 |+ S/ r) {* B , z5 _- Q4 V8 C4 E& e1 Q* Q2 L
动态规划、回溯搜索、分治算法、分支定界等计算机算法
6 I; T! A: {9 ]) |" F
; u5 j* b9 e/ X8 V8 f 在数学建模竞赛中,如:92 年 B 题用分枝定界法,97年 B 题是典型的动态规划问题,此外 98 年 B 题体现了分治算法。
3 [7 R9 J+ I+ Z- O3 W! j; M3 j 4 }, \, l: O, B1 z5 o
( T- \' Q0 \; M! T. E2 S' q 这方面问题和 ACM 程序设计竞赛中的问题类似,推荐看一下算法导论,与《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。$ \- [# G: E! l' o6 Y3 K0 @& v
, n t+ z/ A+ f* |
06
& x: i" R3 h/ [# m2 C / ^; x$ O0 f; d, j6 k1 |5 S f8 z
最优化理论的三大经典算法:模拟退火法、神经网络、遗传算法
( p9 F7 |0 f, L9 J/ Y
/ G* D2 s: P4 E& |
这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。3 m" g k9 g3 R
. M% y% F3 @& I s- Y0 a7 B
在数学建模竞赛中:比如 97 年 A 题的模拟退火算法,00 年 B 题的神经网络分类算法,01 年 B 题这种难题也可以使用神经网络。+ U0 Y' V$ A/ I7 N R1 l
4 ]9 i, O3 R' q: F8 |1 { n2 u' C 还有美国竞赛 89 年 A 题也和 BP 算法有关系,当时是 86 年刚提出 BP 算法,89 年就考了,说明赛题可能是当今前沿科技的抽象体现。
2 F$ ^! O+ l) a; k m2 u5 Y1 v5 \ ) g Q. o- P- L4 S4 x
03 年 B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。
+ k- \' Z# Q/ m! ^ 0 f) ~( C/ ?( T" {+ H; }% [. V

9 C% u/ _, ~. k8 O, s
" C5 x% O8 a7 t! `8 @% G 5 A/ }5 g1 i. U5 r' R
07
+ C. x/ e: t$ t' R' c
$ J) f/ {. N' N2 [; R
网格算法和穷举法
8 i6 m' s3 n B/ ~# c8 l : c% h$ Q+ x1 ]' C0 s
网格算法和穷举法一样,只是网格法是连续问题的穷举。8 E' o7 l$ l( r3 B1 ^4 x
# ?) O$ b" L& ~& w) c- y, J5 D
比如要求在 N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,比如在 [a;b] 区间内取 M+1 个点,那么这样循环就需要进行 (M+1)N 次运算,所以计算量很大。( F* S5 i9 r: F% n+ ?* }4 a) h4 z
+ r. S s1 L' D& X0 v7 D
在数学建模竞赛中:比如 97 年 A 题、99 年 B 题都可以用网格法搜索,这种方法最好在运算速度较快的计算机中进行,还有要用高级语言来做,最好不要用MATLAB 做网格,否则会算很久。
$ X J$ @. _ R) ^& K' B O
; ?- O# s6 S2 }- c% L* N+ Z6 J% h ; C( Z! Q2 H0 t% i$ N3 K
. M# ^! G0 I9 h5 h: n
穷举法大家都熟悉,自不用多说了。' H0 y: s9 L) F1 H
' N" T6 S8 M& y5 p8 O( ^, C {; c
08
; E' H9 ?. x3 n' V2 \7 D9 N, O
# i0 g5 ]' m+ G 一些连续离散化方法
( ]" `& \. p, W8 n
J# v* Q* A! p; t( c, B 大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界中,计算机只能处理离散的量,所以需要对连续量进行离散处理。% Q6 W" j4 z) ~* ~ E% @, U1 S6 ^
9 ~. D: \4 q) l
这种方法应用很广,而且和上面的很多算法有关。事实上,网格算法、蒙特卡罗算法、模拟退火都用了这个思想。
; v# |2 l5 l/ W6 N& S8 ]3 r
0 ?0 W8 o# d5 V0 k# _ 09
3 ]& ~7 c3 D+ k& P/ M5 y- ?8 P/ k
% M/ k" h9 k& g0 {: N5 s 数值分析算法
J: W) L8 y$ ?$ b7 C2 l* w8 d
0 N) p7 |. E) F1 N! \0 ?: w 数值分析(numericalanalysis),是数学的一个分支,主要研究连续数学(区别于离散数学)问题的算法。
& l' w1 x, D0 Y p7 t$ V& O: S ; R, c! |1 \# K9 ?/ Q9 O( Y) \
如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。
: M) I7 s/ q* N& {! i# u0 A/ U 9 n L) ]3 | `" S& f F2 K& C
这类算法是针对高级语言而专门设的,如果你用的是 MATLAB、Mathematica,大可不必准备,因为像数值分析中有很多函数一般的数学软件是具备的。0 ^* S/ r2 ?8 ~! L
! X7 D. i1 m# {+ ^7 c }3 T. Q
10
' a3 b. M! F" R4 r7 D / D; m4 M2 Z; p9 }- w* }5 [9 u% _/ } A
图象处理算法
$ ^9 x5 G% a0 `6 } 7 }4 T5 _5 c! B& Y) N
在数学建模竞赛中:比如 01 年 A 题中需要你会读 BMP 图象、美国赛 98 年 A 题需要你知道三维插值计算,03 年 B 题要求更高,不但需要编程计算还要进行处理,而数模论文中也有很多图片需要展示,因此图象处理就是关键。做好这类问题,重要的是把 MATLAB 学好,特别是图象处理的部分。
0 X, U$ m7 R: y
9 S+ d. m R/ q2 z! P. i
8 O( {$ `% ^, W; d& w5 E1 ^ 8 g- k* `" ]5 ]- V5 q4 h
. }- }! s, w/ p. _" G& C
zan