下一章 上一章 目录 设置
144、第144章:数学建模大赛:陆星衍的独角戏
【20 ...
-
【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。
陆星衍走过去:“遇到什么问题了?”
“这个数据格式……我不太会处理,”李明指着屏幕,“时间戳需要转换,但我总是出错。”
陆星衍看了看代码,指出几个错误,然后说:“我写一个函数给你,你调用就行。”
他接过键盘,快速写了一个数据处理函数,不到十分钟。然后还给李明:“用这个。”
“谢谢学长,”李明有些羞愧,“我太慢了。”
“刚开始都这样,”陆星衍说,但心里知道:时间很宝贵,三天时间,他们浪费不起。
第一天结束时,陆星衍完成了整体框架设计和部分核心算法。李明完成了数据预处理。张伟整理了一篇文献综述,但质量一般。
晚上十点,他们离开教室。李明和张伟看起来很疲惫。
“学长,你……不累吗?”张伟问,“我看你一直没停。”
“习惯了,”陆星衍说,“明天继续。”
但他确实累了。不只是身体上,还有心理上。一个人思考,一个人设计,一个人编程,还要指导两个跟不上节奏的队友。
这不像团队合作,更像是一个老师在带两个学生。
【9月12日,周六,第二天】
问题出现了。
陆星衍的图神经网络模型需要大量的矩阵运算和梯度计算。他写出了数学公式,但编程实现时遇到了困难——MATLAB对图神经网络的支持不够好,需要自己实现很多底层操作。
他从早上八点写到下午两点,写了五百多行代码,但运行时报错:维度不匹配。
他调试了一个小时,没找到问题。汗水从额头上流下来。
李明和张伟在旁边帮不上忙,只能干着急。
“学长,要不要休息一下?”李明小心地问。
“不用,”陆星衍说,眼睛盯着屏幕。
他想起了沈清辞。如果沈清辞在这里,会怎么做?沈清辞是编程高手,擅长调试,总能在复杂的代码中找到那个隐藏的bug。
“阿衍,你的数学公式太完美了,但代码世界不完美,”沈清辞曾经说,“需要留一些容错空间。”
“容错?”
“对。比如这里,你假设矩阵一定是可逆的,但如果遇到奇异矩阵呢?程序就会崩溃。需要加一个判断。”
陆星衍当时觉得这想法很实用主义,不够优雅。但现在,他明白了:现实世界就是不完美的,代码需要处理各种边界情况。
他重新检查代码,果然发现了一个假设:他假设邻接矩阵总是对称的,但实际数据中可能不是。他修改了代码,加上了对称化处理。
再次运行,错误消失了。
成功了。
李明和张伟都松了口气:“太好了!”
陆星衍却感到一种深深的孤独。解决问题带来的满足感,因为没有人能真正分享而打了折扣。
沈清辞会懂。沈清辞会知道他解决了什么问题,为什么会遇到那个错误,为什么那个修改有效。
但沈清辞不在。
【9月13日,周日,第三天】
提交前夜
论文撰写阶段。陆星衍负责主体部分:问题分析、模型建立、求解方法。李明负责数据描述和预处理部分。张伟负责文献综述和结果展示。
但陆星衍发现,李明和张伟写的内容质量不高,需要大量修改。他几乎重写了他们负责的部分。
晚上十点,论文初稿完成。陆星衍从头到尾检查了一遍,修改了语法错误,调整了逻辑结构,增加了几个关键的数学推导。
凌晨两点,论文定稿。
三个人都累瘫在椅子上。教室里的灯依然明亮,但窗外已经一片漆黑。
“终于……完成了,”李明揉着眼睛说。
“学长,你太厉害了,”张伟说,“三天时间,你做了这么多工作。我们……我们没帮上太多忙。”
陆星衍没说话。他不知道该说什么。安慰他们“你们也努力了”?但那不完全是事实。或者说“下次加油”?但可能没有下次了。
“学长,”李明突然问,“你这么强,为什么找不到固定队友?按理说,应该很多人想和你组队才对。”
陆星衍沉默了很久。
然后他说:“曾经有一个人,和我配合得很好。但他现在不在这里了。”
“他去哪了?”
“出国了。四年了。”
“那……你们还联系吗?”
陆星衍摇头:“没有。”
张伟小心翼翼地问:“是因为……距离太远?”
“不只是距离,”陆星衍说,声音很轻,“还有很多原因。”
他不想再多说。有些事,太私密,不适合和几乎陌生的人分享。
他打开论文的致谢部分。按照惯例,致谢要感谢指导老师、队友、提供帮助的人。
他写道:
“感谢华清大学数学科学学院的培养,感谢指导老师的建议。感谢队友李明和张伟同学的协助。”
然后,他加了一句:
“感谢曾经的搭档S.Q.C.,虽然无法并肩,但他的方法论和思维方式贯穿本研究。”
S.Q.C. 沈清辞。
只有他自己知道这三个字母代表谁。评审专家看到,可能会好奇,但不会深究。
这是他能做的唯一公开纪念。在学术论文的角落里,在没人注意的地方,留下一个痕迹。
证明那个人存在过,影响过他,依然在他的思维里。
李明看到了这行字:“S.Q.C.是谁?”
“一个很重要的人,”陆星衍简单地说,“好了,检查一下格式,准备提交。”
凌晨三点,论文提交成功。
竞赛结束了。
陆星衍一个人走在回宿舍的路上。华清的校园在深夜很安静,只有路灯和偶尔的虫鸣。
他想,此时此刻,沈清辞在做什么?在斯坦福的图书馆学习?在某个实验室做实验?还是……已经睡了?
他不知道。
但他知道,如果沈清辞看到这篇论文,看到致谢里的S.Q.C.,会知道那是他。
也许。
也许不知道。
但陆星衍写了。这就够了。
就像在黑暗中点燃一根火柴,虽然微弱,但至少是光。
至少证明:我还记得你。
你还在我心里。
在我的思维里。
在我的每一个数学建模里。
【后续】
两个月后,竞赛结果公布:陆星衍的队伍获得了全国特等奖——最高奖项。
评审意见里特别提到:“模型创新性强,结合了图神经网络和时空预测,实现完整,论文写作规范。”
但评审专家也有一句疑问:“致谢中提到的S.Q.C.是谁?对研究有何具体贡献?”
陆星衍没有回复。
他知道,有些解释不需要给外人。
有些记忆,只属于两个人。
即使那两个人,已经四年没说过话了。