注意:本文着重描述经历和心路,经验性的东西需要读者自行提炼,而且本文具有流水账嫌疑,浏览时请自行斟酌!
先说说感想:整个大学期间,我就参加过两次数学建模比赛,一次是数创杯,一次是国赛。第一次参加我准备工作做的很不到位,全程划水。。第二次参加做的准备工作稍微多一些,6月份确定参加,7月份在家看了《数学建模算法与应用》和《matlab在数学建模中的应用》两本书,毫无丢落、囫囵吞枣地看完了,8月回学校与队友进行日常磨合,8月底至9月初进行了4次校模拟,9月中旬进行国赛,为期3天。第二次建模从准备、磨合到比赛的整个过程,辛酸煎熬而且苦闷。这个学习和成长的过程真的让人很不愉快,绝对说不上是一个快乐的过程。这段时间几乎每天都处在一个大脑高速运转的状态,让我有点喘不过气。以至于在国赛结束,新学期开始之后,我又划了将近两个月的水,各种逃课各种不学习各种玩闹,每天过着在leetcode上刷个题和跟朋友们吹吹牛逼就能满足的生活,自我怀疑、彷徨又颓废。这种状态的快速下滑明显到我们系主任都不止三次提醒我要调整状态。11月中旬时我知道了我们小组获得了全国一等奖的消息我一点也不兴奋,我一直以为只有那些牛逼大学里能把数学模型运用绝妙的人才能拿国一的,我们这种水货也能拿奖?我没有一丁点儿幸运的感觉。真的,我们当时可能就是以一种很不自信的、抱着终于完事儿解脱了的、反正都结束了爱咋咋地的心态,把这份连我们自己都不太能看懂的论文、代码和求解结果交上去了。
那些渴望短期内练牛逼水准的冒牌“程序员”们就别想了,不可能的,不是说学过python和matlab就能草草上阵的,建模需要的是能够快速组合运用甚至自己编写算法代码的人,如果你没有练过,那些什么遗传算法、各种变形的TSP、用来做预测的神经网络或者是时间序列等基本的数学模型算法你绝对是搞不出来的,你只会抄,而且抄都抄不利索。建模组内的大脑需要灵活的运用合适的数学模型,写手需要构思清晰明确的描述来阐释模型和算法,而程序员的任务则是需要充分理解大脑想出的算法,用合适的程序语言进行转化,并且能够运行。是的,你必须得保证能运行出合理的结果,不然你写的代码再多再厉害也只是没有意义的符号。我个人不喜欢把制表作图划分到编程中,因为这些东西没有太大的思维含量,别人学学也能做。不过跟打程序设计竞赛的ACMer或者OIer相比,建模小组里的程序员好很多。二者之间的差异太多了,就从最直观的结果来说吧,程序设计竞赛的题目只有每一个用例都通过才能ac或者多对一个用例才能多几分,而建模只需要你的程序能运行,且运行结果在可接受的范围内就行,要求没有那么高。
以上只是我个人最真实的想法,包含了很多主观观点。如果你本身实力尚可对我上面这段话非常不爽的话可以直接无视。
下面我来说说国赛过程中我到底做了些什么:
7月份在家闭关,在家看了《数学建模算法与应用》和《matlab在数学建模中的应用》两本书,把matlab这门语言入了门。书上的每一个模型及其每一个模型的代码实现我都学习了,所有的代码我都亲自手撸,并尽最大努力理解。我写了很多很多的代码,编程复现这些算法的感觉确实很舒服。我确实很喜欢写程序。
8月份回学校与队友进行日常磨合,在实际的磨合过程中我发现我在7月份准备的很多东西都忘了,我开始有针对性的复习和深入。我们队长作为建模小组的大脑,以身作则,非常严格,说实话进入大学以来我是第一次在这种强压下学习,这种压迫连系主任都远远不及的。这个月我写了更多的代码,编程复现这些算法的感觉确实很舒服。当然我和小组成员有了很多交流,虽然能互相理解,不过我感觉压力还是好大。
8月底到9月份开始校训,恕我直言校训最重要的就是那几次模拟,老师实在给不了什么帮助。。。我现在还能记起几次模拟写的是什么代码,有曲线的拟合和插值,有动态规划,有贪心+dfs,有BP神经网络,有时间序列,有GM模型,有主成分分析,有聚类,有目标规划,还有恶心的大模拟。。。等等。不仅如此,在组长的要求下,我还复现了近些年部分国赛真题优秀论文的算法,我又写了很多代码。总之这个阶段我每天要做的工作就是,看别人的算法,与组长交流思路,最后写这些算法的代码。。。
9月中旬迎来了终点,国赛!18年国赛期间我们选了B题,RGV的动态调度,充分的发挥了我的编码能力。。比赛过程中我们的组长貌似大脑有点宕机,他的思路不是很顺。我们两个交流思路时出现了很大的困难,最后我写了几个很长很长的程序段,之前学的数学模型都没用上。这个程序段里的算法,有递推,但又不像是动态规划,给人贪心+大模拟的感觉。。。最后我还有幸参与了论文中某一小部分的写作,组长和写手实在是无法完成某个算法的描述,然后我就勉为其难的写了两笔,我自己都读不懂我写的是啥。。最后国赛就这么煎熬的结束了,我仍然清晰地记得我们组长在赛后收拾东西时对我说:“xx,我感觉你能上浙大!”。我傻笑着回了个呵呵。。。这里的呵呵你可以理解为字面意思,也可以理解为你想理解的那个意思。
后来我们组长还很想邀请我参加当年美赛,想再打一届,可我实在是撑不住了,我真的不像再划水两个月了。。于是我说了些有的没的的拒绝了他。。最后我还是要感谢我的两个队友。虽然我在本文开头吐槽我们组是水货,但其实他们两很棒,他们都很好的完成了他们各自的任务,他们的学习和理解能力也非常强,整个过程中他们所体现的坚持、努力和觉悟,是我在之前的大学生活中所没有见过的。建模小组的分工就是要很明确要各司其职的,建模小组的角色分配就是要人尽其用的。大脑和写手的工作我可以不管,但作为组内的程序员,就是要不停地想算法敲代码。