QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2412|回复: 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
    还在为数学建模的事发愁?带你一起来看看数模竞赛中必备的经典算法5 n/ G5 R9 @: g9 H& t8 q
    4 H3 N! Y% D2 y5 ?. n/ W
    前言1 i+ X* l5 s$ s- Q, r
    数学建模比赛是本科生和研究生阶段最重要的比赛之一,包括全国大学生数学建模竞赛(俗称“国赛”)和美国大学生数学建模竞赛(俗称“美赛”)。在这些比赛中取得好成绩,不仅有助于保研、有助于找工作,更重要的是形成科学的思维模式。以下是博主精心整理的两个matlab专栏,包含入门到精通及实战内容,需要的小伙伴可根据自己需求自行订阅。3 k/ A  |4 d. Y' N1 E
    , Z/ V% U* O, Q, l

    # Q% Q) c) Q9 cMATLAB-30天带你从入门到精通
    3 g- G! H7 b( N1 w* e, k  j( L" T. v7 ]; Z8 l, d4 x! H
    8 q' Y6 {+ o9 R9 }$ P
    https://blog.csdn.net/wenyusuran/category_10614422.html
    ! o6 f! j! x0 w0 [: Y6 B$ z
    8 Q/ k+ G% _* u$ G
      u% u, C, W" D8 {2 p
    MATLAB深入理解高级教程(附源码)
    8 w; b  Q+ t0 C" T- a, K, }' i5 x& X, s( Z, T$ S3 I+ x

    & w0 F% N- C: ^) ?: x5 L. e& w9 _https://blog.csdn.net/wenyusuran/category_2239265.html
    % s9 H4 E& T/ [& r& k. K* y0 F% K5 l9 l

    , Q- u- A# M8 F+ Y2 v在博主的资源中也有各种算法的应用实例源代码,需要的小伙伴自取哟。
    " C" R' u5 _& B7 m0 p9 v4 L" Q* s* j  e) p) U& ~8 A! j
    7 m; k$ X4 e& i2 [: l- E( D- s

    0 U9 g& P5 V2 C  f( j1 B# \2 _2 G9 ~4 q

    9 A2 d4 y& t  g2 n* W9 ^! T
    8 ]" u  X# \" m* p3 M0 }% T7 U

    / \7 a3 M+ A2 b
    # I( S' X3 ?  z0 a( s. i% H
    + o$ R' S( t8 a* k7 E0 {% R
    - G+ l" b" x) \3 Y1 z2 ]( h- L

    # W8 ?; M5 X) Q* A) y' t" Z
    * K5 l; {  r# z! {
    01  蒙特卡罗算法0 |' s" Z4 a# B0 P8 z6 X
    1946 年,美国拉斯阿莫斯国家实验室的三位科学家 JohnvonNeumann, Stan Ulam和 Nick Metropolis 共同发明了蒙特卡罗方法。4 P/ E: P1 w8 L# O0 ]5 V; x

    ) d% X+ Y8 m. u- @7 Z
    9 F% a4 J. j, V& O' w5 e
    蒙特卡罗方法(Monte Carlo method),又称随机抽样或统计模拟方法,是一种以概率统计理论为指导的一类非常重要的数值计算方法。此方法使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。
    2 ~& Q  h% e& ]( _( ]3 I
    ( Q1 N7 O# S5 Z# K& {* V8 |
    & J! ]$ D4 ?8 K( {9 v
    由于传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。! g$ u6 l$ B5 x9 a
    ( q0 @" i9 x$ K7 D  |! G1 t9 R3 Y
    ) G/ {- X& }: d" S8 H# V: k( k
    蒙特卡罗方法的基本原理及思想如下:
    * {4 S* a! v5 T0 g5 f3 ?, ^; X. n. O: m- a

    / x1 N; p4 Z, I  G# a8 j当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。
    * y8 }! ^; H- R' M7 }" |  L, \, V1 v! A8 R* T
    5 h6 l: F& K6 x: G0 R" _. T
    举个栗子,直观了解蒙特卡洛方法:' S; M0 c) ^0 S! u1 X2 Y  a

    ; I6 t% f4 U  O1 g+ T

    0 @! Q* C- }. `$ k假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如:积分)的复杂程度是成正比的。蒙特卡洛方法是怎么计算的呢?假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候,结果就越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。4 D8 e  h9 A1 n- K" z2 m6 q* Q
      J, O/ y4 i' a
    ( N3 g% ]) d7 M" M. C4 ~
    ! C+ d$ w& A; p$ J2 x; `4 F, [5 O

    9 Q, g& b8 {$ n$ J. G
    % J) p" x3 n$ N

    & o) L3 B) ?; S6 r6 @/ x( u蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解。$ a9 h1 W# Y2 ^% U* x+ ^
    # v5 G" N8 `4 s
    ; j) n/ \! P4 T; ?: \
    蒙特卡罗方法与一般计算方法有很大区别,一般计算方法对于解决多维或因素复杂的问题非常困难,而蒙特卡罗方法对于解决这方面的问题却比较简单。其特点如下:
    $ A& ]( [) [0 u1 O5 j1 w
    ; v& V3 }8 i" D) p4 A

    2 G8 R! M* U4 S+ E, w8 C6 }a、直接追踪粒子,物理思路清晰,易于理解;9 z. ], F' @( z  n) _/ {0 D
    * x- b2 F. C" _
    # m7 o4 {: a4 s* x
    b、采用随机抽样的方法,较真切的模拟粒子输运的过程,反映了统计涨落的规律;
    * F( Y- l  F, f# _9 F
    ; P8 E* G5 B2 ~! y, D
    9 |: ^) ]! _/ A; b' Z; j
    c、不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法, x0 s9 J9 K7 D0 p8 q% K% t
    2 [% i' E; c2 k/ R! g

    3 g( f1 {! c- Q4 P) h等等0 Q$ A0 s. C5 H* ^  m1 C
    $ e! m' X$ l, s6 J0 `

      \3 u* Z0 G6 _$ ^5 Q; |3 X 02  数据拟合、参数估计、插值等数据处理算法4 O9 B$ u5 @+ Y+ ~$ p
    我们通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用 Matlab 作为工具。
    " j5 k7 I9 f! b$ C. n6 J7 O' l' V+ ~: J
    1 b) l- F/ s& i7 \/ a# p. Q1 U
    数据拟合在数学建模比赛中中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是 98 年数学建模美国赛 A 题,生物组织切片的三维插值处理,94 年 A 题逢山开路,山体海拔高度的插值计算,还有吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。
    % F, K+ W6 p4 K, U
    . d1 L7 k! e1 K2 P
    / g, n" r8 i' j3 `! u1 F

    " _  W/ B/ C6 f2 o' U

    ) C3 F: m% E; m; y3 q, _% Y. P' i6 G% M2 x

    + u5 |6 V1 s+ o  w1 z) j此类问题在 MATLAB 中有很多现成的函数可以调用,熟悉 MATLAB,这些方法都能游刃有余的用好。
    + R- P- m6 I7 M6 `4 N5 e. Q! ?# r; E0 n/ ^" ^, ~
    ' J; y- j) D1 `/ g9 H, k% J$ ^
    03 线性规划、整数规划、多元规划、二次规划等规划类问题
    9 b  h7 P0 P& m. @3 r+ _数学建模竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件、几个函数表达式作为目标函数的问题。
    3 K3 R- g% H% n$ K4 @# R% a* P8 N3 G% Y% m  x% H6 z7 L; x

    % Y# O; B  I" `7 M+ B遇到这类问题,求解就是关键了,比如 98 年 B 题,用很多不等式完全可以把问题刻画清楚,因此列举出规划后用 Lindo、Lingo 等软件来进行解决比较方便,所以还需要熟悉这两个软件。5 ]0 \! `" r( z! q6 G" `" _
    & X! Z- ~) F5 m; e* |6 g) m' ^

    . ^9 {5 [! \* b- G 04  图论算法4 [1 p: c$ p& N" I" s. O2 _, w& k0 T
    这类问题算法有很多,包括:Dijkstra、Floyd、Prim、Bellman-Ford,最大流,二分匹配等问题。; E) i+ b7 W- f  P
    6 ?+ I& t+ I) [8 Q. M- i
    3 A, B6 ?" E: t0 N. a5 ]. C! ?
    关于此类图论算法,可参考 IntroductiontoAlgorithms--算法导论,关于图算法的第22章-第26章。
    # L/ i, {! K, a6 ~1 d1 H
    0 X0 U  a$ o% {- ~7 b
    - U6 y0 @: l4 M! D

    + U1 n" i: P* S. g

    + Q) h% J: Q. I6 [: M# V- |
    7 f3 K/ n8 H+ A* l! P3 o6 A8 c1 K& v
    4 G5 D! R3 W! d$ {( q3 A& |
    05  动态规划、回溯搜索、分治算法、分支定界等计算机算法9 S0 c" e) G% K, g* k5 L! U; v
    在数学建模竞赛中,如:92 年 B 题用分枝定界法,97年 B 题是典型的动态规划问题,此外 98 年 B 题体现了分治算法。
    1 q- T5 ?. M  m7 s6 o" J' ?1 p
    ! o, x/ v2 t4 R# g. V  f
    : |0 K" s1 G0 w3 Y7 E# f. x

    4 B' g3 m2 b1 d1 U
    5 k6 l2 ?" V' T
    0 S9 h7 Q, A0 Y+ j1 ?- _
    % g  D3 k7 `9 u% X; n' x) ]( Z
    这方面问题和 ACM 程序设计竞赛中的问题类似,推荐看一下算法导论,与《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。$ d3 i) H; r8 Y% ^, w
      r* \7 O( k* N# M8 w. e

    ! B0 m2 e! R1 j* k3 z1 K 06  最优化理论的三大经典算法:模拟退火法、神经网络、遗传算法
    1 ]- z$ q7 r! {/ |" N0 L; m6 C: r% `这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。
    ; g& C+ w' V, f+ w$ f& F) `
    . N  e  D3 y+ M- p$ C: l
    " I" h- m6 v+ M: {; Q0 @4 G% [- P
    在数学建模竞赛中:比如 97 年 A 题的模拟退火算法,00 年 B 题的神经网络分类算法,01 年 B 题这种难题也可以使用神经网络。6 O# ^! ^' f7 M7 f+ H4 W
    ! N. r& \/ H( H

    5 N& K" c2 d4 B5 h还有美国竞赛 89 年 A 题也和 BP 算法有关系,当时是 86 年刚提出 BP 算法,89 年就考了,说明赛题可能是当今前沿科技的抽象体现。' O& L7 g, \& r! m2 T% N' m" S

    $ {% d% I0 }% P9 ?% r! B7 d9 w

    % g  v! ?" x' }  j03 年 B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。' A( P4 b& j* K
    $ ]' W% _# {2 B& l5 Q+ n

      `+ j% s9 K+ T( E1 ]: |, O, x( S6 ^" u4 }

    , A1 W+ A0 g! I% s8 e& T- C! g6 r
    0 Q  W4 U/ e$ R+ t; u- B7 d

    ; w8 y- k( }/ k9 c3 M
    ! @* i0 m1 W/ M- O$ Z6 i& I( R5 Q
    1 `, q3 u9 r. t. |6 A
    07  网格算法和穷举法
    9 Z# N5 L) y4 ]! c$ N; g! [8 Y, e% X网格算法和穷举法一样,只是网格法是连续问题的穷举。
    1 O3 \; t1 J( e! d' y; h2 P! X$ l( \5 |8 `/ v% _, z' I9 z" V
    3 ]6 Y- t0 m* ]0 h& K0 C
    比如要求在 N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,比如在 [a;b] 区间内取 M+1 个点,那么这样循环就需要进行 (M+1)N 次运算,所以计算量很大。6 K3 m- x8 ?# I/ E% k1 \2 ~) a7 G  K

    ( G! w/ @! d( G3 ]

    * C4 M# k7 `5 E2 @1 W- `在数学建模竞赛中:比如 97 年 A 题、99 年 B 题都可以用网格法搜索,这种方法最好在运算速度较快的计算机中进行,还有要用高级语言来做,最好不要用MATLAB 做网格,否则会算很久。: N) b5 {; Z" a+ F& Y% n

    + ~5 l6 P* y8 q% @2 y& v8 ~4 X' A
    . m* B4 h& r4 d" P+ A6 G+ L6 Z
    穷举法大家都熟悉,自不用多说了。
    % G/ ]9 K% T* J/ U' n) j7 X, ?- H% s, y1 f2 U9 m3 k

    # ?' A- B/ r7 g. `- X3 ?) L 08 一些连续离散化方法
    / M, g/ Q$ c5 u" w" W  c大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界中,计算机只能处理离散的量,所以需要对连续量进行离散处理。
    7 m7 q9 @: v' I, {" i; e* S" `6 Z5 `5 |. m/ `( Z1 O: d) P
    $ u7 x7 a2 `$ C2 ]
    这种方法应用很广,而且和上面的很多算法有关。事实上,网格算法、蒙特卡罗算法、模拟退火都用了这个思想。
    0 X( Z0 T- a) c8 _8 F' _' _9 V* o: u' y1 y
    & P6 |; R  Q8 [( U9 |
    09 数值分析算法
    9 M7 y3 }, n+ R! b! @4 C数值分析(numericalanalysis),是数学的一个分支,主要研究连续数学(区别于离散数学)问题的算法。; m4 |3 ~- A/ n& k/ a
    9 M- Y+ t: J: G) I+ ?/ j. y, ^
    . }! Z1 H2 m/ N% t! ?
    如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。
    $ A# L) k- c' o$ G* I4 |4 ^2 b
    4 c6 T) B! U, x9 @

    / i  g' v) {( f( W) c这类算法是针对高级语言而专门设的,如果你用的是 MATLAB、Mathematica,大可不必准备,因为像数值分析中有很多函数一般的数学软件是具备的。  X: D  Z& S" ^4 |- C8 X& ~  u' d
    1 V5 [, K: v( w* n4 P4 t
    + I& c' i. s8 \# D5 B, j/ j% x
    10  图象处理算法! L; J# j( O1 I) H' ^2 ^
    在数学建模竞赛中:比如 01 年 A 题中需要你会读 BMP 图象、美国赛 98 年 A 题需要你知道三维插值计算,03 年 B 题要求更高,不但需要编程计算还要进行处理,而数模论文中也有很多图片需要展示,因此图象处理就是关键。做好这类问题,重要的是把 MATLAB 学好,特别是图象处理的部分。
    " n0 [" g, S+ e! Y4 F) A* P7 g( C5 ^

    7 @4 J/ s+ |1 s+ a- p: g% t
    * t; r0 H: D; x/ Y" U  }- `" j

    6 b$ E7 x; r! c2 h————————————————/ E" ]: L& r# A5 O$ N
    版权声明:本文为CSDN博主「文宇肃然」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    " h) |4 ^8 N; z原文链接:https://blog.csdn.net/wenyusuran/article/details/114093268
    , p9 [3 D2 g( e) I* Y
    , K! ^3 z3 m( p+ w/ F4 g
    / b+ L; |  T- V5 q$ Z, B4 D0 X
    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, 2025-9-17 03:28 , Processed in 0.522380 second(s), 50 queries .

    回顶部