闲谈

建模手 & 代码手

对数学建模竞赛的一些看法,仅供参考。

在大一的时候抱着玩一玩的态度接触了数学建模比赛,与两位志同道合的朋友组成了队伍,开启了不到一年的数模之旅,这篇博客用于记录这近一年来的比赛经验以及学习方法,并在 AI 时代下给出数学建模比赛的新建议,希望能帮助到现在的、未来的可能参赛的,志同道合的同学以及朋友们。

在此感谢一直陪伴我的两名队友!

ZJUT 数模时间线

一般数模竞赛分为两个备赛阶段,一个是下半年比赛备赛(数模美赛),一个是上半年备赛(数模国赛)。

ZJUT 的数模培训也分为两个阶段,一个是下半年的十月前后报名,在学期中培训,寒假期间参加二月前后的美国大学生数学建模竞赛;一个是上半年五月,经历校赛后报名的暑期培训(周期为一个暑假),后参加全国大学生数学建模竞赛。

关于美赛时间线

经历约 6 次的真题训练后,参加来年二月前后的数学建模美赛。

除此之外,学生亦可以选取其余商业赛事进行 “美赛” 的练手,按顺序依次是 MathorCup、大湾杯、数维杯、亚太杯、认证杯、未来杯和华数杯,大约半个月一场的频率。

考虑到题目质量、比赛认可度、获奖率以及赛事含金量,如果需要练手,推荐打一下 MathorCup、亚太杯,认证杯(小美赛)以及华数杯。

当然,6 次题目培训的作用其实较为显著,对于 ZJUT 学生而言,拿其他商业赛练手不是刚需,因为这 6 次培训题目偶尔也会出现这些商业赛的真题。

6 次训练的时间安排是,每周做一套题,然后安排一天宣讲。 后选取平均分在 5 分以上(满分十分),并且排名靠前的同学(一般来讲平均分达到 5 分就可以同时满足这个条件)参加美赛。

关于国赛时间线

国赛在每年的 9 月份举行, 备赛周期为来年开学一直到暑期结束,相比下半年来讲,国赛的商业赛更多一点。

常见的商业赛就是长三角数学建模竞赛、电工杯、统计建模大赛、深圳杯、华数杯等。

对于 ZJUT 学生来讲,一般是在春季开学后 1 个月左右,选取心仪的队友组建自己的数模队伍, 在劳动节前后参加 ZJUT 校赛, 只有校赛提交作品才可以报名暑期的国赛培训,必须经过国赛培训才可以参加全国大学生数学建模竞赛。

当然,考虑到报名人员以没有经验、未经过训练的新生居多,报名暑期培训不要求校赛获奖(但必须参加并提交作品)。

相比美赛来讲,暑期培训的训练强度更高,培训一般是 7 题,分为 3 个阶段。

第一阶段就是偏向于筛选的阶段, 为前两题目, 给的时间也充裕一点, 有一个星期的时间,这一部分用于筛选掉大部分不适合的人。因为很多队伍可能只是对数模好奇或者毅力不足,亦或是队伍凝聚力不强,前两道题目就出现队伍分崩离析,也是退出最多的人。

经历第一阶段后,就是高强度的第二阶段了,差不多就是 4 天 3 夜一套题,然后宣讲休息一天,立马进入下一题的节奏。

最后就是第三阶段,这时候差不多已经做完了题目,然后按照 总分 进行国赛队伍的选取,选取上的会进入第三阶段,每个队伍分配导师,按照导师要求或者自己的安排,进行自由训练。这是整个暑期培训我认为最重要,也是最快提升的一个阶段,关于具体的,后文会讲到。

然后经历完三个阶段之后,在 9 月初,代表学校参加全国大学生数学建模竞赛。

个人参赛建议

先介绍一下 ZJUT 美赛培训的特殊性:完整参与过数学建模暑期培训,或者在数学建模国赛(美赛)获取过对应奖项的学生构成的队伍,可以减少美赛培训的训练强度(减少做题数)。

