AI时代如何在数学建模竞赛中取胜

描述

在数学建模类竞赛中,真正被考察的从来不是“谁更像数学天才”,而是——谁能将理性思维、算法工具与现实问题有机结合,在复杂实际问题中给出可落地的解决方案。

放眼全球,数学建模早已成为衡量学生综合能力的重要路径:既有影响力深远的美国大学生数学建模竞赛(MCM/ICM),也有规模最大、参与度最高的全国大学生数学建模竞赛(CUMCM),以及面向研究生群体的“华为杯”中国研究生数学建模竞赛。尽管各类赛事选题覆盖领域广阔,却共同指向同一个核心目标——培养运用数学建模思维解决复杂现实问题的能力。

进入 AI 时代,我们还需要培养数学建模能力么?回答是肯定的!

数学建模本身仍是解决复杂问题的核心素养,而科学和高效地运用 AI 工具辅助建模与问题求解也显得越来越重要!二者相辅相成将成为智能时代不可替代的核心竞争力。

查看:MATLAB 和 Simulink R2026a 推出全新 Agentic AI 驱动的工作流,增强工程化系统的设计与开发

那么,AI 时代如何在数学建模竞赛中取胜呢?本期「强强对话」,我们邀请到上海财经大学统计学专业在读博士生李佳浓同学,分享他在多次数学建模竞赛中的经验。他的研究方向涵盖随机过程、金融工程与固定收益领域,曾获得 2024 年“华为杯”中国研究生数学建模竞赛二等奖,并在 2025 年第六届全国研究生工业与经济金融大数据建模与计算大赛中斩获特等奖与 MATLAB 创新奖。

在这篇分享中,他将围绕竞赛策略、工程化建模思维,以及 AI 辅助开发实践,系统回顾自己数学建模类比赛的获奖经验。

大家好,我是来自上海财经大学的李佳浓。回顾几次参加数学建模类比赛的经历,我想从数学建模的通用经验、MATLAB 编程心得以及比赛题目复盘这三个角度,给大家分享一些我个人的体会。

一、拆解数模竞赛的制胜法宝

首先,我想先从选题判断、整体解题思路与论文写作三个方面,分享一些关于数学建模比赛本身的通用经验,希望能对正在或准备踏入数学建模竞赛的同学有所帮助。

从选题、建模到写作:搭建完整解题流程

数学建模竞赛通常要求参赛队伍在有限的时间内,将现实问题转化为数学问题并求解,最终形成一篇结构完整的比赛论文。这一过程,本质上是完成一次完整的闭环:

从现实问题出发 → 抽象为数学模型 → 计算与验证 → 回归现实解释与优化。

在选择比赛题目阶段,一个非常重要的原则是:优先选择自己最熟悉的领域。比赛时间往往只有一周甚至几天,不要盲目去选那些看起来很难、很高级的题目,而是要快速评估一下:在比赛时间内,凭我们现在的知识储备和编程水平,能不能把这道题完整地做出来。完整地做出一道题,远比挑战难题却半途而废要重要得多!

坚持「完成大于完美」的解题节奏

在解题过程中,我始终坚持一个理念:完成大于完美。很多初次参赛的同学,容易在第一问上花费大量时间构思“理想模型”,结果导致后续问题无暇顾及,无法提交完整的比赛论文。更科学的做法是:先快速跑通整个题目,确保每一问都有初步结果,搭建出完整的论文骨架,再回过头精修细节。

具体执行上,可以先快速了解题目的背景,确定涉及哪些数学建模知识领域,回顾或者突击一下相关的方法。把题目要求翻译成数学语言后,用最简单的模型或者方法先算出每一问的初步结果,确保论文骨架完整。等整个骨架搭好了,若时间还宽裕,再回过头来精修。比如考虑一下之前模型没顾及到的现实因素,或者换一个更合适的方法来提升精度。

这种“先有后优”的策略,不仅能降低比赛后期的心理压力,也能帮助我们更深入地理解出题人的整体逻辑,反过来帮助我们更好地完善模型。

以评委视角打磨论文表达

论文是评委了解我们全部工作的唯一窗口,所以比赛论文的文字表述至关重要,我们需要站在读者视角进行表达。我的经验是:

保持清晰的写作逻辑:学会换位思考,假设读者对这个领域不太熟悉,我的任务重点是讲清楚“现实问题如何被抽象为数学模型” 。不要堆砌废话,把符号定义、方程建立的过程和核心思路写明白就行。整篇文章要逻辑连贯,剖析题目需求,调用各种方法解题,写作上需要让正文内容层次分明。比如,在使用成熟算法时,不要直接套用。最好先介绍其原理及与题目的关联,再根据实际需求进行必要的改进或适配。这种‘量体裁衣’的做法,远比生搬硬套更有说服力。

