2018年美赛经历总结

前言

前段时间参加了2018年美赛,本篇博客记录了整个比赛的经历及赛后启示。


赛前准备

队伍组成

小队由三名成员组成,除了我以外,还有两名数理金融专业的同学,其中一位是我的高中同学Zhang(女),另一位是她的同班同学Huang(男),三人都是大三。

知识体系相关

首先梳理一下我们三人的相关知识储备:

  • Zhang和Huang
    • 数理金融专业(数学和金融学双学位)
    • 选修过运筹学,有一些建模经验(课程要求)
    • 没有比赛经历
    • 软件工程专业
    • 选修过模式识别课程,略微了解聚类算法、神经网络等
    • 没有接触过matlab,打算全程使用python
    • 没有比赛经历

赛前学习

在建模教材的选择上,我们用了评价较好的两本教材,国内国外各一本:

我们本来的打算是:Zhang和Huang主要负责建模,我负责找数据、写代码、画图、排版,三个人一起写论文。虽然今年的美赛相对较晚,准备时间比较长,但我依然没做什么太多的准备……

赛前,我做了些零零星星的工作:

  • 浏览了2017年的部分真题,大致扫了几眼O奖论文,由于没有建模基础,所以也没有研究每篇论文的具体思路。之前听说论文的排版摘要是重中之重,所以就稍微着重看了看;
  • 找了找LaTeX的模板,把环境配置好,简单翻了翻说明文档,以便比赛时知道怎么查找相关的排版技巧;
  • 在知乎上看了下科学论文的图表绘制方法(如何在论文中画出漂亮的插图?),对于在论文中如何画图有了一些基本的了解;
  • 粗略看了一下姜启源《数学模型》的各章节的小目录,大致知道了建模是怎么回事…

本来计划着再找一些经典模型的代码,比如元胞自动机之类的,但最终偷懒就放过了……


时间安排

今年的美赛安排,从北京时间2月9日6:00,到2月13日9:00(据说官方邮箱的论文接收截止时间是10:00),我们三人在8日下午第一次碰头。

2月8日下午——赛前

赛前的下午,三个人到图书馆看了一两个小时的书。说实话当时我心里非常没底,因为觉得自己没有接触过建模相关的代码,之前也没用过LaTeX,只是看了看使用文档,觉得明天正式比赛的时候,难度和压力估计在他们两个人身上,因为我对建模一窍不通。而且虽说他们两个都学过一点建模,但毕竟都没有参加过比赛,只是课堂上学了两招的话,不知道水平究竟怎样……

我问了问他俩准备的怎么样,Huang(男)拿着一本教材,回答了一句“还行啊,书基本看了一下”,我顿时感到这次貌似抓到了一根大腿……

2月9日——比赛第1天

比赛第1天。

虽说赛题在凌晨5:50就已经全面公布了,但我们三个还是决定睡个好觉,快10点才开始集中起来看这6道题目(A、B、C、D、E)。

我看了看这6道题,基本上是一头雾水,由于本来就没有建模经验,自然也不知道哪道题“看起来简单”或者“好像有点思路”,应该算是“完全不知道这6道题在干嘛”,甚至有点不想看这大段大段的文字……

因为我没有任何的建模经历,所以就想着主要靠两个队友来确定选题。他们两个看了看题后,首先排除了A题和C题,觉得大致可以从B、D、E、F题里面选。起初队友 Zhang 觉得可以选E题,因为看起来非常简单,“就是一个计量模型”,但另一个队友 Huang 说:“别选E,看着这么简单,做下去肯定是个坑”。

大概到了下午两三点的时候,我们看了看知乎上,以及各种群里、网站上疯传着的各种“数据”、“资料”、“思路”,当然更重要的是他们俩的意愿,最终觉得可以选F题,记得当时队友 Zhang 说:“基本上没有什么人选F,如果我们选的话,一旦做出来基本就能拿个H奖。而且一般人如果没有学过高微(高级微观经济学)的话,应该不太敢选这个题”,我当然没有任何意见,觉得应该哪道题都不简单,只要能坚持做下去就行,迅速选一道即可。

但接下来我就陷入了无所事事的状态,他们两个面对着一份群里传来的“美赛F题思路”陷入了沉思,想要研究一下这个“看起来有点靠谱”的资料。

吃过下午饭,我觉得反正我也帮不上什么忙,不如就先回寝室,看看相关的代码,再学学画图,让他们两个专心建模。

到了晚上九点左右的时候,他俩在QQ上告诉我说要换成D题了,因为F题完全没思路,而且那份资料里给的建模公式应该是假的……于是我们开始向别的选D题的队伍借一些参考资料和数据,争取能赶一些耽搁的时间。

第1天结束时,我们队基本上没有任何进展。

2月10日——比赛第2天

第2天早上十点,我们到了信息学部图书馆,开始新一轮的紧张生活。