其次介绍一点,美赛的强度以及获奖率都高于国赛,培训强度也高于国赛,而且由于美赛划分为世界级赛事的原因,对应的竞赛奖金也高于国赛。

考虑到个人学习历程以及 ZJUT 美赛培训安排、获奖难度,对于 ZJUT 学生来讲,分为四种参赛建议。

第一种 美赛——国赛——美赛,即从 10 月开始跟学校参与美赛培训,积累经验,然后参加校赛,更好的准备国赛,然后打完国赛后参加来年的美赛。

第二种 国赛——美赛——美赛,即从 5 月左右的校赛开始,参加一次国赛,争取拿到奖后参加两次美赛。

第三种 国赛——美赛,即只参加一轮,争取一轮分别拿到心仪的两个比赛的奖项,首战即决战。

第四种 国赛——美赛——国赛,考虑到国赛的含金量明显高于美赛,而且获国奖难度较大,参与两次国赛,冲击国奖。

当然具体安排因人而异,需要整个队伍商量,个人认为在 ZJUT 美赛打两次是性价比比较高的,因为有训练经历会明显降低培训强度(2 题即可),而且获奖率较高,美赛也在 ZJUT 的竞赛目录里,对于综测保研加分有一定作用,而且奖金也是国赛的 1.5 倍。

主要是国赛暑期培训,会耽误一个暑假,这期间可以选择休息一暑假,做科研或者转投其余竞赛,性价比较低。其次就是国赛培训太过劳累,太累了太累了太累了!

关于队伍组建

关于数模队伍的组成,传统来讲是 建模手——论文手——代码手 的三角色分工,由于美赛对于作图的高要求,也出现了 双论文手 的分工。

但是目前 AI 时代来讲,结合个人经历,不建议进行这种分工。一方面是主流大模型已经较强,国外常见的有ChatGPT、Claude、Gemini,国内的Deepseek、Qwen等已经完全可以代替代码手这一角色,而且代码手需要与建模手进行高度的交流,所以强烈建议建模手与代码手合为一个人,即讲解题有一个人负责,减少意见交流产生的错误,比如代码手看不懂模型,建模手不懂代码可实现难度等。

所以建议分工分为 解题——写作 的分工,自认为建模与代码分离是很影响效率、并且很影响队伍感情的一件事。

其次,作为一名队友,寻找一位队友,最重要的不是能力高低,而是靠谱。

数模是很吃感情的一个比赛,在培训阶段见证了太多队伍分崩离析、好友吵架闹掰等,数模最重要的不是强不强,而是能不能坚持下去,三个人应该是携手协力的,过度的强化分工只会让彼此疏离。这也是我不建议把分工划分太细的原因,可以有解题、写作的主要分工,但是其余人空闲之时,也可以插空帮忙,比如前期论文手空闲的时候可以帮建模手找资料、找文献,后期论文手最忙碌的收尾阶段,其余人也可以过来帮忙写论文,因为某些工作的门槛不高,过度的分工只会影响效率和感情。多沟通、多合作才是数学建模最重要的。

关于数模技能的学习

这是本博客的重点,关于我对数模需要的技能、能力的一些个人理解,仅供参考,希望能够帮到大家。

关于模型建立以及算法学习

数学建模竞赛,模型的建立是最重要的一点。按照题目可以将常见题目分为评价类、预测类、优化类、决策类以及机理分析类,接下来我将分别对这些题目进行介绍,并对其中所需要学习的技能和知识进行讲解。

评价类

给定一个事物,一个体系,你需要对其各种指标进行量化分析,转化为一个综合得分。

通俗的讲就是 多个指标——权重——综合计算——分数排名

比如你要评价哪个城市最宜居,需要考虑什么指标(环境、人均GDP、生活质量)等等,然后对每个指标划分权重(GDP最重要、质量很重要、别的无所谓巴拉巴拉)等等,然后使用算法算出一个综合加权后的分数,进行排名。

重点就是,要确定哪些指标?权重划分依据?什么逻辑进行综合计算?等等。简而言之就是你需要建立自己的评价标准,对一个事物打分,判断它好不好,有多好。

按照权重划分和计算逻辑的不同,评价类问题也有着不同的方法,常见的有TOPSIS、熵权法、PCA、模糊综合评价,主观加权等等。每种方法各有优劣,一般来讲目前常用的是TOPSIS+熵权法,当然这种也渐渐用烂了。不过评价类问题一般不会单独出,只是一问,甚至一问中的一小问,也是最简单、最基础的一类问题。具体方法大家自行学习,这里不展开教学了。

目前这类问题最经典的也是最综合的就是国赛2012A题,详见下图,这也是评价类最综合的一个集大成问题了,自此之后再也没有单独出过一个大评价类问题了。有兴趣的可以看一下下图。

预测类

这个比较好懂,预测类,简单来讲就是,根据已有数据建立模型,预测未来数据。

比如给你一个城市前面几年的人口,让你预测未来 5 年内的人口。这就是一道预测题。

这类题目我认为是数模中最重要、也是贯穿数模所有赛题的一类问题,关键在于其方法多样、变化多、可操作性极强。

重点就是选取一种函数,去拟合,然后通过均值误差等指标去判断这个拟合的好坏,然后对未来进行预测。由于其涉及到了拟合,所以目前来看,引入了很多机器学习的方法。

常见的方法有回归分析(即多项式拟合)、时间序列模型、灰色预测、指数模型、机器学习等。

关于回归分析,这是最基础也是最常见的方法,理论上你可以用超高阶的多项式拟合出任意你想要的函数,缺点是较为基础、简单。所以数模比赛中常见的是用各种各样的时间序列预测模型,相对回归分析较为高级,更为专业。

不建议使用灰色预测,原因是对于大样本和剧烈波动的处理较差,其次是美赛不喜欢这种模型。

关于机器学习和神经网络等,个人不建议使用。不得不承认机器学习在处理强非线性以及大数据量的预测问题表现较为突出,但是由于数模竞赛更强调模型的过程,机器学习、神经网络的内部更多的是黑盒的、不可观测的,而且原理较难写明,赛事评委一般不喜欢这种黑盒类的算法,所以建议不到万不得已不使用这种方法,以回归分析和时间序列模型为主。

常见的预测类问题解题流程就是:

数据分析——模型选择——参数估计——模型检验——误差分析

更具体地就是,画一下趋势图,看看是线性的、还是周期的、还是指数增长的或是平滑的。如果样本少就选择灰色预测,跟时间有关就选择时间序列预测、非线性很强就选择神经网络等等。

这里着重介绍一下参数估计,不管是美赛还是国赛,对于参数估计都是很看重的。

比如最简单的,回归分析:$y = \beta x + \alpha$,这里的 $\beta$、 $\alpha$ 根据什么原理确定。

当然这只是给了一个最简单的例子,通过最小二乘法就能计算出参数值。实际上如果涉及较大的预测类,可能需要考虑的参数很多,回归方程或者其他预测函数也会较为复杂,涉及到的参数较多。参数的选取直接影响预测结果和误差,常见的方法有最小二乘法、极大似然估计以及梯度下降。涉及到一些专业性较强的题目,也可以选择寻找参考文献中的参数值直接使用,或者学习其中的参数值估计方法。

你当然可以直接人为定义参数值是多少,但这就没有任何依据了,所以参数值的选取和确定也是模型好坏评判的一个重要依据。

然后就是通过各种误差指标(残差、$R^2$、$MSE$)等对模型进行检验,这里不做赘述。

最后就是给出预测结果,置信区间,分析分析误差来源等。

在这里对灵敏度分析做一下介绍。先说一下什么是灵敏度分析?就是模型参数或输入发生小变化时,预测结果变化有多大?

比如我改一下 $\beta$、 $\alpha$ 的值,结果会发生多大的波动。

常见的方法有参数扰动法、残差分析、蒙特卡洛模拟等等。美赛和国赛C题一般对于灵敏度分析要求较高,大家可以自行学习。

