数学建模社区-数学中国

标题: 还在为数学建模的事发愁?带你一起来看看数模竞赛中必备的经典算法 [打印本页]

作者: 杨利霞    时间: 2021-7-9 17:26
标题: 还在为数学建模的事发愁?带你一起来看看数模竞赛中必备的经典算法
还在为数学建模的事发愁?带你一起来看看数模竞赛中必备的经典算法1 a; Y: H" l$ ?  u, I4 @
' Y* C' V3 b/ o4 ^
前言, k. {/ W8 @3 X* L$ x
数学建模比赛是本科生和研究生阶段最重要的比赛之一,包括全国大学生数学建模竞赛(俗称“国赛”)和美国大学生数学建模竞赛(俗称“美赛”)。在这些比赛中取得好成绩,不仅有助于保研、有助于找工作,更重要的是形成科学的思维模式。以下是博主精心整理的两个matlab专栏,包含入门到精通及实战内容,需要的小伙伴可根据自己需求自行订阅。
1 p$ ^+ O7 M% ]1 _# f+ b$ @) J. M& @7 k
; B" P" y" f" `/ T9 X% H- ^
MATLAB-30天带你从入门到精通7 K; p+ s$ H' K% l7 W7 e

4 A; f2 R* ~, ]  ~; R9 M5 u
3 i. d" W2 C* w7 w  i( O
https://blog.csdn.net/wenyusuran/category_10614422.html
! w0 Z% ]6 o! I, D# ]% v7 n% |% g0 i% _% j, K# A
$ x# P+ e7 n9 i2 K- }/ i7 D7 _2 ~
MATLAB深入理解高级教程(附源码)
; \% J* ~0 D! X" x- B$ [$ k- C
! M2 k5 u( o" W$ d; N7 ?0 f0 H& A
  B# D! J; e" w) \
https://blog.csdn.net/wenyusuran/category_2239265.html. f( H0 ^2 |9 C

* J( g! M8 Y- a" K
/ Y$ f- A% S7 N& L& u: S' H
在博主的资源中也有各种算法的应用实例源代码,需要的小伙伴自取哟。4 ]" ~7 Q# n; k! G( V" v
/ I; P4 R! i/ t7 Q' `# Y

4 ^; v" e$ _8 r ' @$ |, ^1 Z5 j9 `

& o6 v. W2 J& \0 a5 E4 n
6 z% A2 w- E4 ^0 n* n9 P# j
9 O0 m# J' k( \2 Q( J
% F0 W* \7 I/ J5 F. H" |

0 w0 @+ a0 y; ]2 x* S# O
! P6 r$ ]1 w9 d* ]/ t
) I) Q! _0 z2 x8 G
: I, P; D6 n$ X

7 k8 @( P" L8 S3 L  \4 i& v 01  蒙特卡罗算法- R. |/ i2 U+ @. S3 S; j* t3 e
1946 年,美国拉斯阿莫斯国家实验室的三位科学家 JohnvonNeumann, Stan Ulam和 Nick Metropolis 共同发明了蒙特卡罗方法。/ o( ]% o- p4 H, f# k  q
# I2 o: j7 \1 L2 g. T" a' W
4 ]: |- u2 Y0 j
蒙特卡罗方法(Monte Carlo method),又称随机抽样或统计模拟方法,是一种以概率统计理论为指导的一类非常重要的数值计算方法。此方法使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。9 B  M. ]$ c1 X* _4 i: |9 N# N
4 o+ C. U( X+ a# Z
7 I' s5 i) ]) r7 x
由于传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。
+ P* t5 ]* h7 [7 u6 h- k6 d
9 o" p! a1 p9 `* I" t
1 D' x0 P" S# r
蒙特卡罗方法的基本原理及思想如下:* d( i) o8 m; f5 r- [
8 H2 ~2 ]' y0 a) }: l8 D! Q0 @

7 O- F1 L+ F1 o; l  H! M, q当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。
2 i) W: ^7 B, B/ a. _$ k3 y% Y, i$ v& q( T+ T( t# e
: s9 _( B; T+ q
举个栗子,直观了解蒙特卡洛方法:3 h4 ~/ O* h7 M, {1 \

8 r. C7 A& `' N* f  v- A( A9 `
6 J9 Y% R/ _" L* T
假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如:积分)的复杂程度是成正比的。蒙特卡洛方法是怎么计算的呢?假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候,结果就越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。9 O+ ~" ~: _7 a9 w8 w

9 C8 T2 A2 ~' e: o' g2 v  I

- \' E: d7 D" s& |  d& `+ p8 [: i- ~
3 Q' W2 }& x- d0 K0 E. ?4 I" m* e

) X2 e5 ?" U6 X  |

6 K; S5 Y! n: C. l. M蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解。, A$ x" D0 k$ x6 ], }. [; y

9 o3 N6 `- T7 g& E% w* J( a# J& H
6 T, b# K4 {$ W& E- h7 a
蒙特卡罗方法与一般计算方法有很大区别,一般计算方法对于解决多维或因素复杂的问题非常困难,而蒙特卡罗方法对于解决这方面的问题却比较简单。其特点如下:$ b8 ]5 s, n( I4 C$ s

! ]. m7 u0 X: C9 w
- U/ ^. m: }' ~5 E
a、直接追踪粒子,物理思路清晰,易于理解;
2 ^# F- g& C4 ?: ^' K$ R
/ L; j/ _! [0 m$ t
9 N! a+ G. q; ^& Q
b、采用随机抽样的方法,较真切的模拟粒子输运的过程,反映了统计涨落的规律;$ |5 J8 V& Q) A2 |7 E; s' c& q, [
+ e* \2 H5 B- L2 h7 U' Q
7 d3 d0 z2 o2 C! g6 S- `
c、不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法
( r- D2 Z* W6 X! o& J( y) E( D
% Q8 h# C" I1 ]2 |3 L7 X

/ i4 k* ^$ ^9 e等等# n" P, y# @9 H8 o7 A5 Q
1 V( p, S5 @/ Q2 g% K
- N5 [2 G# b0 f, c7 q* S. A5 T
02  数据拟合、参数估计、插值等数据处理算法
; Q9 f) [; N7 a  h2 u$ b我们通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用 Matlab 作为工具。' a0 t' g0 V* f+ b
  {, d% z/ u" ^; B6 ~- W
8 Z4 Z: x8 C* B3 m
数据拟合在数学建模比赛中中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是 98 年数学建模美国赛 A 题,生物组织切片的三维插值处理,94 年 A 题逢山开路,山体海拔高度的插值计算,还有吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。
8 ?) g% T& H/ d& J! \/ O$ W/ j. `4 O% C4 S0 {/ q* h7 x- W% H7 \: i

: C, a$ v# z+ q# d* X  ?/ C
$ K( L2 \( p4 x2 a  `$ x
: o3 O: T$ l' p& ~4 `4 ~1 Y9 q* @

: G* y5 {/ t3 n
2 s9 ], D% ]! Y, j- ?
此类问题在 MATLAB 中有很多现成的函数可以调用,熟悉 MATLAB,这些方法都能游刃有余的用好。7 x& A. M( K; _8 f

, \: k3 [3 |  X# H
) }$ ^: O: ?  C/ l
03 线性规划、整数规划、多元规划、二次规划等规划类问题
# y' M5 ^7 W/ |* j* b6 |% @数学建模竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件、几个函数表达式作为目标函数的问题。9 S9 U, T. E  G4 Z' f

: }6 ?+ U* X4 A, ~0 r! R/ W% h2 w  B

" X! d1 F* L, z4 s+ a遇到这类问题,求解就是关键了,比如 98 年 B 题,用很多不等式完全可以把问题刻画清楚,因此列举出规划后用 Lindo、Lingo 等软件来进行解决比较方便,所以还需要熟悉这两个软件。0 G: |, c* A( M# G
& ^; |+ t7 @7 @; X9 z2 m

8 q: e1 {5 W' M. x$ [ 04  图论算法& Y* w) p2 @9 Y7 H3 [. f
这类问题算法有很多,包括:Dijkstra、Floyd、Prim、Bellman-Ford,最大流,二分匹配等问题。, l& q+ o, n  R9 {) L

$ P* q* m& f- h$ d" K2 I

: e+ K; R& a' V- w关于此类图论算法,可参考 IntroductiontoAlgorithms--算法导论,关于图算法的第22章-第26章。
* i/ I( a* J* W( o  ]4 k/ l0 }% m& k8 r! r& N& K3 {7 d4 |
1 n+ D( ^, |, S

8 G/ j$ Z% c' e6 l' o: f3 Y" o

4 W( T+ N# z1 n$ P& `9 Q  C+ [) {0 J2 C4 P; N, \3 Y- Y
) q5 M. L  }4 I, q
05  动态规划、回溯搜索、分治算法、分支定界等计算机算法
0 F+ t7 V7 x" J& e+ u% y! a" G' @在数学建模竞赛中,如:92 年 B 题用分枝定界法,97年 B 题是典型的动态规划问题,此外 98 年 B 题体现了分治算法。
" H6 C$ D; Y( N. z- u( n8 T
9 T2 Y& h( s. m4 Z2 L, I

( R& K6 X  k% j; H" D
+ E- q3 |, f3 c/ m) P, T
6 A, T7 w9 L; N
0 i7 O9 T1 {4 R8 p
" G- s, _8 R( X  P  B
这方面问题和 ACM 程序设计竞赛中的问题类似,推荐看一下算法导论,与《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。
' k* }! D$ ]" X7 i: S' C% T5 T/ T7 l; [

9 J: z* S  n4 E& N 06  最优化理论的三大经典算法:模拟退火法、神经网络、遗传算法+ D: L1 x: I6 P
这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。
% [( t/ v& ?5 j/ S2 M# y& C# s) i  A

8 C. S! V+ U7 p3 c6 h% k在数学建模竞赛中:比如 97 年 A 题的模拟退火算法,00 年 B 题的神经网络分类算法,01 年 B 题这种难题也可以使用神经网络。
( z* [7 F" b2 D* g4 Q9 C
8 @+ S0 u9 k) l- J
: S& B' P' I% c, d) t
还有美国竞赛 89 年 A 题也和 BP 算法有关系,当时是 86 年刚提出 BP 算法,89 年就考了,说明赛题可能是当今前沿科技的抽象体现。# {3 V- K+ @. D9 K0 w, B- N
5 M& c' f5 C4 N; n
/ _. Y+ Y* E& {1 Q; C
03 年 B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。0 M. v; m) C! t
0 k! w1 _, B* N9 L; y! M. J! x
2 p; S" Y% g5 ?- J

" l/ j$ x! t8 i/ b

7 h' K- r# g" e% E
- X) h8 |9 U/ G' j/ M9 k8 d
& h  s9 J. E) Y2 }' |- A4 K, O
8 H# ?! \# V" l! q) ^8 d1 K" l! o
% g3 p+ Y7 M' {
4 t$ V; a% w! G- q/ y5 n+ ~
07  网格算法和穷举法) S; t6 {& G' ~# I( @" S" k
网格算法和穷举法一样,只是网格法是连续问题的穷举。  B' G' E) k1 n. W

% e1 p0 u: X' }) K3 {( u
, d) {, q; l5 F& D
比如要求在 N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,比如在 [a;b] 区间内取 M+1 个点,那么这样循环就需要进行 (M+1)N 次运算,所以计算量很大。
5 x: u( P# G/ r" n) n) M$ y* p: O" |. T) C, _

" m! V* Z1 u- L# c4 u在数学建模竞赛中:比如 97 年 A 题、99 年 B 题都可以用网格法搜索,这种方法最好在运算速度较快的计算机中进行,还有要用高级语言来做,最好不要用MATLAB 做网格,否则会算很久。; t5 K6 v) M0 S: ], J( ~5 G8 V, c( N

/ f6 i5 U6 ^" d9 ?
/ c- u3 Y3 j. w6 W2 h* |" }  W0 U
穷举法大家都熟悉,自不用多说了。
, ~! L7 o( y6 m1 I' |, X% \' o+ c3 r# y: E: A7 J% z
% }. M  L1 C. y7 A! S
08 一些连续离散化方法+ s1 V3 y& s/ `7 ~+ P7 i
大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界中,计算机只能处理离散的量,所以需要对连续量进行离散处理。. A7 U. o& t& X" w6 f, ?) o

. {1 R, ~; n2 Q* ^

- B. p- S- T: g! T这种方法应用很广,而且和上面的很多算法有关。事实上,网格算法、蒙特卡罗算法、模拟退火都用了这个思想。# [9 C! Q0 ~4 |* h7 }& b/ V  V, v/ s7 X
0 G0 H7 _$ Y: m! {1 F/ r: O

  J3 o8 `3 l3 } 09 数值分析算法
) d, A" a5 q& i数值分析(numericalanalysis),是数学的一个分支,主要研究连续数学(区别于离散数学)问题的算法。
5 [4 M# y- K/ m3 b0 |5 R
! j; s! f4 @; b% G3 ^0 z! K; c
2 o) z5 i0 A* k0 n
如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。4 I. O) A, |; }. [4 e: F& f* b

( Z$ ]$ Z3 o" a' h

; Z% \# r7 t5 `* Q/ ~" m这类算法是针对高级语言而专门设的,如果你用的是 MATLAB、Mathematica,大可不必准备,因为像数值分析中有很多函数一般的数学软件是具备的。2 @2 t% L+ t5 x5 b6 g, L

+ S# x+ P# W4 T' o! H9 W
, n( `4 v  E+ x7 v7 T# i
10  图象处理算法# r5 B6 q: g4 a( V! n  r6 c4 H
在数学建模竞赛中:比如 01 年 A 题中需要你会读 BMP 图象、美国赛 98 年 A 题需要你知道三维插值计算,03 年 B 题要求更高,不但需要编程计算还要进行处理,而数模论文中也有很多图片需要展示,因此图象处理就是关键。做好这类问题,重要的是把 MATLAB 学好,特别是图象处理的部分。; c) E# T& a* H

2 g# U: `" C+ N+ P9 J1 A$ O

$ a* s$ d% {% C% M* N9 e9 q+ z) {% i9 V8 a0 v
  O; |# ~# F7 e9 s4 E6 Z- L
————————————————
, l1 ?; \( T1 M! L; Y版权声明:本文为CSDN博主「文宇肃然」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
5 ^, C8 B. F7 R) m0 ~原文链接:https://blog.csdn.net/wenyusuran/article/details/114093268& J  ^6 t1 ?  F9 C$ S

% I. R8 h' q' c, d" u0 o- d* g5 {3 j% g6 ]" q





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5