本文结构
本文源于19年美赛过后,大年三十在家忙里偷闲敲下,因为是赛后总结,所以本文会先讲讲今年比赛的一些感受,然后再分享一些心得,结构如下:
- 赛后小结
- 建模篇
- 编程篇
- 论文篇
- 团队合作篇
- 一点小福利
赛后小结
今年(2019)第一次参加美赛,因为我们小组在排队论、网络流这块的知识储备还不够扎实,同时今年的E题有点“虚无缥缈”,没给出什么实际性的指标,所以最终在C、D、E三题中选择了看起来较为好做的C题。结果证明,真的只是看起来比较好做,不过我想这还是跟我们的模型储备不够有关。
先说说我们所做的C题吧,我在组内是担任coding的角色,但因为我们建模的同学数学也还不够强,所以我也要负责部分建模。我因为第一次参赛,所以赛前储备的模型是一些较为基本的,比如模拟退火、遗传算法、层次分析、粒子群算法、蚁群算法,还有各种线性、非线性规划和一些模式识别算法(我更喜欢称为机器学习算法),因为之前我修过一门机器学习课程,也跟了个老师做过深度学习的项目,所以赛前准备时像PCA主成分分析、聚类、神经网络、逻辑回归、SVM等这类机器学习算法不是我的重点,遗传算法、模拟退火这种最优化算法才是我准备的重点。
但没想到,今年的C题上面说到的算法几乎用不上,找了很多资料,发现只有扩散模型和传染病模型比较契合今年的C题,但之后又看到官方的补充说明:不接受所给数据之外(除经纬度信息、城市之间距离等)的其他解释性参数,也就是说传染病模型中像人口出生率死亡率这种参数我们好像都不能用了,所以最终扩散模型和传染病模型我们只能放弃。要是有人想问最终用了什么模型,QAQ求放过,我也是第一次参赛,所以最终杂七杂八的用了挺多模型,效果不满意就是了。
唠嗑就先唠到这里吧,接下来说说重要的。
建模篇
对于数模大赛(至少对于美赛),我认为最难的在于建模部分,论文写作方面我不好说,但编程方面虽然有工作量,难度却比不上建模。所以一支队伍最好是能找到一个建模很厉害的同学,我对建模厉害的定义是:线代、概率论中常用的东西必须要熟练,能完成线性/非线性规划的方程组的设计,能推导出排队论中需要的目标方程,做得了敏感度/稳定性分析,熟悉各种常见统计模型等等等等,局限于我的知识,我只列举出较少的要求,总之就是在数学方面的知识面要广,某些方面也要深。
除此之外,我认为建模的同学是最适合当队长的,因为Ta是整个团队的核心,应负责起整个队伍的分工安排,所以建模的同学有一些团队组织能力是最好的。不过也别被吓到,上面所列的能力只是最好有,如果没法全部满足也完全可以参加美赛,就像我们队伍一样。
建模问题一般分为四个方面,建模的同学赛前准备时如果时间充足,最好按照下面四个方面有规划地准备:
- 优化问题
- 分类问题
- 预测问题
- 评价问题
上面的没类问题都有各自代表性的算法或方法,建模的同学至少需要掌握每类问题的一两个代表性算法或方法。
问题 | 代表性算法 |
---|---|
优化问题 | 遗传、蚁群、模拟退火算法、线性/非线性规划 |
分类问题 | SVM、聚类、PCA(数据预处理) |
预测问题 | 神经网络、逻辑回归、插值和拟合、灰度预测 |
评价问题 | 层次分析法、模糊综合评价模型 |
上面所列举的只是一些入门的算法,属于必须要掌握的,当然必须要掌握的绝不止于此,只是如果准备的时间不多,那就把上面的都学会,如果运气不错遇到合适的题,上面的算法都套的进,那恭喜你们可以进入下一步,进行模型的详细论证和优化了。
这里补充一句,建模的同学还需要掌握敏感度分析的方法,因为一般论文的最后都要有一个【Sensitivity Analysis】部分,对你们的模型进行评估与分析。
参加过数模之后真的觉得这是一场马拉松式的比赛,绝不是赛前的十天密集进攻和四天的熬夜奋战就可以的,模型的积累不是一两天就可以达成的,比如这次美赛准备期间,阅读别人的论文时就看到这种名词:
the control Engineering high order system time-domain response
【机翻】:控制工程高阶系统时域响应
作为计算机系的学生,这名词我连听都没听过(可能是我孤陋寡闻了QAQ),不过别人的队伍能把这种方法用上,我想如果没有长时间的积累,这样的算法他们也没法套进问题里吧。所以数模比赛更像是一场马拉松,需要的是长时间的积累。
编程篇
因为本人主要负责编程这块,所以个人的心得也会比较多。
首先是编程工具/语言的准备,我见过用Java,用Python,用Matlab,甚至用C++进行比赛的,所以其实工具的选择不会让参赛队伍的最终表现有鸿沟式的差距,真正会引起差距的,是对某样工具的熟练程度。
这次比赛我用的是Matlab,这基于我之前一学期的算法导论课的“洗礼”,我认为我已经能很熟练的运用它,对这门语言(这个工具)的特性也有了一定程度的了解。比如Matlab的矩阵和数组是列优先的,Matlab的for循环奇慢无比等等,如果类似于这样简单的特性都还不清楚,那暂且不建议用Matlab进行比赛。(题外话一句,要论循环的速度慢,试问谁比得过我大Python。[手动滑稽])
所以总结起来,工具/语言的选择原则是:哪个自己用着最顺手就用哪个。当然,我还是想安利Matlab,它在科研和建模领域真的非常舒服,如果打定以后要走上研究生道路的决心,建议早点接触Matlab。
说完工具选择,接下来就是代码的准备了。我想初次参加数模大赛的同学心里肯定有些类似这样的疑问:我负责编程,那需不需要懂模型。我的回答是:需要懂,但可以不用懂的那么深,不过一些比较简单的算法还是需要学会自己实现。说实话,一个负责实现的人如果不理解一个负责理论的人所讲的东西的话,我想这个东西最终即使实现出来了,那也是bug一堆。所以编程的同学赛前准备阶段还是比较累的,既要懂模型,又要懂实现。
那么问题来了,编程的同学是否真的要重复造轮子呢,我建议是除非真的自己想造,不然赛前准备阶段可以去网上找模型代码,熟悉代码的每一部分,知道是在干什么,然后比赛时根据自己需求修改即可。除此之外,每个工具/语言都有它的官方库和第三方库,这也是非常重要的资源,要学会熟练地运用这些库。
有了这些库或网上的资源,编程的同学是否就万事大吉了呢?非也非也,虽然这次比赛我用了很多库资源,我前前后后写的代码也有1200行左右,这些代码主要集中在数据的前期处理和后期的结果展示上,数据的前期处理要结合具体情况而言,怎么把格式处理成自己想要的,怎么处理地更快,这就要看对工具/语言的熟练程度了,所以工具的熟练程度真的很重要。编程的同学还有一个领域要熟练,那就是绘图,如果想给评审留下更深的印象,我们可以尝试绘制一些酷炫的图表,像热力图、三维图这种可以让论文显得逼格更高。
绘图解决之后,其实之前还有个重要的方面没说,那就是数据的搜取。我们不能期望一定能顺利地从网上找到我们需要的数据,所以除了直接从某些网站下载数据之外,编程的同学还可以了解一点爬虫的知识,比如本次比赛我们要找出所给的461个美国的县的经纬度,数据搜集过程中我就尝试了爬虫,通过一些机构或网站提供的接口,利用一点点python代码,爬取我们需要的数据。虽然最终出了一些问题,没爬取到我们需要的数据,但这种方法在我们搜集数据时也是挺重要的。
总结来说,编程的同学赛前需要准备好一些常用模型的代码,需要能将数据快速处理成需要的格式,需要会画漂亮酷炫的图,需要会从网上搜集数据,暂且想到的就这么多。
论文篇
论文写作这一块我觉得我就没太多发言权了,不过结合我们队伍这次比赛情况来说,我还是有一点点能说的。
首先赛前要确定好是用word排版还是用LaTeX排版,现在网上已经有很多完善的数模比赛模板可以用了,不管是word还是LaTeX版的,所以赛前去网上找一份合适的模板,微调成更顺眼的样子,然后比赛时把文字、图表套进去就好。我建议排版这块最好是由论文写作的同学来完成,如果论文写作的同学是非理工类的,觉得LaTeX学习门槛太高的话,用word就可以了,我不认为LaTeX真的会高word一等,不过作为计算机系的学生确实会觉得LaTeX更有逼格。
不过LaTeX也有缺点,就是容易出现bug,因此使用的时候一定要写一段就编译一段,这样才能最快的定位到错误,否则,等你把大量LaTeX代码一起编译出现问题时,在这种紧张的比赛氛围下,你可能会崩溃。
赛前负责论文写作的同学要多看O奖论文,看看别人是怎么写的,有什么固定套路,比如大概哪个位置通常会写什么内容,然后总结出普遍的文章框架,能做到比赛时有胸有成足的感觉,知道在什么地方写什么内容是最好的。除了文字框架要了然于胸,英语水平本身肯定也要过关才行。我不否认现在的google翻译确实挺牛逼,但一味靠中译英然后再进行一些调整总归是不太好的,这跟编程里复用前人的轮子不太一样,想必负责到论文写作的同学大多都希望自己的英语水平能有提升,而靠谷歌翻译是不会有太大进步的。
总而言之,我们可以用谷歌翻译来辅助写作,但不可将它作为主力。同时,写作的同学还要总结出一些固定套路,总结出文章的框架、编排布局。
团队合作篇
首先,一支队伍里可以各自分工明确,也可以像我们一样编程与建模相互穿插,甚至可以三个人都为建模贡献一份力。但不管怎样的搭配,团队里每一个人都最好要懂两方面的内容,写论文同学要是能懂一点建模是最好的,这样在表述团队的模型和结果时能更加准确。
其次是查找资料时一定要用google,百度说实话,不是很适合用来查资料,除了google,赛前也要积累一些常用的网站,我做了一些总结:
网站名 | 网址 |
---|---|
谷歌学术搜索 | https://scholar.google.com/ |
中国知网 | http://www.cnki.net/ |
维普网 | http://www.cqvip.com/ |
万方数据 | http://www.wanfangdata.com.cn/degree/toIndex.do |
ELSEVIER(爱思唯尔) | https://www.elsevier.com/zh-cn |
JSTOR | https://www.jstor.org/ |
Springer | https://www.springer.com/us |
中国数学建模网 | http://www.shumo.com/home/ |
数学建模与统计建模论坛 | http://www.mathsccnu.com/forum.php |
BookFinder | https://www.bookfinder.com/ |
上面只是部分网站,有其他优秀网站的同学也可以给我留言。
最后是数模比赛期间大家可以因不同观点吵起来,然后打完比赛大家还是好朋友哦。
小福利 *(^_^)*
资源(百度云) | 提取码 | 大小 |
---|---|---|
自带梯子的chrome浏览器 | fg5m | 109M |
数模学习资料 | 6i86 | 1.05G |
模型代码 | tsz9 | 847M |
历年O奖论文 | 6z67 | 180M |