QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2694|回复: 0
打印 上一主题 下一主题

还在为数学建模的事发愁?带你一起来看看数模竞赛中必备的经典算法

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2021-7-9 17:26 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    还在为数学建模的事发愁?带你一起来看看数模竞赛中必备的经典算法& H" A% s% V2 g" j# u/ H

    ' {- T6 X2 l2 |0 d9 q. F前言
    / @! I- W% z' s% F$ P! N5 c数学建模比赛是本科生和研究生阶段最重要的比赛之一,包括全国大学生数学建模竞赛(俗称“国赛”)和美国大学生数学建模竞赛(俗称“美赛”)。在这些比赛中取得好成绩,不仅有助于保研、有助于找工作,更重要的是形成科学的思维模式。以下是博主精心整理的两个matlab专栏,包含入门到精通及实战内容,需要的小伙伴可根据自己需求自行订阅。9 d6 z3 N3 S5 d7 D9 M) T2 h
    + V* R1 n& O3 I1 Z

    5 r& Q! E/ W: g# v: i* ~MATLAB-30天带你从入门到精通$ F& j3 J' i2 l9 C  A

    $ {" w7 {% j% ?9 Y- s3 R. o: I, k$ c
    + w0 W, i/ `" U6 i
    https://blog.csdn.net/wenyusuran/category_10614422.html
    7 j0 ^% t/ h/ V6 I# u
    : L, q. N$ T! f. f; I
    5 I% {# p3 B) S9 F: F
    MATLAB深入理解高级教程(附源码)4 j8 c" y! k6 E% u% W3 G" ^) Q' U. `" I

    & H; S( F" Y, r& R) x  f( U
      ^' Z7 ~: b' H5 j" o: l: H
    https://blog.csdn.net/wenyusuran/category_2239265.html
    # o( P+ B  L2 O2 F; d6 [/ T0 l: h) @. i- ]1 A% n; u6 c

    $ `, n. h( f9 y5 u* e在博主的资源中也有各种算法的应用实例源代码,需要的小伙伴自取哟。$ w& J/ j( i5 k

    , ~  C& j$ o# F) q
    - z  B+ v( f/ J- @6 }0 S9 T" J

    + {8 c% L! ]: z8 \- E: i& n! S  F2 I0 b/ H# _* @

    6 e6 z- @: q7 B/ \7 @: J% E! A/ p* o8 e  |$ G( |4 r0 R& r1 |
    3 ]) K1 d4 }2 |) q2 }5 H( U

    4 L4 }6 a4 i$ u0 D' P5 U# y; O

    1 X' t, g' u! T% |, D7 P& E4 N
      ^& t; f* W5 d9 c3 |, @
    ' S) w5 V; ]$ Z# ^: N4 a. f- Q
    ' z/ z1 O1 ~) x$ u# t5 F8 m
    01  蒙特卡罗算法
    ( r& B8 O) E  q1946 年,美国拉斯阿莫斯国家实验室的三位科学家 JohnvonNeumann, Stan Ulam和 Nick Metropolis 共同发明了蒙特卡罗方法。/ L8 g, H5 {# Q2 P& j# |) k' a3 u) K

    9 l" Z8 B5 x+ [  _- R8 {, c

    4 x' V; e' N$ b3 }9 A蒙特卡罗方法(Monte Carlo method),又称随机抽样或统计模拟方法,是一种以概率统计理论为指导的一类非常重要的数值计算方法。此方法使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。/ @6 |6 t" K4 A: ?/ G8 M$ C( C

    6 e# A4 y$ ]- G" C+ n7 M: |

    5 ?2 C+ i1 m! c* T: r由于传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。
    7 _: l  o2 I. {
    / B' W+ G2 g3 X# L6 R
    / }1 x, _8 \6 I( J+ K
    蒙特卡罗方法的基本原理及思想如下:7 J/ p/ I: H& V
    - {( o6 t, Z2 t! b2 _4 G
    ( g$ E. g: e; Y, @
    当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。
    3 L' }) B: S6 n5 m4 x! e0 h+ t3 I! r9 \% z% r4 m; F

    ) ?; ?- K1 |' d9 ?. [/ P举个栗子,直观了解蒙特卡洛方法:
    4 V* J5 |/ V+ r) g; o# t8 C! }2 V2 o8 U5 l

    . X, }4 C  z9 \假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如:积分)的复杂程度是成正比的。蒙特卡洛方法是怎么计算的呢?假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候,结果就越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。
    : P% [2 l* e$ I9 r8 E
    * e  j% @9 I" F' `
    : u* i& x6 y& q, K
    5 x' Q, b& _" K4 B

    . Z6 P; Q+ p( W; m$ L0 Z% `8 V
    ! \4 c, X6 {" X5 J
    / s$ q3 u3 r; e( k
    蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解。
    ; {: ^7 n7 C0 d& X
    " E0 H- [7 N. S5 v2 s; z8 C% W

    . V; o8 W% e8 m: _3 h/ p6 U8 T蒙特卡罗方法与一般计算方法有很大区别,一般计算方法对于解决多维或因素复杂的问题非常困难,而蒙特卡罗方法对于解决这方面的问题却比较简单。其特点如下:' w* L, t3 w# C1 N# K  Z- \
    ' L' e2 N' L' f* R

    " ]/ J( b/ v$ i" o" na、直接追踪粒子,物理思路清晰,易于理解;
    8 r+ o; A$ X' w; U6 F- X# G% g; d) z

    4 C  K/ Q% s/ pb、采用随机抽样的方法,较真切的模拟粒子输运的过程,反映了统计涨落的规律;. [5 U4 j) v0 [" W" _4 ?% ~

    * Y( \8 G& x5 [  g
    * o) Q; x% Z- j, m
    c、不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法* y: X4 y: O: u! f, a" f1 n
    - |. e+ V" [, Q, h( n
    % `" W! t  x4 z0 @
    等等
      t' i. @! k" ~8 [* a% w( ^0 F# ~
    8 I# s- u! Z2 ]9 L  ~6 D- @3 n) B
    # Y) B& X6 F& {: Y& D! H- X* v0 L7 v
    02  数据拟合、参数估计、插值等数据处理算法
    ( |9 D- ~+ z: k4 J8 g3 T; p我们通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用 Matlab 作为工具。$ z: ?, M) ?3 |& K% ]- |9 B; B; p

    / Z4 x. _1 D/ p+ u" q
    , F) o6 n( C, B/ P  l  J
    数据拟合在数学建模比赛中中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是 98 年数学建模美国赛 A 题,生物组织切片的三维插值处理,94 年 A 题逢山开路,山体海拔高度的插值计算,还有吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。
    4 f+ Z1 L. h- }( S" y/ k4 X; B: k* S, t  n$ k4 e
    ) d9 k& T+ w# S" t

    ! u& `7 q+ c1 w

    , J# z& W( {& Y4 i& [$ u8 H) f7 ]2 e$ R7 o
    / R" V2 O" J% b; o$ S. s9 k
    此类问题在 MATLAB 中有很多现成的函数可以调用,熟悉 MATLAB,这些方法都能游刃有余的用好。
    0 g; p  K( w% u) [1 a' U5 \, F8 [+ u6 _& a  n' v8 \

    ; H( q* V4 f5 h4 b 03 线性规划、整数规划、多元规划、二次规划等规划类问题8 Q+ k9 ?, }' h; C
    数学建模竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件、几个函数表达式作为目标函数的问题。
    3 R1 X9 p8 O- `6 y* u4 D  L4 Y, q# I" ]9 n* n8 v# o# X
    - O& Z1 Y2 A' k$ L1 ~4 n% e
    遇到这类问题,求解就是关键了,比如 98 年 B 题,用很多不等式完全可以把问题刻画清楚,因此列举出规划后用 Lindo、Lingo 等软件来进行解决比较方便,所以还需要熟悉这两个软件。6 A; i" t9 p& V3 M# N

    6 C2 D2 p* X2 R2 I, i2 S0 q
    : q3 {# f2 Z8 r- Y! ^6 ?1 @
    04  图论算法
    5 {+ L1 K- Y& I+ X这类问题算法有很多,包括:Dijkstra、Floyd、Prim、Bellman-Ford,最大流,二分匹配等问题。
    / j; J/ W1 L" w8 Y; T' F2 X
    , v  \1 y. w5 q" ]# h1 f* Y; Z& k

    . ?: p+ D) F$ J  D, O* l关于此类图论算法,可参考 IntroductiontoAlgorithms--算法导论,关于图算法的第22章-第26章。2 E* D5 M7 w: e; w6 `7 l! I

    % I& b& h# K4 Z3 ]! p3 u" N1 A- [% z

    ! D" o/ u1 `) I# B3 U  l/ D. W1 D& W5 ~! l, R- X
    4 Y- R  W0 F1 X6 j

    1 l3 y; a1 }0 S2 Y

    $ o+ g  U4 R" I2 v 05  动态规划、回溯搜索、分治算法、分支定界等计算机算法
    * Z- `- f5 O- S5 I在数学建模竞赛中,如:92 年 B 题用分枝定界法,97年 B 题是典型的动态规划问题,此外 98 年 B 题体现了分治算法。
    8 N+ m+ z9 @5 A9 Q* R
    8 E$ @: h  o- ~

    $ h/ b+ X- O& L, b
      ^; c' R! ~/ S+ B8 `6 f& B

    , A# B, t& G/ _! w5 [- q3 w3 R, h, `; j

    & u" ]1 K7 B* c( W* ?/ S0 M8 L这方面问题和 ACM 程序设计竞赛中的问题类似,推荐看一下算法导论,与《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。
    ) E; _4 K+ d6 Z, Q5 I4 u
    ) b& E9 r8 W1 F

    & a/ O. b1 {7 U5 W- \ 06  最优化理论的三大经典算法:模拟退火法、神经网络、遗传算法, `+ h" @& h& ?' D
    这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。
    1 Y/ X( w( u& r4 N
    $ i% L. H' Q' `
    + E% L3 d1 X+ W' B. ~. C! {: z
    在数学建模竞赛中:比如 97 年 A 题的模拟退火算法,00 年 B 题的神经网络分类算法,01 年 B 题这种难题也可以使用神经网络。( H  F4 |2 X4 J% u

    " _# W$ y9 H# d* b. K
    ' }8 X7 o- }& E7 @
    还有美国竞赛 89 年 A 题也和 BP 算法有关系,当时是 86 年刚提出 BP 算法,89 年就考了,说明赛题可能是当今前沿科技的抽象体现。
    ! [5 E' n; ]0 T4 k% }% q0 w0 O
    ! q$ k" t' u$ L9 y
    4 ?4 m' P8 w2 h8 x2 m' t- ?
    03 年 B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。# t0 X6 f0 ?' ^6 Q, L
    , J; Z7 d: E8 A

    # z; z$ W) A. u6 S# p2 }6 g+ l! \) i( F' J; ?( q

    8 r: U( e9 @/ j" N
    3 j$ Y$ R. ^" z: Q# N3 L

    - G- ?; }5 Z5 U& t1 X: V# ^/ Q + M/ _& i; H- t3 z5 _4 D- D" k" F: `
    6 G' {" c# b3 F+ i2 [( o

    5 a/ C& A  `# E7 D  }" Q# Z 07  网格算法和穷举法
    7 X5 h* L) t6 [1 s$ E- @, S网格算法和穷举法一样,只是网格法是连续问题的穷举。: N: m% ~6 [7 J8 ]( a' K* y, m
    ) W+ x4 S- t+ x" H# \* k6 C
    9 E. E3 r- A( t& g' O. Q4 ^
    比如要求在 N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,比如在 [a;b] 区间内取 M+1 个点,那么这样循环就需要进行 (M+1)N 次运算,所以计算量很大。
    ! r* U2 |8 Z4 S2 y
    - b- r* H; k  V( I$ H- @$ r0 g

    # n+ I8 d- S+ K8 e在数学建模竞赛中:比如 97 年 A 题、99 年 B 题都可以用网格法搜索,这种方法最好在运算速度较快的计算机中进行,还有要用高级语言来做,最好不要用MATLAB 做网格,否则会算很久。
    ' A. M% `- }; Q2 P) g  ~) q  n) C% p8 S5 c
    ' m  n. b+ R$ u, I' i  M
    穷举法大家都熟悉,自不用多说了。) c: h1 u  A; S5 `6 }2 m5 I% y

    % m- l; f, {" b8 f6 [. n

    ' _4 b3 l9 j, s' m! J 08 一些连续离散化方法+ J5 e9 h% ]6 T% r' R) A
    大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界中,计算机只能处理离散的量,所以需要对连续量进行离散处理。  f! y4 r6 `* i
    4 |9 ]4 C% w3 u7 f! d- z

    # r( |/ @; T7 G- N, J5 o$ C; n* ~这种方法应用很广,而且和上面的很多算法有关。事实上,网格算法、蒙特卡罗算法、模拟退火都用了这个思想。2 Y! u* N( p- p8 q

    ( V+ V+ u: Y& @, T+ Z
    ) Z2 \( k/ o9 T/ c1 T
    09 数值分析算法: Y" ^5 P2 I# P- o) D- p% b& g
    数值分析(numericalanalysis),是数学的一个分支,主要研究连续数学(区别于离散数学)问题的算法。3 a% p7 V& r3 t) T5 Q% w( o3 J5 }9 L
    : \1 D+ l4 h/ H. J8 H. A/ ^/ m

    9 j1 F3 \$ J, @& R4 s# s7 z如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。- s7 P$ Q0 e) H& }, i: w% c( J# }
      S8 {% q; ?- _) r4 ^
    8 l8 M$ e7 F0 o7 W& j/ |' o
    这类算法是针对高级语言而专门设的,如果你用的是 MATLAB、Mathematica,大可不必准备,因为像数值分析中有很多函数一般的数学软件是具备的。2 Z' p/ l+ W5 J" ~
    + H, V( P( R$ T8 k. d
    ) i6 E3 E8 v1 [- o; u! B, i
    10  图象处理算法
    2 H6 c: r. N0 ?2 N+ w- E* x, Z在数学建模竞赛中:比如 01 年 A 题中需要你会读 BMP 图象、美国赛 98 年 A 题需要你知道三维插值计算,03 年 B 题要求更高,不但需要编程计算还要进行处理,而数模论文中也有很多图片需要展示,因此图象处理就是关键。做好这类问题,重要的是把 MATLAB 学好,特别是图象处理的部分。1 a% @4 ]2 y3 w& x
    7 H# O$ B$ @( L( o, J$ O  F. K
    ( P9 h. b+ ]: a( ]  d

    / V* ?6 R  j/ H0 J
    % c! j/ [' s. Q
    ————————————————
    6 ?* X* Z% P' R1 T5 @1 |版权声明:本文为CSDN博主「文宇肃然」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    . S* ^+ Z0 N! Y原文链接:https://blog.csdn.net/wenyusuran/article/details/114093268
    ( }! N8 ^1 }' f9 x! M* P: \4 G% t$ V4 V
    + Q- Q  }9 }# a* Z( d, e
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-9-24 16:49 , Processed in 0.939300 second(s), 51 queries .

    回顶部