队友 Zhang 搜集来了很多各种“美赛思路群”里的资料,还打听到了微信上一个名为“美赛老司机”的群主,这个“老司机”第1天在群里发了很多有关B、C、D题的解答,而且另外建了一个思路分享群,进群者需支付299元,他承诺会在第2天晚上继续发布有关这三道题的解答。我们看了看“老司机”第1天发的消息,觉得他的思路还算靠谱,起码能够给一筹莫展的我们一些方向。队友 Zhang 又顺藤摸瓜,找到一个稀奇古怪的“众筹群”,群内100个人,每人支付2.99元,群主将共享“老司机”的思路资料。

我觉得自己不能再和第1天一样,什么贡献也不做,否则整个团队可能真的会没什么进展。于是便闷着头,仔细又去读了两三遍题目,又综合了几份D题的思路,大概两个小时以后,终于有了一点头绪。之后便找队友 Huang 讨论了一下,又整体规范了一下我们的思路。讨论过后又再一次的进行任务的分配与安排,不得不说,直到这时才感觉我们基本进入了正轨。

D题一共分为5个Task,我们首先根据“老司机”给出的思路,继续探索后,解决了Task 1的第1部分;由于Task 4 和 Task 5基本上属于“文科类答题”,因此就让队友 Zhang 开始进行这两个任务的撰写与翻译;我和 Huang 经过讨论,觉得Task 3的难度应该非常大,估计没有什么人能够完整的做出来,可能只会写个大概,因此我们认为只要把Task 1的第2部分,以及Task 2攻破,成绩就应该不错了。

但之后,便再一次进入了思路的尽头。到了晚上八九点的时候,“老司机”又在群里给出了Task 2的一部分思路,我和 Huang 大概讨论了一个多小时,觉得这个思路所给出的简化方向应该是正确的,但对于约束条件的确定,我们两个始终存在一定的分歧。

差不多晚上十二点的时候,我们依然没有想出合适的突破思路,于是就打算找一找数据,先将Task 1建出的模型跑起来。过了一会儿,Huang 在翻各种美赛资料的时候,突然看到了一篇有关“充电站选址问题”的论文,我们两个又研究了一会儿,发现这篇论文写的非常漂亮,而且对于我们先前讨论的“约束条件”的问题,给出了一个简洁优美的解答。

在一筹莫展时看到一篇绝佳的论文,我想这应该是最令人激动的事情吧!

由于第1天耽搁了不少时间,因此我们在第2天选择刷夜赶进度,最终在凌晨四点多才睡去。

2月11日——比赛第3天

第3天早上十点多,三个人匆匆起床。今天的任务依然非常重:我这边需要进行大量数据的查找、模型的程序编写,以及最终结果的可视化;Zhang 需要开始拟论文的初稿;Huang 则继续进行剩下Task的思路突破。

中午步行去吃饭的时候,Huang 依然没有找到合适的思路。我们又简单地交换了脑子,并达成一个共识:整个问题所建立的模型应该不能太多,最好是能够一两个模型从头用到尾,只是不断地增加约束条件、调整模型参数等。接下来,就开始极力寻找我们在Task 2-a中建立的模型和Task 2-b、Task 2-c、Task 3的关系。令人激动的是,大概才过了十分钟,我们就基于这个思路给出了一个模型的迁移方案,而且自我感觉还不错。我们也没能想到,居然只用了这么几分钟的时间就基本攻破了两三个难题!

从下午开始,我的任务便一下子繁重了起来。在写代码的过程中我才发现,数据的查找难度暂且不谈,单单是对已有思路的梳理,就需要花费大量的时间和精力。在之前确定建模思路时,可能只是灵光一现、拍两下脑门,但是真正到编写程序时,一就是一,二就是二,模型需要非常严格的公式推导与表达,而且约束条件纷繁复杂,并不是许多论文里写的一句“可以通过XX算法求解得到…”就可以一笔带过的。

到了晚上的时候,我只跑出了Task 1的结果,才刚刚开始研究Task 2中求解过程用到的免疫优化算法,整个进度异常困难,这下我才发现,我们之前的自信应该是过分天真了……

2月12日——比赛第4天

第4天一早,我梳理了一下整体的进度:大部分模型都没有跑出结果,而且几乎还没什么可视化的图表;论文也只是最最粗浅的第1稿,其中最重要的摘要还没开始撰写。最终觉得不可能再去写代码、求解精确结果了,并隐隐觉得我们连把论文“编造”完都成了问题。

中午12点左右,队友 Zhang 说她那边的翻译任务基本上已经结束了。于是我立即开始了排版工作,排了两部分才发现文稿非常随意,对模型也没有太多针对性地阐述。当然,这也不能怪 Zhang ,毕竟论文撰写的难度才是最大的,而且整体思路是我和 Huang 确定的,最终只是和 Zhang 讲了一两遍。

接下来的一两个小时,可能是我整个比赛期间最为焦躁的时候。我觉得可能还是需要我和 Huang 把论文重写一遍,并交给 Zhang 重新翻译。强忍着将要爆炸的心情,我写完了Task 1的第1部分,在三个人讨论之后,又一次的规划了新的任务:Huang 继续完成论文的Task 1至Task 3,之后Zhang 直接进行最后的终稿翻译,我则需要把已有的数据表示出来,并画出最终的图表。

