数学建模个人经验谈 ( P6 m% r) P9 L3 a9 w0 \& J! O + v) A* O+ n/ {, a9 K1 序$ x g1 J/ H3 N# O4 s( k; r
2 [. o6 E8 W; N6 C感到要在全国赛中取得好成绩经验第一,运气第二,实力第三,这种说法是功利了点,但是在现在中国这种科研浮躁的大环境中要在全国赛中取得好成绩经验是首要的。这并不说明美赛中经验不重要,在美赛中经验也是首位的,但是较之全国赛就差的远多了,这是由于两种比赛的不同性质造成的。. y9 x2 t* B. M) Y$ E* L, f
2 A2 }, y$ Z+ H4 K( |9 n
全国赛注重“稳”,与参考答案越接近,文章通顺就可以有好成绩了,美赛则注重“活”,只要有道理,有思想就会有不错的成绩,这个也体现了两个国家的教育现状,这个就不扯开去了。在数模竞赛中经验会告诉我们该怎么选题,怎么安排时间,怎么控制进度,知道什么是最重要的,该怎么写论文......,或许有人会认为选题也需要经验吗?经过参加了多次比赛后觉的是有技巧的,选个好题成功的机会就大的多,选题不能一味的根据自己的兴趣或能力去选,还要和全体参赛队互动下(这个开玩笑了,不大容易做到,只能是在极小的范围内做到),分析下选这个题的利弊后决定选哪个题,这里面道道也不少,后面会详细的展开谈谈。 % N, E) C3 b0 k0 i1 i5 x. y; Z5 U/ Y3 I0 [% D5 j/ i
写这个东西当做是回忆下以前的点点滴滴,希望自己的经验能帮助一些新手(这样的说法不大好,暂时想不出更好的,凑活着先用着)能尽快的成长,尽快的发挥自己的能力,体验数学在应用中的作用,爱上数学,甚至和数学打一辈子交道。国防科大数学建模网的路过(向为)前辈曾经写过个新手教程,写的十分的好,希望写的这个能延续他写的那个教程,能给大家哪怕一点点的帮助。 - p5 t! S6 p# u/ M) z6 [ - Y1 D# r+ \8 T3 j$ W # l' D) \& s& [( B d! a$ G0 h. Y7 o5 p 1 m$ N! J; x" H' X% ~2 组队和分工 3 Y. M1 U5 `1 H2 ]- } & j/ U# b% Y) T- [6 K数学建模竞赛是三个人的活动,参加竞赛首要是要组队,而怎么样组队是有讲究的。此外,还需要分工等等一般的组队情况是和同学组队,很多情况是三个人都是同一系,同一专业以及一个班的,这样的组队是不合理的。让三人一组参赛一是为了培养合作精神,其实更为重要的原因是这项工作需要多人合作,因为人不是万能的,掌握知识不是全面的,当然不排除有这样的牛人存在,事实上也是存在的,什么都会,竞赛可以一个人独立搞定。但既然允许三个人组队,有人帮忙总是好的,至少不会太累。而三个人同系同专业甚至同班的话大家的专业知识一样,如果碰上专业知识以外的背景那会比较麻烦的。- o0 w4 | W- o# ~3 @" g; J; G, p$ s
' y! \8 i5 U6 g: k; J8 Y
所以如果是不同专业组队则有利的多。众所周知,数学建模特别需要数学和计算机的能力,所以在组队的时候需要优先考虑队中有这方面才能的人,根据现在的大学专业培养信息与计算科学,应用数学专业的较为有利,尤其是信息与计算科学可以说是数学和计算机专业的结合,两方面都有兼顾,虽然说这个专业的出路不是很好,数学和计算机都涉及点但是都没有真正的学通这两门专业的,但对于弄数学建模来说是再合适不过了。应用数学则偏重于数,但是一般来讲玩计算机的时间不会太少,尤其是在科学计算和程序设计都会设计到比较多,又有深厚的数学功底,也是很不错的选择。! [& t4 M7 ?3 @. v0 W. q& B
, M# ?2 c/ `$ S
有不少的人会认为第一人选是数学方面的那第二人选就应该考虑计算机了,因为学计算机的会程序,其实这个概念可以说是对也可以说是不对的。之所以需要计算机方面的人是为了弥补数学方面的人在算法实践方面的不足,但是不是所有的计算机方面专业人都擅长算法实践的,如果要选的话就选擅长算法分析实践的,因为学计算机的不一定会程序,并且会程序的不一定会算法。拿出一个算法,让学计算机的编写程序实践不一定能行,不是小看计算机的,但是这种情况还是比较多的,不然可以看到参加ACM的数学系的居多,比学计算机的搞的好。因此一定要弄清这个概念,不是计算机的就适合的。+ w0 [# n2 h+ E. H2 ^6 p
u2 w, M: E' W, {所以在组队中有两种人是必需的,一个是对建模很熟悉的,对各类算法理论熟悉,在了解背景后对此背景下的各类问题能建立模型,设计求解算法。一个是能将算法编制程序予以实现,求得解。当然有可能是一个人就将这两种都具备了,这样的话再找个任意具备上述两种能力的人就可以了,以减轻工作量,不然非累死不可。第三个就是专门需要写作的拉,从专业角度看是需要别的专业,比较适合的有生物、土木、机电、电信或机械等专业。在数学建模中各种背景的问题都会出现,所以有其他专业同学的话可以弥补专业知识方面的不足。/ Y- x# l! k) u
9 }, \* f; n2 j6 p* ^( b# U综上所述,组队要根据分工而来的,三个人要具备一个数学功底深厚,理论扎实,一个擅长算法实践,另一个是写作(弥补专业知识不足),如果一个组能有这样的人员配置是比较合理的。但是往往事事不能如意,所以不能满足这种人员配置的时候就尽量往这样人员配置靠。3 培 训 " }' G2 p5 |/ L& F % D5 B% V" i& i! M很多刚接触数模的朋友都会碰到一个问题,那就是什么都不会做,看着题目不知道咱们下手,干着急,然后,一旦经过指导之后就知道该怎么做了,同时在做的过程中会碰到各种各样的问题,发现不是算法不了解就是软件不会使用。假使一个题目会做了,但是如果碰到另一个题目又不会了,又不知道该怎么办了。如何使新手尽快的成长是个大家很关心的问题,讨论的也很广泛。各个学校都又不同的方法,有的是开数学建模培训班,有的是以题带连,有的是通过协会普及教育...,各个学校都已形成自己的风格和方法。纵观这些方法,个人感觉有很多不是太科学的地方,有的学校投入很多但是出不了成绩,这时就需要调整下培训方法了。 . _, o' {" U0 S8 v# D7 r0 ?2 k! w! [3 P0 |/ Z4 B/ B
检验数模学的成果如何是每年的全国赛和美国赛,形式都一样是以通讯的方式完成给定的选题。而做课题的一般进程就是建模型,解模型,写论文这三步。所以从这三个方面去培训是最有效的,因此个人认为最有效提高自己的水平就是以题带练,在实践中提高自己。 4 j$ t9 E& R8 x2 T* I ' h3 ^; `4 v' S$ X, L! c4 @) p |) e. y _/ J7 C
/ u* Y" P& M! E% a
1. 建模型: , t( w! z3 ?9 l # d4 o, y% M1 U" |. {+ [# o0 X建模型是最为关键的一步,新手往往是无从下手,这是因为知识面不光,缺乏背景知识,9 z4 b/ H b1 m( z; F
' a- w" k% X' ~背景知识对建模型来讲是很重要的,如果课题的背景刚好是本专业的,那就会知道问题的关键是什么,该怎么样去解决,而事实上往往不是这样,问题的背景是所不熟悉的领域,这个时候就需要查资料了解这个问题的背景和了解问题的发展,特点,关键所在以及前人是怎么解决的等等。因此需要训练查找资料和查找文献的能力。新手在知道该怎么做以后碰到的问题就是不会做,这个就是相关知识的缺乏了。 6 |, b# F! J7 v5 B: A& A + T O1 G% ~& X7 M E比如需要做聚类分析,需要用遗传算法,需要做相关性分析等等的时候不知道该怎么做?这个就是相关知识的缺乏,当然知道了解掌握全部的算法和知识是不现实的,但是常用的算法和知识是必备的,也是必须的,数模论坛的ducy前辈(董乘宇)曾总结过数模竞赛应当掌握的十类算法(具体可去数模论坛查找):蒙特卡罗算法,数据拟合、参数估计、插值等数据处理算法,线性规划、整数规划、多元规划、二次规划等规划类算法,图论算法,动态规划、回溯搜索、分支定界等计算机算法,最优化理论的三大经典算法:模拟退火算法、神经网络算法、遗传算法,网格算法和穷举法,一些连续数据离散化方法,数值分析算法,图像处理算法。基本上涵盖了数模中几乎所有的算法了,如果掌握了这些对于运筹优化类的问题就可以轻松解决了,但是随着近些年的发展看概率统计的手段在数模中的作用越来越大,所以除了上述十大算法之外还应当对统计方法有相当的了解和掌握。+ k* i2 R! e6 a" j) u
7 C Q0 d! Z0 E" F. [/ p& e: R
先前说过,要掌握所有的知识是不现实的,参加数模的其中一个能力就是现学现卖的能力,在最短的时间内掌握知识并将其应用,这个也是吸引很多同学为之着迷的原因,但这并不是说可以不去了解算法,什么都可以到竞赛的时候去学,那个时候就来不及了,因为只有了解的多,知识面宽广了,遇到问题时就知道该怎么办了,然后具体去解决问题。所以增广知识面,博览全书很重要。& [9 C: P( J: M0 i
0 `$ l1 ?( W' n" Q, w
/ |3 O y# d W. [
* u7 r! c5 x5 z+ q# y2. 解模型:$ T w7 b9 q0 F
: G9 [' s) P$ R& s$ k4 N" A模型建好了,该怎么解是个常常令人头痛的问题,这个不仅时新手,而且一般是令绝大多数同学头痛的问题,辛辛苦苦把模型建了,但是解不出结果来,这个时候往往时间很紧了,常常另人无奈,所以培训的时候多做这些方面的训练是十分必要的。解模型实质上就是算法的实践。一般来讲是用matlab,mathematica,lingo,lindo,spss等等数学软件来求解,当然有的时候c/c++是很实用的工具。在这里推荐几本数学软件的书《精通matlab6.5》(北航张志涌所著)、飞思工作室出的那套matlab6.5的书、《数学运算大师mathematica4》、万保成老师所写的电子版的《lingo8 for windows》、《最优化模型与实验》,这几本书都是很好的,对掌握这些数学软件是十分合适的。而有些算法数学软件往往无能为力,需要用c/c++来编制程序来解决,对于c/c++个人掌握程度不同,不过如果多看些算法方面的书,多做些ACM类的练习是十分必要的。! }: ~4 V. C) I4 C: @
( m# h" m a ]9 r2. 一定不要自己敲编号,一定要使用交叉引用。如果你发现自己打了编号,一定要小心,这极可能给你文章的修改带来无穷的后患。标题的编号可以通过设置标题样式来实现,表格和图形的编号通过设置题注的编号来完成。在写“参见第x章、如图x所示”等字样时,不要自己敲编号,应使用交叉引用。这样做以后,当插入或删除新的内容时,所有的编号和引用都将自动更新,无需人力维护。并且可以自动生成图、表目录。公式的编号虽然也可以通过题注来完成,但我另有建议,见5。! A8 A0 N5 q2 L6 j
9 K! i5 b. X/ w$ p6 ~3. 一定不要自己敲空格来达到对齐的目的。只有英文单词间才会有空格,中文文档没有空格。所有的对齐都应该利用标尺、制表位、对齐方式和段落的缩进等来进行。如果发现自己打了空格,一定要谨慎,想想是否可以通过其他方法来避免。同理,一定不要敲回车来调整段落的间距。1 T1 H# {& _7 Y
' _0 D+ h3 K% G3 Q( j4 I# [! V
绘图。3 M$ _2 K& h* r; Q6 ~; [- w6 q+ f
; V- M* d( e$ {( N
统计图建议使用Execel生成,框图和流程图建议使用Visio画。如果不能忍受Visio对象复制到Word的速度,还可以试试SmardDraw,功能不比Visio弱,使用不比Visio难,速度却快多了。如果使用Word的绘图工具绘图,最好以插入Word图片的方式,并适当使用组合。( n) ~4 A) {7 C8 [
, t8 r& `% u* J3 w5 D' K- n$ f5. 编辑数学公式建议使用MathType5.0,其实Word集成的公式编辑器是它的3.0版。安装MathType后,Word会增加一个菜单项,其功能一目了然。一定要使用MathType 的自动编号和引用功能。这样首先可以有一个良好的对齐,还可以自动更新编号。Word 正文中插入公式的一个常见问题是把上下行距都撑大了,很不美观,这部分可以通过固定行距来修正。. Y& P' D2 ?4 h( r4 i
[! Q8 N, ~( c0 s7 X9 Z参考文献的编辑和管理。如果你在写论文时才想到要整理参考文献,已经太迟了,但总比论文写到参考文献那一页时才去整理要好。应该养成看文章的同时就整理参考文献的习惯。手工整理参考文献是很痛苦的,而且很容易出错。Word没有提供管理参考文献的功能,用插入尾注的方法也很不地道。我建议使用Reference Manager,它与Word集成得非常好,提供即写即引用(Cite while you write,简称Cwyw)的功能。& G- d& m/ c, D% e
# b& W$ _" d5 L& ]! ~; F1 R4 @
你所做的只是像填表格一样地输入相关信息,如篇名、作者、年份等在文章中需要引用文献的的方插入标记,它会为你生成非常美观和专业的参考文献列表,并且对参考文献的引用编号也是自动生成和更新的。这除了可以保持格式上的一致、规范,减少出错机会外,更可以避免正文中对参考文献的引用和参考文献列表之间的不匹配。并且从长远来说,本次输入的参考文献信息可以在今后重复利用,从而一劳永逸。( x0 p: W$ F% W
' l! g m. O' u5 L. s- `类似软件还有Endnote和Bi blioscape。Endnote优点在于可以将文献列表导出到BibTeX格式,但功能没有Reference Manager强大。可惜这两个软件都不支持中文,据说Biblioscape对中文支持的很好,我没有用过,就不加评论了。7 c* r( O* O; R8 p+ Z5 d$ b
4 A. J1 P7 D% P) b# \0 o. v7.使用节。如果希望在一片文档里得到不同的页眉、页脚、页码格式,可以插入分节符,. b) q: K' v4 J6 ]0 y+ h0 `: t
2 p9 P# C: C* e3 ]3 a& ?4 c
并设置当前节的格式与上一节不同。 ) l. d- g7 m+ t2 `+ D3 D& W+ V$ c( G8 B! {; j; l, t& K$ ]
6 R& ]! n0 w; R, T
3 M! V) d+ r: A' j
上述7点都是关于排版的建议,还是要强调一遍,作者关心的重点是文章的内容,文章的表现就交给Word去处理。如果你发现自己正在做与文章内容无关的繁琐的排版工作,一定要停下来学一下Word的帮助,因为Word 早已提供了足够强大的功能。$ z, H0 l. G; M- m* X
! l% m) \8 g: Z' {2 t+ s
我不怀疑Word的功能,但不相信其可靠性和稳定性,经常遇到“所想非所见”、“所见非所得”的情况让人非常郁闷。如果养成良好的习惯,这些情况也可以尽量避免,即使遇上,也可以将损失降低到最低限度。建议如下:6 N F+ h# v6 F+ m
; r, M6 f) h) g9 M: M8. 使用子文档。学位论文至少要几十页,且包括大量的图片、公式、表格,比较庞大。如果所有的内容都保存在一个文件里,打开、保存、关闭都需要很长的时间,且不保险。建议论文的每一章保存到一个子文档,而在主控文档中设置样式。这样每个文件小了,编辑速度快,而且就算文档损坏,也只有一章的损失,不至于全军覆灭。建议先建主控文档,从主控文档中创建子文档,个人感觉比先写子文档再插入到主控文档要好。8 z6 r K3 p4 A0 h& k6 Y
2 y0 r- W" ~+ g7 \
9.及时保存,设置自动保存,还有一有空就ctrl+s。' N3 a' U3 p8 X! l* W/ G
& Z: Z" \+ N3 U3 P) y
10. 多做备份,不但Word不可靠,windows也不可靠,每天的工作都要有备份才好。注意分清版本,不要搞混了。Word提供了版本管理的功能,将一个文档的各个版本保存到一个文件里,并提供比较合并等功能。不过保存几个版本后文件就大得不得了,而且一个文件损坏后所有的版本都没了,个人感觉不实用。还是多处备份吧8 i7 S6 P9 k& G: `) A& v8 r