采用倒序写作方式:优先写具体解题章节,再补充总述与每章流程图。也就是说,我会优先撰写 2.2、2.3 这样的具体解题章节,而不是一开始就纠结于第一章或 2.1 节这种提纲挈领的内容。因为只有当具体的工作都做完了,对整个问题的理解才最透彻,这时候再去写总结性的文字、绘制解题思路的流程图,逻辑才会更清晰、更科学。

提前熟悉排版工具:推荐使用 LaTeX 排版。尽量提前几个月熟悉一下 LaTeX。虽然LaTeX有门槛,刚开始学有难度,但只要提前准备好一个顺手的 LaTeX 模板,比赛时我们只需要往里填文字、公式和图片,不用像在 Word 里那样反复调整标题、行距和字体,能省下大量时间。当然,熟练使用 LaTeX 需要花费不少精力,但这部分时间花在平时,就能在比赛这种争分夺秒的时刻为你节约出宝贵的排版时间。建议大家在赛前就准备好一个自己顺手的LaTeX模板,或者找往年格式相近的LaTeX模板备用,在比赛的时候专注于数学建模论文本身。

统一图表风格:流程图、数据图、配色与字体应保持一致。表格建议统一使用三线表(如下图),看起来更规范。数学建模论文中的绘图一般分为三类:流程图、示意图和数值结果图(如直方图、折线图等)。无论是哪种图,全篇的风格都应该保持一致。比如第一章的总流程图和后面每一小节的具体流程图,配色风格和形状样式要统一。对于数据结果图,配色、字体大小、线条粗细也最好保持一致,避免出现这张图是 MATLAB 画的,那张图是 Excel 截屏的“大杂烩”现象。大家可以提前准备好一套 MATLAB 绘图代码,把图例位置、字体大小、坐标轴标签、颜色、线宽这些细节都设置好,形成自己风格的模板。这样在比赛时直接调用,画出来的图不仅速度快,而且风格统一。这些细节,往往会直接影响评委对论文专业度与严谨性的判断。

matlab

二、用 MATLAB 提升建模与工程效率

在日常科研与比赛中,我会同时使用 MATLAB、R 语言和 Python,在不同编程语言中各取所长。在数学建模竞赛中,MATLAB 给我带来的最大优势,在于其高度“可控”的交互式体验。

用过 Python 的同学可能知道,Python 脚本在执行完毕后,进程会自动退出并释放内存,导致其中的变量随之销毁。若需保留中间结果,通常需要手动输出、持久化存储,或改用 Jupyter Notebook、交互式模式(-i)来维持运行环境。但 MATLAB 不一样,脚本运行完,工作区里的变量都还在。在写代码调试的时候,我可以随时选中一个变量,按 F9 键看看它的值对不对,这种逐行运行、实时查看变量反馈的机制,在比赛的高强度环境下,极大地提升了排查 Bug 的效率。

在更复杂的任务中,我也积极将面向对象编程思想引入 MATLAB。通过类与模块化设计,使代码结构更清晰、可维护性更强。

很多同学用 MATLAB 可能习惯了一个脚本文件实现多个需求,对于简单任务完全可行,但面对复杂的量化回测系统,一个冗长的脚本会导致代码难以维护。所以我把系统里的不同功能抽象成了不同的“类”,比如专门管数据的类、策略判断的类、专门管账户记录的类。

学会用这种方式组织代码,能让你的程序结构特别清晰,功能扩展起来也很方便,这其实就是把写代码变成了一个系统工程。这里我推荐 MATLAB 图书计划中所包含的一本书——《MATLAB 面向对象编程:从入门到设计模式(第2版)》,它对我启发很大。

https://ww2.mathworks.cn/academia/books/matlab-object-oriented-programming-from-entry-to-design-patterns-xu-li.html

此外,MATLAB 的官方文档和工具箱非常强大,它内置了很多在数值计算、优化问题与工程领域已被工业界验证过的函数。很多时候不需要从头去写底层算法,直接调用现成的函数就行,既稳定又省时间,真正体现了‘站在巨人肩膀上’的高效开发。

当然,工具是为解决问题服务的,在日常科研中,我也不会只用一种语言,我会采用“取长补短”的方法。比如在数据预处理阶段,R 语言 tidyverse 包在清洗数据方面特别灵活快捷,我就先用 R 语言把数据整理好,再导入 MATLAB 进行计算求解。

另外,虽然这次回测系统代码是用 MATLAB 写的,但我在设计架构时借鉴了 Python 里一些知名开源金融量化回测框架的设计思路。这种取长补短、灵活配合的方式,最大化了各语言的优势,极大地提升了开发效率。

三、赛题复盘与金融量化回测系统的构建

在 2025 年第六届全国研究生工业与经济金融大数据建模与计算大赛中,我聚焦投资组合优化的问题,利用 MATLAB 构建了一套基于事件驱动的量化回测框架,获得了大赛的特等奖和MATLAB创新奖。

1. 明确整体解题框架与逻辑主线

这次比赛一共有三道题,我选择的A赛题要求根据历史数据确定每年不同资产的配置权重,实现收益最大化。

第一问要求基于均值—方差模型构建有效前沿,在年化波动率不超过 2% 的约束下,选取收益最高的组合作为未来基准(若无满足条件的点,则选取风险最小点)。

纵观整道题目,第一问相当于是确立了一个基准模型;第二问是对第一问模拟业绩的分析与改进;第三问则是考虑持仓债券在持有期不能减仓的现实情况(即引入“不可交易资产”)。这三问环环相扣,后两问均是在第一问基础上的拓展与完善。

为了更直观理解第一问中规则的底层逻辑,我用下面两张图拆解了两种场景:

左图对应低波动市场,当全局最小波动率≤2% 时,最优基准是有效前沿与 2% 风险约束线的交点(收益最高且满足风控);

右图对应高波动市场,当全局最小波动率超过 2% 时,就选择风险最小的点作为次优基准。这两张图把第一问中的要求转化成了清晰的示意图,也为后续建模提供了方向。

matlab

然后,通过以下步骤完成第一问中模型的构建与验证:

数据清洗:将各类数据的时间轴统一对齐;

参数估计:采用“滚动窗口”法,在每年年初回溯过去 10 年的历史数据,计算期望收益率和年化协方差矩阵;

模型求解(最核心步骤):将优化模型及约束条件转化为一个标准的二次规划问题,并调用 MATLAB 优化工具箱中的 fmincon 函数进行求解,从而得到每年各资产的最优配置权重;

策略回测:将交易规则写入框架,传入历史数据和基准权重向量进行模拟验证;

结果分析与可视化:在回测结束后,我还计算关键指标,并对收益率和风险的变化进行了可视化。直观的图表不仅能向评委展示方法的科学性,也是自查代码逻辑、验证结果合理性的有效手段。

2. 搭建一个基于事件驱动的量化回测框架

为了检验策略的实际效果,构建一个轻量的量化回测框架至关重要。虽然市面上存在如 Backtrader、Zipline、VectorBT 等成熟的开源框架,但它们的设计思路(如向量化与事件驱动)各异,且部分复现难度较大。

因此,我参考了 Backtrader 的核心设计思想,去繁就简,在 MATLAB 中搭建了一套基于事件驱动(Event-Driven)的轻量级量化回测系统。

该框架(如下图)的核心理念是模拟真实的时间流逝,包含以下三个核心模块:

数据推送模块(DataFeed):负责按时间顺序逐日推送行情数据,从机制上杜绝使用“未来数据”,避免前视偏差。

策略判断模块(Strategy):作为系统的决策中枢,依据最新推送的数据与预设模型判断调仓信号,并计算目标仓位。

账户管理模块(Account):作为系统的记录核心,不仅负责核算资金与持仓市值,还处理诸如“周度再平衡”、交易费用扣除等复杂的业务逻辑。

matlab

这种模拟真实的时间流逝的架构贴近真实交易流程。此外,回测框架还预留了风险控制、绩效评估与可视化等辅助模块的接口,确保了系统的可扩展性。

3. 借助 AI 加速工程化开发流程

在开发此类具有一定复杂度的工程项目时,首要任务是理清思路。我的经验是,先编写一份清晰的“技术说明书”,明确各个自定义函数及类(Class)的功能定义,再将具体的步骤与逻辑“翻译”为 MATLAB 代码。

其中,步骤与逻辑“翻译”为代码的环节完全可以利用 AI 大语言模型来加速,也就是将繁琐机械的代码编写任务交给 AI,从而减少在语法细节上所花的时间和精力,聚焦在程序框架的构思与设计,以及系统的调试上。

例如,在设计 Account 类时,我只需向 AI 大语言模型工具描述清楚“包含现金与持仓属性、需要更新每日市值的方法”等需求,即可快速获得基础脚本代码,随后在 MATLAB 交互式环境中进行逻辑验证与修改。

充分利用 AI 工具辅助编程已是大势所趋。在人人皆可用 AI 的时代,核心竞争力在于如何精准地与模型对话,以及如何调试好复杂的工程级程序。对于初学者而言,建议将绝大多数时间投入到前期的框架设计与后期的系统调试中,从而真正实现高效、精准的开发。

结语

回顾几次数学建模竞赛的经历,我愈发清晰地认识到:竞赛本身不是终点,而是一种极其高密度、贴近真实世界的问题训练方式。

在 AI 技术日益普及的今天,工具正在迅速拉平“写代码”的门槛,但如何拆解问题、设计合理模型、构建可验证、可扩展的系统,依然是无法被替代的核心能力。而这些,正是数学建模竞赛最值得长期投入的价值所在。

如果你正站在数学建模的起点,希望这篇分享能为你提供一些参考。不必一开始就追求完美,但一定要完成!当你真正跑通一次完整流程后,能力的成长,往往就在不经意间发生。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分