QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2661|回复: 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
    还在为数学建模的事发愁?带你一起来看看数模竞赛中必备的经典算法/ I- p% J7 [7 F6 u4 ~, R; O# \

    ( q2 B$ _0 V" `! T# B, n前言1 k0 h8 G' `# z4 P' x; J! D; X
    数学建模比赛是本科生和研究生阶段最重要的比赛之一,包括全国大学生数学建模竞赛(俗称“国赛”)和美国大学生数学建模竞赛(俗称“美赛”)。在这些比赛中取得好成绩,不仅有助于保研、有助于找工作,更重要的是形成科学的思维模式。以下是博主精心整理的两个matlab专栏,包含入门到精通及实战内容,需要的小伙伴可根据自己需求自行订阅。
      G; s7 a0 h  B+ T7 P* V/ S% D: H# A& w& i. |8 E0 M, i4 F
    - ^( X/ @5 }3 C' j& \6 B- Q: h3 B
    MATLAB-30天带你从入门到精通
    # d" L5 R3 b; ~- F/ I" O' _8 h" @( u5 n. G  Y% M' y
    6 L0 X+ i, S, b5 p- o3 P5 N
    https://blog.csdn.net/wenyusuran/category_10614422.html
    5 c4 ~+ N. ]7 k: ^7 ]; n2 z1 j
    - V# J8 t7 l  K2 H

    * L, a. P! a7 z" T/ h, B: {MATLAB深入理解高级教程(附源码)  x. Z* U! ?+ {4 g" u" t% ?
    ! f5 z4 F; A- W& l) z+ v
    ; x; j9 q& O; t: G- {) W. p
    https://blog.csdn.net/wenyusuran/category_2239265.html
    # L' Q6 b4 G: M! V0 t' L
    , _( N: V4 I! {' e+ B! N

    4 y& b. C! y' f2 C/ W! i在博主的资源中也有各种算法的应用实例源代码,需要的小伙伴自取哟。2 x& A2 N( B3 o# P, N. f

    & E' w* g6 x2 v% o9 [8 ?7 E$ ], r

    3 h' B3 E0 t6 @5 w
    - |0 {) m' R! P9 E& d4 o' [' h1 _1 [4 P. \

    # _0 i7 ^, \7 K% b0 c8 E/ v. E, {8 G3 B* |, |
    ' l$ c; l8 T9 C7 L

    + V6 |  z2 K) k0 Q7 Y8 T8 g/ N

    0 y. @9 U1 f+ d3 o" r% C 5 w9 ~  V& m2 L' @" }9 d

    ; W- L' g8 C$ e0 _- W% I0 T
    7 J* Z% ^0 e) n# u
    01  蒙特卡罗算法1 U4 ]& x7 u. x" X
    1946 年,美国拉斯阿莫斯国家实验室的三位科学家 JohnvonNeumann, Stan Ulam和 Nick Metropolis 共同发明了蒙特卡罗方法。: r& F' _( p2 n( X; \5 T

    $ _1 ?! X7 C" H- D$ R3 N1 U# M0 c. P

    6 d6 D- h6 c# r7 W+ m蒙特卡罗方法(Monte Carlo method),又称随机抽样或统计模拟方法,是一种以概率统计理论为指导的一类非常重要的数值计算方法。此方法使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。
    3 ]. W) K1 ~# \; x0 Q
    & E# |" e% z) Q1 K
    , A5 R4 \5 t9 t, f7 d
    由于传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。% ~' W7 R' ~/ @, p! ]( I
    . B1 e! P- J: G+ W# o3 ?5 Z

    5 c* h- T7 {5 [' m& m/ J' Z蒙特卡罗方法的基本原理及思想如下:
    4 Q3 R( e6 e2 y* O$ X% ]
    7 Q' ~* ]3 j. L* c

    , W$ v/ o! D4 Z/ D+ \当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。, ]9 [- e7 ?% H/ L7 `/ ~  k

    7 q) V) _; J# d, M
    1 }% m9 \* f! {5 [+ K
    举个栗子,直观了解蒙特卡洛方法:
    3 w& K& X% F, K3 S- C7 g4 F6 J- i+ s( E& k0 K* T* T0 Q. s2 {% a

    , h5 k$ [6 m- |$ D假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如:积分)的复杂程度是成正比的。蒙特卡洛方法是怎么计算的呢?假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候,结果就越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。
    7 P. f; C! ^, l% |9 h
    ) u9 k0 G0 C9 t7 v) d- d% ]

    8 e$ f3 [( {' M% p) k
    3 W5 M6 y/ ?/ \: M" i- J! T. I

    1 \$ n" S) ~. R! E7 |& D7 q1 F! |
    1 @, P) W1 e' r3 Z9 I
    蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解。
    7 N% Q7 w3 a/ w6 T; K
    . @8 h& e9 ~& c" h
    ; U) I6 v' g$ E
    蒙特卡罗方法与一般计算方法有很大区别,一般计算方法对于解决多维或因素复杂的问题非常困难,而蒙特卡罗方法对于解决这方面的问题却比较简单。其特点如下:
    ! K7 w# G8 m2 M, @: h* Y. g8 y6 Y" g& ?! f% q! `- @7 j3 S$ X

    5 K- O/ Q; u) N, U. D; Ca、直接追踪粒子,物理思路清晰,易于理解;
    % |$ {8 z+ [* l2 T3 Y( \& }9 c' B; i  G% [  _5 C6 @0 O

    + j4 e0 S; \3 Y" O+ j2 i9 d" Hb、采用随机抽样的方法,较真切的模拟粒子输运的过程,反映了统计涨落的规律;/ u1 Q( P6 U+ f. b- y3 p
    0 E( d% o6 t- E0 d1 X2 V6 u4 V2 m
    ( W  X- O! @7 v( B0 E/ Y
    c、不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法4 h) h+ q/ E  X; c7 Z' T5 z- j0 b
    * c3 }$ d1 E& m$ d; p4 W2 n' Y* r2 c, K

    3 B* U; R9 q) [% d" b+ W等等, q0 V. F6 J. e3 z* @

    # w0 L% f9 u' n* p$ R
    # m- S; h3 ~  [& I6 M1 a" k* B- U
    02  数据拟合、参数估计、插值等数据处理算法4 j0 ?+ R, U7 M
    我们通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用 Matlab 作为工具。
    0 U' C1 y2 g4 G, C) M' Q. T/ X: y) a5 a: h
    ) F" ?0 W. [8 a2 k. {  U  ~
    数据拟合在数学建模比赛中中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是 98 年数学建模美国赛 A 题,生物组织切片的三维插值处理,94 年 A 题逢山开路,山体海拔高度的插值计算,还有吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。
    ' n8 y+ U* q: K9 C  B1 R, w% ~1 {
    9 _4 n* B% e5 w" Y9 |; P( \
    5 H" i0 y/ J$ }! L# }! C1 _
    ' v  ^* i- U1 I

    , }" J) f- h# T) v2 ~: \6 y8 G7 {8 g2 x0 l* t; a

    ! j8 `5 q8 P' ^9 t1 ~此类问题在 MATLAB 中有很多现成的函数可以调用,熟悉 MATLAB,这些方法都能游刃有余的用好。
    . v1 B2 I6 F( B2 W$ Y% Q7 O  l. a, Y
    ) x% h% j2 Y1 C1 G  T  \
    03 线性规划、整数规划、多元规划、二次规划等规划类问题4 S7 N6 d- ~8 x+ q
    数学建模竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件、几个函数表达式作为目标函数的问题。
    ) x! h1 h- N0 W# q  p
    - g" o7 k. }8 x7 n

    0 L4 W9 o/ P- A遇到这类问题,求解就是关键了,比如 98 年 B 题,用很多不等式完全可以把问题刻画清楚,因此列举出规划后用 Lindo、Lingo 等软件来进行解决比较方便,所以还需要熟悉这两个软件。* }$ L; u+ ~( [% P

    ) q+ T% i5 _6 ?% w1 G
    - c5 |: M3 p) p; j# p$ K7 p
    04  图论算法  K9 U( B& z! k* C
    这类问题算法有很多,包括:Dijkstra、Floyd、Prim、Bellman-Ford,最大流,二分匹配等问题。
    $ ?6 x! Q5 T5 I0 ^& s) n% Y% u+ x# T* \8 o8 s

    7 y- p. g* o( H1 i( G关于此类图论算法,可参考 IntroductiontoAlgorithms--算法导论,关于图算法的第22章-第26章。
    6 D6 a0 o8 G7 S( H, J3 ^
    8 Y% K- V# f2 [" s' m+ }) Z

    ( |; |2 U. O! c: `6 B# h# I2 R, X- B- [5 M1 {# {$ K0 Y; c& a% y8 ~
    2 J4 Z* v$ _# J5 \
    % P" [- y0 j3 K" q2 q9 G

    2 P% y8 k( K" M6 t) @7 U4 `# [ 05  动态规划、回溯搜索、分治算法、分支定界等计算机算法
    ; t4 D; t! \( v6 q: v在数学建模竞赛中,如:92 年 B 题用分枝定界法,97年 B 题是典型的动态规划问题,此外 98 年 B 题体现了分治算法。
    6 R3 |% G+ o6 Z+ l0 Q) S
    2 G' ]& G) U% ]% u- b  Y

    + w% d' N- O3 u$ `! r3 G8 }1 _
    : g/ m& ^% R* @; q3 F9 a4 J0 ]3 n
    - M9 l, |/ l. G3 I1 s( {

    $ G: B& E1 _, \. K& m
    . e# T9 i) A4 T1 B9 d9 l
    这方面问题和 ACM 程序设计竞赛中的问题类似,推荐看一下算法导论,与《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。
    ! C9 X1 h$ E7 Q! k) E9 G, o& S. L, L7 S
    , f; U2 |4 }. j, w7 Q* W" R
    9 ], ?9 _2 C6 `3 Q1 ^* Q" ^# b
    06  最优化理论的三大经典算法:模拟退火法、神经网络、遗传算法
    ! p) D6 ?- x) `- p7 }, n这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。
    : Y" \5 t( P' t) z4 x7 f
    4 V6 e' o& U( s. O1 a5 H, I! r

    3 ~  X7 }( J! o! }8 v6 r! \在数学建模竞赛中:比如 97 年 A 题的模拟退火算法,00 年 B 题的神经网络分类算法,01 年 B 题这种难题也可以使用神经网络。9 S. I" H( X0 n8 p- e
    7 X3 s( l: ]  K- W# T4 s

    / J7 {( X" S1 g; ^% Z& y9 x0 K还有美国竞赛 89 年 A 题也和 BP 算法有关系,当时是 86 年刚提出 BP 算法,89 年就考了,说明赛题可能是当今前沿科技的抽象体现。0 G1 C! h: v( ^- O- _3 }

    ) d3 Q) \; S9 o3 F9 p) ?
    1 ?. d2 C  t: u5 B( Y  s2 d
    03 年 B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。
    % A5 |1 o1 J1 [/ v/ E4 E
    , ]  i/ J; n, H2 t! R" Y3 o
    ; ]' c0 T' g6 E9 z" g: Z

    ) I6 N' R0 F" d) X- J6 ?

    ) [/ k( x9 U$ @! G* I7 _4 D, G$ j' D6 I, W7 W' w8 C

    + N; y4 ?" b) i+ ] " o2 ^8 x3 Q2 x* p

    - g" Q! }; |  C2 j4 x1 v( t3 ^
    8 l+ g( Z! M5 }; H
    07  网格算法和穷举法
    % F! y* L( c* ]+ \& d' o网格算法和穷举法一样,只是网格法是连续问题的穷举。
    5 z) d& v* R2 C3 E: {$ a% G' z* @2 p, u; p& C
    ; b4 D% w7 b, V5 M3 E2 `
    比如要求在 N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,比如在 [a;b] 区间内取 M+1 个点,那么这样循环就需要进行 (M+1)N 次运算,所以计算量很大。1 T: B3 E( u0 S3 Q

    - {' L" x" P/ G3 t5 L

    " q' z! O; c3 n% Y! g3 L( [6 a在数学建模竞赛中:比如 97 年 A 题、99 年 B 题都可以用网格法搜索,这种方法最好在运算速度较快的计算机中进行,还有要用高级语言来做,最好不要用MATLAB 做网格,否则会算很久。0 k2 ]% F8 u1 o2 e1 y& U
      I, v& _/ V5 f
    ) B2 G+ I; b. G" z. Y. h
    穷举法大家都熟悉,自不用多说了。- N& O- O$ X" K

    ! F! t7 h  [; m/ c) r, e9 f

    $ m9 S8 K, E8 N 08 一些连续离散化方法
    8 q4 K0 o8 z# @大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界中,计算机只能处理离散的量,所以需要对连续量进行离散处理。/ B1 \4 J8 d7 I# l
    5 i) H& w- Z7 a
    0 T7 w/ }" _1 a! G) f4 i# e
    这种方法应用很广,而且和上面的很多算法有关。事实上,网格算法、蒙特卡罗算法、模拟退火都用了这个思想。
    9 H3 u- K2 b6 C- H" c+ _+ R' t+ ~  d- J; I- _1 {
    * [3 M& R$ P# V; d" ~) R
    09 数值分析算法5 p+ L0 k- A: e
    数值分析(numericalanalysis),是数学的一个分支,主要研究连续数学(区别于离散数学)问题的算法。( A/ j, ?/ P5 k8 |7 `% o; s0 B

    - E% l" ?/ L; S/ E; o; h: e( K9 ~1 d

    % ^4 Y. X% B- i# N5 X如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。' H# `5 G" X- l# ~$ y/ W

    1 k0 C" Z* H' `- {$ x

    + q8 `- Y7 x* E这类算法是针对高级语言而专门设的,如果你用的是 MATLAB、Mathematica,大可不必准备,因为像数值分析中有很多函数一般的数学软件是具备的。
    4 s' O6 Q$ {: t+ a# ?  z, m! S2 G
    1 ]9 i8 p% X) ?, H- z# A1 \" ^5 V

    4 b% G! Q! ^$ P 10  图象处理算法
    ! i" T- }; s9 z& d4 j( ~在数学建模竞赛中:比如 01 年 A 题中需要你会读 BMP 图象、美国赛 98 年 A 题需要你知道三维插值计算,03 年 B 题要求更高,不但需要编程计算还要进行处理,而数模论文中也有很多图片需要展示,因此图象处理就是关键。做好这类问题,重要的是把 MATLAB 学好,特别是图象处理的部分。* `4 l( F1 H" O4 [# g9 V
    ' r, l7 B) U1 U8 h& d- R4 V

    2 D' h: M% ^# K0 a, R% l
    ) q" A( i( B* q8 p5 S' A( P

      T  V5 ?% e! O! U+ g. m$ O————————————————1 L2 R! C: S5 n  o
    版权声明:本文为CSDN博主「文宇肃然」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。2 X% ]+ i8 [$ O4 h; Y
    原文链接:https://blog.csdn.net/wenyusuran/article/details/114093268
    / s2 n7 Y' E4 E1 J
    $ P; s' P4 h; `7 a# Y. i% n+ ~8 V4 @: J2 O) d
    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-7-29 11:33 , Processed in 0.356954 second(s), 50 queries .

    回顶部