这里给出一个优秀的灵敏度分析,来源于美赛2006782,大家感兴趣可以自行学习。

优化类

优化也是一个大类,目前来讲,优化类问题可以出现在美赛、国赛的任意一道题目中。

什么是优化类,简单来讲,就是在一定约束条件下,使目标函数达到最优(最大或最小)。

比如,求最大利润、最小成本、最短路径、资源分配最优,选址最小花费等等,某种意义上来讲,进行方案确定求出最优的问题都可以叫做优化类。这也是涉及模型、算法最多的地方。

按照传统划分,可以分为规划类、多目标优化以及启发类算法。

常见算法就是线性规划、整数规划、非线性规划和动态规划。因为很多时候我们的目标函数较为复杂,很难是线性的,所以规划一般以整数规划为主。非线性规划的难度较大、动态规划复杂度又较高,所以通常以整数规划或者混合整数规划最为常见,为降低复杂度引入策略、贪心等。

多目标优化就是目标函数不止一个,解决方法一般是使用熵权法等划分权重,然后化成单目标问题,当然也有其余高级方法,大家可以自行学习。

不过目前大多数优化问题的非凸性较强、而且几乎很难遇到线性的优化题了,再加上整数规划复杂度较高,动态规划应用场景少见等问题,启发式算法也渐渐进入大众眼中。

目前国赛、美赛已经被戏称为动物园合集了,原因就是出现了各种启发式算法,这里介绍一下启发式算法:

用经验、直觉或某种规则,引导问题更快找到一个“比较好”的解,而不是保证找到“最优解”。

比如你通过将鲸鱼、狼群的习性写成一种算法,去求解,就是启发式。这种方式不保证结果最优,但是会保证结果尽可能高质量。

比如给你一个100城市的旅行商TSP问题,使用传统方法时间复杂度会炸裂,算到地球毁灭都算不完,这就需要启发式算法,可以在短时间求出一个质量较高的结果,应用于较大规模、较复杂的问题之中。

实际上,目前数模赛题的优化类问题普遍较为复杂,求出最优解只是理想状况(实际很难),所以一般给出的结果范围也较大,只要在范围内就算正确答案。启发式算法有很大的应用场景。最常用的四大启发式算法就是:遗传算法(GA)、粒子群算法(PSO)、模拟退火(SA)和蚁群算法(ACO),当然随着近些年机构和各种论文、AI爆火,也出现了狼群算法、梦境优化算法、甚至中国穿山甲算法等各种神秘的启发式算法,所以也被戏称为“数模动物园”。

目前启发式算法的最大问题就是,启发式算法一般基于随机数实现,策略制定较为随机,难以解释,其根本是个黑盒,一般非必要不使用启发式算法。

但是,求出来答案才有资格说话,如果实在难以找到对应的参考论文或者想出一个很好的模型,启发式算法求出结果也是可取的,因为启发式算法的结果质量还是比较高的。而且相比于传统贪心,它也显得更为“优秀高大上”。

一般优化类问题步骤就是:

决策变量——目标函数——约束条件——求解方法——结果分析

实际上就是,这个目标函数由什么构成,比如 $y = x_1 + x_2 + x_3$, $y$ 就是目标函数,$x_i$ 就是决策变量,决策变量受到约束条件限制,你需要在保证每个决策变量在约束条件内,求出目标函数的最优解。求解方法就是八仙过海,各显神通了,启发式、规划算法等,然后对结果进行分析。

优化类题目较多,不给出具体问题,大家随便找一找肯定都能找到,比如最新的国赛2024C、国赛2025A、美赛2026B等等,优化类问题基本已经遍布数模竞赛,是必出的问题了,也是最大的重点。

决策类

决策类一般不是一个独立的问题,多与前面几个问题结合,该问题大体就是,在不确定或者多目标、某条件下,应该选什么方案?

强调“选择的策略”,典型就是方案的选取。

比赛中常见的组合就是:

预测+决策:先进行预测,再在已有预测结果下进行行为。