差不多晚上十点,这些工作才基本完成(其间,Huang写完各Task之后,就立马开始撰写摘要)。我再次开始排版任务,看着 Zhang 发给我的文稿:标点符号与空格的圆角半角没有区分,排版后出现许多乱码;英文单词标点、空格、大小写使用不规范,排版后整个文稿杂乱不堪……排了一会儿后,可能是强迫症或者完美主义倾向太过严重,最终我确实有点厌烦,甚至有点绝望,想要放弃比赛、回家过年……

感谢队友 Huang 和 Zhang 能够坚持下这一两个小时。Huang 之前没用过LaTeX,我简单跟他说了几个方法后,两个队友都让我去休息一会儿,他们把剩下翻译完的文稿排完。

最后的夜晚当然无眠。凌晨1点,Huang 基本已把翻完的文稿粘贴到了LaTeX上。我接过电脑,开始对图片、表格、公式等进行最后的排版,大概又过了两三个小时,排版已基本落定,但内容确实还需要再修改。我回头看了看,Huang 和 Zhang 已经睡去,我把 Zhang 叫起来,让她看看还应该如何修改。估计也是因为疲惫和厌烦,Zhang 说有点头痛,我便赶快让她休息了。

前前后后又是几个小时的修补,我把论文内容、章节标题、顺序等大致修改后,已经是早晨7点。这时Huang 也起来了,我便让他再浏览一下,若没什么大问题就可以提交了…

大概七点二十左右,四天四夜的比赛终于结束了……


收获与总结

  • 从最直观上来看,是工具上的收获。如:

    • LaTeX 进行排版;
    • Excel 进行一些数据拟合与回归分析等;
    • 增强渲染的 matplotlib 库进行数据绘图,提高美观度;
    • 亿图进行示意图的绘制;
    • 数据搜集方面,尽量从各大统计局的官方网站上查找;
    • 搜索引擎的使用方面,如sitefiletype等查询技巧;
  • 对于之后的学业帮助最大的,应该是对于科研论文的学习方法。

    • 首先应转变态度,要相信自己的快速学习能力。一篇论文虽然篇幅冗长,但其核心模型的公式推导、求解算法其实并不算太多,静下心来看应当能有很多收获。
    • 其次是对论文的复现能力。用论文中的模型进行实操时,应能在纸上书写各个推导式,用简易流程图的形式表示算法的各个流程,接着才能用代码来实现。这可能也就是所谓的计算思维
  • 如何做到合理的团队分工合作

    • 在正式比赛开始之前,应该每个人心里都会有个预期,知道自己在团队中做的大概是哪一类工作。但是在实际比赛过程中,最终一定是能者多劳,而且不能完全拘泥于原先的分工,要进行实时规划与调整。正如上文所谈到的,我本来并没有指望自己能够为建模的思路做任何贡献,Huang 应该也没有想到自己会用LaTeX进行大量的排版工作。

    • 由此就谈到了美赛的队伍配置问题,在实际比赛之前,我认为最佳的团队应该是一个建模手+ 一个编程手 + 一个英文写作手。但在真正的比赛中,由于比赛难度过大,可能团队之间配合默契、任劳任怨才更显得重要。

      而且也应注意,队长最好能够对队员的性格、风格进行提前了解,以便知人善任。如,有的人属于天马行空的开辟疆土型,就可以让他主攻建模思路的突破,但其有可能经常下意识地忽略一些零星细节;有的人属于严谨认真的一丝不苟型,可能“灵气”不那么外露,但是经常能够在一些排版、论文表达等方面,关注一些其他人不容易觉察到的地方。

    • 如果可能的话,在比赛之前,三名队员都应该学学LaTeX排版、简单的PS、搜索引擎查询技巧等技能。

  • 如何看待对场外人的求助

    在我们小队的参赛经历中,在以下的几个方面对其他朋友请求了帮助:

    • 部分论文的翻译
    • 部分数据的获取
    • 摘要、论文的润色等

    由于时间紧任务重,因此我们最终请了很多朋友来帮助翻译论文。但我个人认为,美赛论文的背景深度太大,即便是专业的翻译团队,也无法在很短时间内理解到我们所建模型的精髓所在。因此论文的第一稿最好还是能够自己独立完成,之后可以请其他人来帮忙润色修改。

  • 如何看待诸如“美赛老司机”的各种信息群、思路群?

    首先不得不说,由于我们队伍的三人均没有比赛经历,因此各种思路群里的资料,给了我们极大的启示。当然并不是直接照搬的,大多都是在原有基础上拓展延伸,最终找到了新的思路。

    但也有很多队伍都受了诸如“美赛老司机”的“蒙骗”,交了钱却发现几乎没有任何干货……

    在美赛期间,每天都有许多人在贩卖数据与资料,以此发家致富……美赛的举办时间应该还有很长,明年不如也去路边鼓掌却赚的盆满钵满……


Categories:

Updated: