【2015年9月4日,周五下午3点】
华清大学数学科学学院本科教务办公室
陆星衍站在办公室门口,手里捏着一张打印出来的通知。纸张边缘已经被他无意识地折出了痕迹,但上面的文字依然清晰:
“关于组织参加2015年全国大学生数学建模竞赛的通知”
“所有数学科学学院本科三年级学生必须组队参赛,每队三人,需在9月10日前提交组队名单。”
必须。
这个词在学术通知里很少出现。华清大学向来鼓励学生自主选择,但这次不同。数学建模竞赛是全国高校的重要赛事,获奖情况直接关系到学院排名和资源分配。所以,“鼓励”变成了“必须”。
问题在于:陆星衍找不到队友。
不是因为他不受欢迎——恰恰相反,他在数学科学学院是公认的“天才”,GPA接近满分,本科期间已经发表了三篇论文,还有更多在审。按理说,想和他组队的人应该排长队。
但现实是:没人敢和他组队。
原因也很简单:他太强了。强到让人害怕。强到和他组队意味着要么完全跟不上,要么被衬托得像傻瓜。而数学建模是团队竞赛,需要合作、讨论、分工。没人想在“天才”的阴影下成为可有可无的配角。
陆星衍已经尝试过两周了。他问过同班的几个同学,对方都婉拒了,理由五花八门:“我已经和别人组队了”“我暑假要实习”“我能力不够,怕拖累你”。
他甚至尝试过跨学院组队——计算机学院或者物理学院的学生也许不会那么怕他。但结果一样:一听到“陆星衍”这个名字,对方就犹豫了。
“我知道你很强,”计算机学院的一个大四学生说,“但和你组队压力太大了。而且……听说你要求很高,一点错误都不能有。”
陆星衍当时想辩解:我不是不能容忍错误,我只是希望尽善尽美。但话到嘴边又咽了回去。解释有什么用?标签一旦贴上,就很难撕下。
现在是9月4日,距离截止日期还有六天。如果还找不到队友,他只能找教务老师帮忙强制分配——那会更尴尬。
他深吸一口气,推开办公室的门。
【下午3点20分】
教务老师王老师的办公桌前
“陆同学,你还没组队?”王老师扶了扶眼镜,看着电脑屏幕上的名单,“全班28个人,27个已经组好队了,就剩你了。”
“嗯,”陆星衍点头,“找不到队友。”
王老师叹了口气:“我知道你的情况。但规定就是规定,必须参赛。这样吧,我给你安排两个大二的学生,他们刚学完基础课程,正好需要锻炼。”
“大二?”陆星衍皱眉,“建模竞赛需要高级的数学和编程知识,大二可能……”
“所以才需要你带啊,”王老师笑了,“你是学院的重点培养对象,带带学弟也是应该的。而且,大二学生应该不会那么怕你——他们还不了解你的‘传奇’。”
最后一句话带点调侃,但陆星衍听出了无奈。
“好吧,”他说,“哪两位?”
“李明和张伟,”王老师敲了几下键盘,“都是大二数学系的,成绩中等,但学习态度认真。我让他们下午来找你。”
“谢谢王老师。”
离开办公室时,陆星衍感到一种复杂的情绪:松了口气(至少解决了组队问题),但也有些沉重(要带两个完全陌生的大二学生)。
他想起高三那年,和沈清辞一起参加信息学竞赛。那时他们配合得多默契:他负责数学建模和算法设计,沈清辞负责编程实现和调试。他们会在白板前讨论几个小时,会为了一个最优解争论,会在深夜一起啃面包写代码。
沈清辞从不觉得他“太强”是压力。相反,沈清辞会说:“和你一起,我能学到更多。”
“但你会不会觉得我总是主导?”陆星衍曾经问过。
“不会啊,”沈清辞理所当然地说,“你本来就更擅长理论部分。我擅长实践部分。我们互补,不是竞争。”
互补。
这个词在陆星衍脑海里回响。和沈清辞在一起,他从来没有感到过“孤独的强大”。他们是一个整体,一加一大于二。
但现在,他要和两个完全陌生的大二学生组队。不是互补,是带领。
是独角戏。
【9月5日,周六上午10点】
华清大学第三教学楼,203教室
李明和张伟准时到了。两人都穿着简单的T恤牛仔裤,背着双肩包,看起来确实像大二学生——还有高中生的稚气未脱。
“陆学长好,”李明先开口,有点紧张,“我是李明,大二数学系三班。”
“我是张伟,同班,”张伟补充道,声音小一些。
“你们好,”陆星衍点头,“坐吧。”
他们围坐在一张课桌前。陆星衍拿出笔记本,打开,上面是他整理的建模竞赛资料:历年赛题分析、常用模型分类、论文写作模板。
“竞赛从9月11日到9月14日,三天时间,”他开始介绍,“第一天上午8点公布赛题,我们需要在72小时内完成建模、求解、验证和论文撰写。论文在14日晚上8点前提交。”
两个大二学生认真地听着,不时点头。
“我们提前一周组队,是为了熟悉彼此的工作方式和能力,”陆星衍继续说,“我想了解一下:你们学过哪些数学课程?编程能力怎么样?”
李明先说:“我学了数学分析、高等代数、概率论、常微分方程。编程会一点MATLAB和Python基础。”
张伟:“课程差不多,编程也是基础水平。我们大二才开始学编程,还没做过大项目。”
陆星衍心里一沉。基础水平。那意味着他需要承担大部分的编程工作。
“建模经验呢?”
两人都摇头。
陆星衍沉默了几秒,然后说:“好吧。那这一周,我们做些准备。我给你们一些经典的建模案例,你们先看看。另外,我建议你们加强一下MATLAB和Python的练习,特别是数据处理和可视化部分。”
“好的,”李明说,“学长,你参加过这个竞赛吗?”
“去年参加了,拿了全国一等奖,”陆星衍简单地说。
两个学生的眼睛都亮了:“一等奖!太厉害了!”
“但那是团队合作的结果,”陆星衍说,虽然实际上,去年的团队里他也是主力,“今年我们也要努力。”
接下来的一个小时,陆星衍给他们讲解建模的基本流程:问题分析、模型假设、建立模型、求解模型、结果分析、模型检验。他讲得很清晰,逻辑严密,但语速很快——这是他思考时的自然节奏。
李明的笔记记得很认真,但不时需要停下来思考。张伟则显得有些吃力,眉头紧锁。
“学长,这里我没太听懂,”张伟指着笔记本,“为什么这个假设是必要的?”
陆星衍重新解释了一遍,放慢了速度。
但他心里知道:这只是开始。真正的竞赛开始后,压力会更大,时间会更紧,他们之间的差距会更明显。
讲解结束后,两个学生离开了。陆星衍一个人留在教室里,看着窗外华清的校园。
他想,如果沈清辞在这里,会是什么样?
沈清辞会立刻理解他的思路,会提出自己的见解,会和他讨论各种可能性,会在白板上画示意图,会用那种充满活力的声音说:“我有个想法……”
但沈清辞不在这里。
他在斯坦福。在另一个国家。在另一个生活里。
陆星衍收拾东西,离开教室。
走廊里空荡荡的,只有他的脚步声在回响。
【9月11日,周五上午8点】
竞赛开始
赛题准时公布:关于城市交通拥堵的预测与优化。
具体来说:给定一个城市的交通网络数据(道路、交叉口、车流量历史数据),要求建立数学模型预测未来一周的拥堵情况,并提出优化建议(如调整信号灯配时、建议绕行路线等)。
陆星衍看完题目,立刻开始分析。李明和张伟坐在他旁边,紧张地看着他。
“我们需要做几件事,”陆星衍在白板上写,“第一,数据处理和特征提取。第二,建立预测模型。第三,设计优化算法。第四,验证和可视化。”
他分配任务:“李明,你负责数据预处理,用Python清洗数据,提取特征。张伟,你查文献,找类似的交通预测模型,整理一个综述。我先开始设计整体框架。”
“好的,”李明打开电脑,开始工作。
张伟则开始搜索文献。
陆星衍则进入深度思考状态。他在草稿纸上画图:交通网络可以抽象为图,节点是交叉口,边是道路。车流量是边上的权重。预测问题可以转化为时间序列预测,但需要考虑网络的拓扑结构……
他想到了一个方法:图神经网络。将交通网络视为图,利用图卷积神经网络捕捉空间依赖关系,再结合长短时记忆网络(LSTM)处理时间依赖关系。
但这需要大量的编程实现。而且图神经网络在2015年还是比较前沿的方法,实现起来不简单。
他看了一眼李明。那个大二学生正在努力地写Python代码,但进度很慢,而且不时遇到bug。
陆星衍走过去:“遇到什么问题了?”
“这个数据格式……我不太会处理,”李明指着屏幕,“时间戳需要转换,但我总是出错。”