0. 前言
笔者在上个月(22年11月)参加了数学建模亚太赛。由于是第一次参加数学建模的比赛,没有前人和老师指点,很多东西靠自己摸索,吃了不少亏。
比赛已经结束有一段时间了,这几天趁着有时间写一份心得,希望能帮到有需要的人。
1. 赛前准备
自我评估
有参加比赛的愿望总归是好事,但是如果你单纯为了拿奖想参加,那我劝你别报。因为数模比赛与其他比赛不同,它更像是一场马拉松,如果你没有兴趣或者相关能力做支撑,很容易半途而废。
不论你是想担任建模手,编程手,写手,我建议你:
- 至少掌握一门编程语言,可以不用学的太深,主要目的是了解编程的思想,使用它只是次要目的
- 学会Excel并精通,如果你不擅长编程,Excel能救你一命
- 会英语,不用精通,至少把四六级过了,如果英语不好,找资料以及和队友沟通都困难
- 最好学过线性代数,概率论,统计学
- 擅长查资料(不是指擅长用百度),最好平常有多种的信息来源
以上几点不是必备条件,但是建议都有,因为如果不具备这些条件后期临近比赛再恶补会很麻烦。
确认自己是否有充足时间参与学习数模,以及确保自己不会因此落下学业,毕竟比起比赛,学业更重要。
组队
队员分工
首先,比赛前两三个月就需要组好队了。关于组队这方面,首先一定要选择彼此能性格契合的队友,且最好不要是关系特别亲密的朋友,因为比赛期间很有可能发生争执甚至吵架,如果因为这个原因把人际关系搞杂了不是很好。提前两三个月的时间主要是为了有足够时间互相了解,了解其他人的优缺点,有足够时间换队友等。建议对队友也按上一条自我评估的标准评估一下。之后就拟定每个人负责的方面,一般一个人主要负责一个,即建模手,编程手,写手,并且选一下队长。有的比赛是允许1人或者2人参赛的,那么也要提前规划好分工,利用赛前时间提前学习或者复习对应内容。一定要和队友约法三章:不要中途退出,不要摆烂,不要发脾气
指导老师
指导老师也是团队的一部分!很多人会不重视这一点,所以不会提前选择指导老师。和队员的要求一样,指导老师需要提前两三个月沟通联系好,了解一下是否有足够能力担任本队的指导任务,再约法三章。
注:笔者因为没提前了解过指导老师,随便选了一个老师,比赛期间老师经常失联,导致我们孤立无援只能自己想办法,浪费了很多时间
学习与复习
完成组队之后就可以开始学习了,建议不论个人分工先把所有的数模相关的概念了解一遍,可以不用看太细,有印象即可,后期比赛如果用到再去详细看。
这里推荐清风的数学建模视频,比较适合零基础的同学学习,但是视频比较多,需要提前几个月开始观看
由于后半部分是付费的,可以上YouTube找有人上传的完整版看,内容是一样的
不论个人分工,最好对所有工作都有了解,以防突发状况。而你需要把你分工相关的内容重点看一下。
建模
建模方面可以先将所有方法都系统地了解一下,至少知道有这个方法以及这个方法是用来做什么的。后期比赛过程中就有方向了,可以上网再详细学习了解。
编程
注意区分编程语言,编程软件,代码的概念。编程不仅仅是代码,而是一整套逻辑思想。
时间充足的情况下建议先学习建模方法再学习对应的代码,并且试着自己写一套。建模手需要有一个自己的代码仓库(比如GitHub)来存储自己所有的原创代码,因为比赛时间很紧张并且代码需要查重,没有时间从头到尾写代码。
编程语言建议学习Python和MatLab,其他的如Lingo,R等也都可以,只要你觉得对你有帮助都可以。
写作
建议去学校图书馆找比赛论文相关书籍,能找到许多相关的书籍。也可以上网找,只要你觉得有帮助。
一定要学会使用Latex做公式和排版,个别小比赛规定不严不要求使用,但是美赛和国赛是一定会规定的。
比赛前一个星期
- 准备好一个以上的排插,一包抽纸,移动电源,草稿纸,浓缩咖啡
- 有需要的话再准备一个路由器,最好是OpenWRT系统的,方便小组的学术上网
- 去图书馆借书,把和数模相关的教程书籍,论文等都借走,比赛期间随时查阅,很多时候求助搜索引擎不如翻书快
- 如果比赛在校内进行,建议去找学校教务处申请借一间教室,方便小组的讨论。借之前先去一下,了解一下是否有安排上课或者里面是否有同学在里面自习。最好是有黑板和多媒体可以使用的。一定要确保有一个能自由讨论不被打扰的环境。
- 比赛前几天调整好作息,适应早睡早起,因为有的比赛第一天一大早就发题目了,需要留足时间讨论确认选题。
- 如果课表有课冲突了,提前向任课老师请假,后期再自行补课。
- 调整好心态,既不能太紧张也不能太放松。
2. 比赛
审题
第一天一大早就发题了,团队可以一起吃个早饭同时讨论一下选题。AB题题量少难度大,C题难度小题量多。一般选C题的人较多,可能评奖的难度也大。需要合理斟酌。
可以搜索一些过去的论文,看看是否有类似的题目,看看自己是否能接受。
注意:题目一定要读完,包括参考资料的链接也要打开看看,很有可能题目做到后面缺了什么在参考资料里就写的很详细。
时间分配
比赛时间很紧张,往往一道题所建立的模型会推倒重来很多遍,而这会浪费很多时间。
以这次亚太赛为例,四天时间可以大致安排如下:
Day1 | Day2 | Day3 | Day4 | |
---|---|---|---|---|
上午 | 拿题,确认选题 | 修正第一题并完成 | 修正第二题并完成 | 小组润色论文 |
下午 | 第一题建模与编程,写手同步写论文框架 | 第二题建模与编程 | 商讨文章内容 | 上传论文并确认无误 |
晚上 | 写手开始写第三题 | 第二题建模与编程 | 写手开始写论文 |
不同比赛与选题对时间分配要求不同,需要合理安排时间和分工。
信息获取
学会使用互联网来查找你想要的内容。请戒掉使用百度的习惯,百度的信息相当不可靠且充斥着大量的广告。请使用谷歌和必应。
中文的技术内容,比较优质的来源有知乎,CSDN,简书等,以及各种大佬的个人博客。
英文内容建议直接在Google上用英语搜索,一般Google的搜索结果比较靠谱。
建议擅长使用英文搜索找英文信息而不是中文。
查找相关论文建议使用知网和Google Scholar,前者中文内容覆盖比较全,后者可以多语言搜索,英文偏多,中文也有覆盖,最为全面。
数据获取与处理
获取
通过搜索引擎可以搜索到一些现成的数据,比如如果想要找新冠每日新增数据可以在Google搜"COVID-19 daily new cases data CSV download",将所有关键词输入,就能找到很多有效的信息。一些大学,研究所,政府机构会在官网上提供这些数据,通常是.csv格式的,用Excel可以直接打开,经过一些Excel的处理就可以使用了。
如果有能力写爬虫,也可以自己从一些网站上爬数据。当然,如果有现成的数据更好。
处理
大部分的数据处理是无法人工完成的,因为一些数据可能动辄上万行的数据记录,凭人工是无法处理的。可以使用Python,Excel等做预处理,再导入到MatLab里做进一步处理。
关于SPSS
使用SPSS工具可以直接生成数据分析结果以及一些图像。一些工具比如SPSSPRO(注意,这个是一个国产产品,不是IBM的SPSS)可以直接生成论文和图像,省去了很多繁琐的步骤。关于是否能直接使用生成的文章暂且存疑,SPSSPRO的官方声称是可以直接使用的,但是我们咨询过指导老师,使用该产品省略了太多步骤,不适合比赛使用。建议个人斟酌。
3. 赛后
做总结
可以自己写一篇心得,就如我现在做的一样。
保存资料
比赛所有写的论文,代码,建议本地存一份,云端备份一份(比如开一个GitHub的private仓库),不要比赛完了就把东西丢掉,因为很有可能下一次比赛可以用到。
有个GitHub的代码仓库是个好习惯,建议比赛结束后将代码重新整理上传。
继续学习
总结比赛中有哪些不足,之后再去学习相关内容。