评价+决策:先评价多个事物优劣,再对事物进行选择。

优化+决策:什么方案尽可能优,选取什么方案,或者在该方案上再选取。

一般常用的方法就是决策树、贝叶斯,当然最优秀的就是博弈论,这也是最难的。几乎所有情况都是贝叶斯。

机理分析类

什么是机理分析?

从事物内部运行规律出发,用数学公式刻画系统本身。

偏向于物理原理。它的可解释性极强,而且不是很依赖数据。

可以理解为,这就是在解物理题。

一般常见于国赛A题、美赛A题。

最常见的就是微分方程模型,大体分为常微分方程模型(国赛2022A)、偏微分方程(国赛2020A、美赛2026A),当然也有其余,比如运动方程(国赛2024A、国赛2025A),差分方程(国赛2019A)、离散化处理(国赛2023A)。

但实际上除了常微分和偏微分之外,不做其余具体分析,因为微分方程大多数是连续的,但是模型应用求解过程我们很难对连续的方程进行刻画,所以一般需要对时间进行离散化。

以国赛2024A板凳龙为例,我们建立运动学方程之后,这是一个连续的,每个时间板凳龙的运动状态都在变,所以为了描述模型和方程结果,我们需要对时间离散化,选取单位时间 $\Delta t = 0.1s$,当然也可以选取其他秒数为单位时间,每一个单位时间递推的求一次状态。当然单位时间越短,越接近连续方程,不过时间复杂度和运算时间会显著提高,单位时间长了,代码效率较高,但是会导致结果精度较低(甚至错过正确结果)等。

所以我认为这一类问题的关键就是学会离散化分析问题以及物理方程构建。

这里给出国赛2024_052A的部分运动学方程:

美赛2026A的物理电池方程:

一般这类问题对于算法的要求不高,常见的就是二分、三分,变步长搜索,甚至直接暴力搜索,或者递推求解就可以得到结果,主要难点在于模型的建立。

学习途径及个人建议

个人认为,数模竞赛中B、C题以优化、评价、预测、决策结合居多,但是目前来看这类题目创新要求较高,因为 AI 以及视频博主的缘故,这类题目同质化问题严重,吃经验。但是由于A题的门槛较高,所以获奖可能更大。相比B、C,A题确实难度较大,但是这也是最不吃数模经验的题目,它比较吃数学,是的,这很数学了。所以建议大家可以多多尝试A题,A题结果算对了一般就是国奖起步了。

那要是没算对怎么办?那就不要说了。总而言之,A题适合要冲击大奖,而且不希望深入学习数模套路化和经验的同学们。更像是解高中、大学物理题,更符合大家的思维,其余数学建模题目还是太吃专业化知识了,竞争也较大。

对于知识的学习,这里推荐中国大学生在线的讲座,吴孟达教授和蔡志杰教授的课程在B站也有,虽然可能看着比较“土”,但是质量还是较高的。其余商业机构UP主推荐BZD数模社和大师兄的知识库,有着体系化的数模知识讲解。

对于解题来讲,建议大家多多跟着数模优秀论文来,也可以跟着中国大学生在线的真题讲评来,跟着优秀论文复现一遍,可以学到这类题目的很多套路、流程。是的,数模其实是套路化的,要学一些基本的东西就需要跟着优秀论文来,不做真题,不看优秀论文就打不好数模。这也是数模培训第三阶段最重要的原因所在。

关于模型代码

传统代码手的工作其实也不是写代码,更多的就是写一下数据读入,然后套一下不同算法、模型的板子上去,然后改改bug就行了。

是的,虽然模型、算法很难,但是很多算法代码都有对应的包,哪怕没有,很多机构up也已经准备好了代码包,大多是拿来即用。所以目前代码手不是一个重要的职位。

加上现在 AI 时代,AI 已经可以解决 95% 的题目的代码工作了,这个数不会多,只会少。所以代码手更加的无关紧要,推荐大家数模比赛尝试建模——代码二合一,省出一个人并且训练 AI 调试能力。

如果需要学习,主流是Python + Matlab,但实际上仅Python就足够了,因为它的包太强大了。

不过明显时间上来讲,还是直接用代码包或者 AI 的性价比更高一点。

关于论文写作

论文主要分为写作和绘画两部分。

论文一般是 Latex 或者 Word 二选一,这里建议大家使用 Latex,原因是排版确实好看,其次是基于代码实现,AI 工具修改方便,毕竟让 AI 调代码,可比让它操作 Word 容易多了。

这里建议是解题人使用飞书,解题后大体同步一下,比如流程、公式写好,搭出一个框架,然后论文手在上面进行填充,防止解题——论文沟通困难两边不互通的问题发生。

其次就是美赛,美赛的图是一大重点,这里建议大家使用 PPT 进行绘图,原生的 PPT 已经足够画出优美的图片了,这里推荐几个视频,大家可以前往进行绘图专题学习:

西电数模:【【西电MSC】数模美赛冠名O奖学长教你论文插图制作】https://www.bilibili.com/video/BV1c5411W7U9?vd_source=335bba18abd706a3ba6ff60bc0894481

数模加油站:【【数模美赛必看】数学建模美赛绘图专题,手把手教你复现O奖论文!!!!】https://www.bilibili.com/video/BV1Ae411H75b?vd_source=335bba18abd706a3ba6ff60bc0894481

一个好的图片会是一篇论文的灵魂所在,不得不承认 Gemini 在科研绘图表现出色,但是同质化严重仍是 AI 创作的一大问题,哪怕在 AI 时代,保持一个绘图技巧也是很有必要的。

这里展示美赛培训期间一部分图片成果:

其余方面,论文一定要美观,最常见的排版优美、饱满、视觉上的舒服,图片跨页不要留白等等,需要考验论文手的能力,要尽量追求完美。因为数模提交重点就是论文,这也是直接呈现评委的部分,没有好的论文,哪怕建模与结果再优秀,也很难取得重大成果。

随着 Agent Skills 的发展,也渐渐出现了论文写作的 SKILL,相信未来不久,针对数模的论文写作也会出现SKILL,会进一步解放人力需求。

关于比赛与培训

国赛和美赛差异较大,包括但不限于:美赛看模型创新、吃图,在乎灵敏度分析和参数来源;国赛看结果、较为传统,论文写作呈现传统,不像美赛那样花里胡哨。

正式比赛的时间是很短的,大家尽量在第一天就确立题目,如果发现确实做不出来,可以考虑尽早换题。

在比赛期间、也包括日常学习集训,不建议大家采取网上、b站up主的视频的方法和攻略,原因是质量良莠不齐,多是纯 AI 建模,会对学生的学习和解题产生极大误导,有能力的可以买一本司守奎老师的数学建模黄皮书学习。

其次,在培训期间,我是不希望大家寄希望于培训带来的能力的提升,因为某种意义上,数模培训更多的是写作培训,这对于论文八股和结构的要求更高,大部分不会特别看重模型以及结果,所以对于建模代码来讲,第三阶段尤为重要,自己找真题、找优秀论文复现,模仿,这是进步最快的。数模培训对于建模能力的培养不是很大。

模仿是数模学习的第一原则,在学习阶段,一定要以模仿为主,有时候不去模仿,很难真正学到东西,很多时候大家会面对不知道要干什么、不知道该怎么干的困扰,无所事事,所以鼓励大家去复现优秀论文,这带来的学习收益是巨大的。

写在最后

不得不承认,AI 时代下数模呈现出新的态势,某种意义上,数模已经不需要代码手了,更严重的说,数模马上就不需要人了。AI 带来数模水平的水涨船高,这也使得竞争进一步加大,为将来的数模人提出更高的要求。AI 的不断发展也使得数模的学习、解题、竞赛产生了翻天覆地的变化,大家要掌握AI 带来的便利,抓住机遇,跟上数模新时代的发展。

再次感谢参与数模以来两位队友不离不弃的陪伴。祝愿大家能够取得心仪的成绩。