2026 数学建模国赛真正拉开差距的,不是谁背的算法多,而是谁能在有限时间内把“读题—数据处理—建模—求解—验证—写作”这条链路完整跑通。很多零基础队伍不是不努力,而是把大量时间花在背代码和收集模型库上,结果拿到题目后依旧不知道从哪个文件开始、哪些数据要清洗、模型和问题的对应关系是什么。所谓“系统速成课”,核心不是压缩学习过程,而是把所有备赛动作收敛到一条可执行的主线上:先想清楚国赛到底怎么评分,再准备工具、处理数据、掌握三大模型、拆解真题、合理使用 AI、最后写出一篇结构完整且结果可复现的论文。本文按这条主线展开,每个环节都会讲清楚做什么、为什么这样做、怎么验证结果,以及最容易在哪里踩坑。
1. 先搞清国赛比什么,再谈速成
1.1 竞赛机制:时间、选题和提交物
全国大学生数学建模竞赛的基本赛制是:本科组在规定时间内完成一道题目的建模、求解和论文写作,最终提交一篇完整论文。实际比赛节奏非常紧凑,从拿到赛题到提交论文通常只有几天时间,期间还要处理数据、调试代码、画图表、写摘要、反复改格式,留给“犹豫用哪个模型”的时间几乎没有。
题型通常分为 A、B、C 三类,各有侧重。
| 题型 | 常见特征 | 需要的核心能力 |
|---|---|---|
| A 题 | 偏物理机理,题目中常出现连续介质、优化设计、微分方程等 | 物理建模、数值求解、参数灵敏度分析 |
| B 题 | 偏运筹和决策,常见生产调度、路径规划、资源分配 | 整数规划、动态规划、启发式算法 |
| C 题 | 偏数据分析和统计决策,通常给大量表格和业务背景 | 数据清洗、统计建模、机器学习、可视化 |
提交物是一篇论文,绝大多数赛区还要求最后提交支撑材料,包括代码文件、结果表等。评委不会一行行跑你的代码,但论文里出现的每个关键数值、每张图表、每段推导,都要经得起推敲。这是速成路线最重要的前提:一切准备都要围绕“论文最终能自圆其说”展开。
1.2 评审看重的是完整闭环,不是单个模型
评审不会因为你用了某个高深模型就给高分,也不会因为你用了简单方法就否认你。真正决定奖项等级的,是模型是否贴合题目、假设是否交代清楚、求解过程是否合理、结果是否有验证、论文是否能让读者复现。
换句话说,一支队伍即使只用线性回归和层次分析法,只要把问题分析透彻,把每一步约束讲清楚,把误差来源和灵敏度分析做完整,也能拿到不错成绩。反过来,堆了神经网络、遗传算法、模糊综合评价,但数据和模型不匹配,论文里每个数字都查不到来源,反而会被扣分。
所以“速成”的思维要纠正:不是快速学完所有模型,而是快速掌握“题目—数据—模型—结果—论文”的闭环能力。后续所有章节都围绕这个闭环展开。
1.3 速成真正要练的核心链路
零基础备赛,最忌讳按教材目录系统学一遍数学建模理论。正确的做法是背住一条核心链路:
读题拆题 -> 数据清洗与特征构造 -> 模型选择与求解 -> 结果验证与图表 -> 论文写作。
这篇文章的章节顺序就是这条链路。你可以把每一章当成备赛清单中的一项,逐项完成后,至少能保证队伍遇到任何常规题目时不会惊慌。
2. 把工具链固定在可复现的版本上
2.1 必备软件和运行环境
数学建模比赛不需要安装“全家桶”式环境,但工具版本必须统一。队伍内部如果 Python、pandas、numpy 版本不一致,很可能出现“我电脑能跑,你电脑报错”的情况,赛时排查很浪费时间。
推荐准备如下工具:
| 用途 | 工具 | 说明 |
|---|---|---|
| 代码运行 | Python 3.10 或 3.11 | 选择稳定版本,避免过新版本带来的依赖兼容问题 |
| 数据计算 | pandas、numpy、scipy | 数据处理和科学计算基础库 |
| 机器学习 | scikit-learn | 分类、回归、聚类、预处理均有现成实现 |
| 数学求解 | scipy.optimize、pulp、ortools | 线性规划、整数规划、分配问题 |
| 可视化 | matplotlib、seaborn | 论文图表制作必用 |
| 文档写作 | Word 或 LaTeX | 根据队伍习惯选,论文提交通常要求 Word 或 PDF |
| 表格编辑 | Excel | 快速查看原始数据、做简单统计很有用 |
如果你之前没有配置过 Python 环境,推荐使用 conda 或 venv 创建独立环境,不要把比赛用的依赖装进系统 Python 中。这样即使环境坏了,重建一个环境也只需要几分钟。
2.2 用 conda 搭建可复现环境
假设已经安装了 Anaconda 或 Miniconda,可以用以下命令创建比赛环境:
conda create -n math_model python=3.11 -y conda activate math_model激活后安装核心依赖:
pip install numpy pandas scipy scikit-learn matplotlib seaborn需要求解规划问题时,再按需安装:
pip install pulp ortools这里要注意:不要一次性安装大量机器学习框架。xgboost、lightgbm、torch 等库虽然强大,但零基础队伍在比赛期间很少有机会把深度学习真正用进论文,反而会带来版本冲突和运行时间过长的风险。先把 pandas、numpy、scipy、scikit-learn 用熟,性价比远高于盲目安装重型库。
2.3 学习环境与比赛环境差异
学习阶段可以边查资料边装库,但比赛阶段不推荐频繁安装新依赖。建议提前把以下内容固定在环境里:
- pandas 的
read_excel、read_csv能正常读取题目附件。 - matplotlib 能显示中文,不会出现中文乱码。
- scipy.optimize 的
linprog、minimize能跑通官方文档上的最小示例。 - scikit-learn 的常用模型能完成一次训练和预测。
提前验证这些能力,比临时搜索安装命令可靠得多。比赛时网络也可能出现波动,到那时再安装大型依赖风险很高。
2.4 赛前环境检查清单
每个队员在自己电脑上执行以下命令,确认环境一致:
python --version pip list | grep -E "pandas|numpy|scipy|scikit-learn|matplotlib|seaborn"在 Python 中执行:
import pandas as pd import numpy as np import scipy import sklearn import matplotlib print(pd.__version__) print(np.__version__) print(scipy.__version__) print(sklearn.__version__)如果任何一行报错,先修复环境,不要等赛题发布后再处理。
3. 数据处理是翻车率最高的环节,必须按流程走
3.1 拿到数据先做四件事
很多队伍拿到题目附件后,第一反应是直接跑模型,这是最常见错误。数据中的缺失值、异常值、单位不一致、字段含义不明确,都会让模型输出一个“看起来正常但完全没有意义”的结果。
拿到数据后,先完成四件事:
- 用 Excel 或
pandas.read_csv打开原始文件,逐列检查字段含义。 - 用
info()查看列名、类型、缺失情况。 - 用
describe()查看数值列的均值、标准差、分位数。 - 用
head()和tail()查看数据头尾,判断是否存在汇总行、单位行等多余内容。
示例代码如下:
import pandas as pd df = pd.read_excel("附件.xlsx", sheet_name="Sheet1") print(df.columns.tolist()) print(df.info()) print(df.describe(include="all")) print(df.head(20)) print(df.tail(20))这段代码的价值在于,让你在写任何模型之前先理解数据规模、字段语义和明显问题。不要跳过这一步。
3.2 数据清洗:缺失值、重复值和异常值
常见数据问题有三种:缺失值、重复值、异常值。处理方式需要根据题目意义决定,不能机械套用。
| 问题 | 常见处理方式 | 适用场景 | 注意事项 |
|---|---|---|---|
| 缺失值 | 直接删除 | 缺失比例很低,记录本身不重要 | 删除前先确认不是整列缺失 |
| 缺失值 | 用均值或中位数填充 | 数值型变量且缺失比例较低 | 填充后要在论文中说明 |
| 缺失值 | 用前后值填充 | 时间序列数据 | 适合短期波动,不适合长时间断层 |
| 缺失值 | 单独标记为“缺失” | 分类变量 | 缺失本身可能携带信息 |
| 重复值 | 按主键去重 | 同一条记录重复出现 | 先判断是样本重复还是正常的同时间不同字段 |
| 异常值 | 用箱线图或分位数筛选 | 找出离群点 | 不要直接删,先判断是否录入错误或业务边界 |
处理缺失值示例:
df["销量"].fillna(df["销量"].median(), inplace=True) df["品类"].fillna("未知", inplace=True)处理日期和数值单位时要注意统一。比如时间列可能是字符串,需要解析为 datetime 类型:
df["日期"] = pd.to_datetime(df["日期"], format="%Y/%m/%d")如果同一列混用了“万”“亿”等单位,建议先统一换算成数值,否则后续计算会出现量级错误。
3.3 特征构造:让模型看到更有信息量的字段
原始数据字段往往不能直接作为模型输入。常见做法是构造以下特征:
- 时间特征:从日期中拆出年、月、日、星期、是否节假日。
- 滞后特征:用前一天、前一周的数值作为当前预测输入。
- 统计特征:按某个关键分组聚合出均值、标准差、最大值、最小值。
- 比值特征:两个字段相除,表示单位产出、增长率等。
- 编码特征:将分类字段转换为数值,如 one-hot 编码或 ordinal 编码。
示例,按“品类”分组统计均值,并合并回原表:
agg = df.groupby("品类")["销量"].transform("mean") df["品类销量均值"] = agg时间特征拆分:
df["月份"] = df["日期"].dt.month df["星期"] = df["日期"].dt.weekday df["是否周末"] = (df["星期"] >= 5).astype(int)特征构造的目的是让模型更容易找到数据规律,但不能滥用。每构造一个特征,都要能在论文中解释它的含义,否则评委很可能会质疑建模逻辑。
3.4 数据可视化:先看图,再建模
可视化不是论文的“装饰”,而是验证数据理解的重要手段。画图能帮你发现数据分布、趋势、异常点和相关性。
常用图形包括:
- 折线图:查看时间趋势和波动。
- 柱状图:对比不同类别的数值。
- 箱线图:查看字段的分布和离群点。
- 散点图:查看两个变量之间的关系。
- 热力图:查看多个数值字段之间的相关系数。
示例代码:
import matplotlib.pyplot as plt import seaborn as sns plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False df = df.set_index("日期") df["销量"].plot(figsize=(10, 4)) plt.title("销量时间趋势") plt.show() corr = df[["销量", "价格", "销售额"]].corr() sns.heatmap(corr, annot=True, cmap="coolwarm") plt.title("相关系数热力图") plt.show()中文显示是最容易忽略的细节。如果不设置plt.rcParams,图里的中文标签会变成方块,放到论文里完全不专业。建议在比赛前一天确认绘图中文显示已配置好。
3.5 数据结果必须能复现
数据处理过程不能只留在交互式笔记本中,也不建议只在自己电脑上操作。建议将清洗逻辑写成可重复执行的 Python 脚本,例如data_process.py,输入原始附件,输出清洗后的processed.csv。这样一旦发现处理规则有误,可以修改脚本后重新运行,而不是手动重做一遍。
可复现不仅是比赛要求,也是排查问题的基础。如果模型结果和预期不符,第一步应该回到数据处理脚本,检查是否有字段把字符当成数值、是否有日期解析错误、是否有列名在合并时丢失。
4. 三大模型:预测、评价、优化,每类只学一条主线
4.1 预测类模型:先从回归和时间序列入手
预测类题目通常要求根据历史数据预测未来值,例如销量预测、流量预测、价格预测。零基础队伍不需要面面俱到,掌握一条主线即可:先用线性回归或树模型建立基准,再根据数据特征决定是否需要引入时间序列方法。
回归模型的优势是解释性强,适合论文书写。scikit-learn 中的LinearRegression和RandomForestRegressor是常用起点。
from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import mean_squared_error, r2_score X = df[["月份", "星期", "价格", "滞后销量"]] y = df["销量"] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) model = RandomForestRegressor(n_estimators=200, random_state=42) model.fit(X_train, y_train) y_pred = model.predict(X_test) print("RMSE:", mean_squared_error(y_test, y_pred, squared=False)) print("R2:", r2_score(y_test, y_pred))时间序列场景可以尝试statsmodels中的简单方法,或使用AutoARIMA,但建议先检查数据是否平稳、是否存在明显季节趋势。不要把时间序列方法当成黑盒,至少要能解释“为什么这里需要处理季节性”。
4.2 评价类模型:AHP、熵权法、TOPSIS 组合使用
评价类题目通常要求对若干方案或对象综合打分、排序,例如区域发展评价、方案优选、风险评估。这类题目的核心不是算法本身有多复杂,而是指标体系和权重来源是否合理。
常用组合是:层次分析法(AHP)确定主观权重,熵权法确定客观权重,再通过 TOPSIS 计算接近度进行排序。
AHP 的重点是构造判断矩阵并做一致性检验:
import numpy as np def ahp_weights(matrix): eig_val, eig_vec = np.linalg.eig(matrix) max_eig = np.max(eig_val.real) idx = np.argmax(eig_val.real) vector = np.abs(eig_vec[:, idx].real) weights = vector / vector.sum() n = matrix.shape[0] ci = (max_eig - n) / (n - 1) return weights, ci熵权法示例:
def entropy_weights(data): # data 每行是一个对象,每列是指标,已经正向化处理 p = data / data.sum(axis=0, keepdims=True) p = np.where(p == 0, 1e-10, p) ent = -np.sum(p * np.log(p), axis=0) / np.log(data.shape[0]) weights = (1 - ent) / np.sum(1 - ent) return weights这类模型在论文中要写清楚:指标如何选择、数据如何标准化、权重从哪来、最后排序结果是否合理。缺乏其中任何一环,都会被评委质疑模型只是“套公式”。
4.3 优化类模型:先写线性规划,再考虑启发式
优化类题目通常有明确目标函数和约束条件,例如成本最小化、利润最大化、资源分配、路径规划。零基础队伍首先要会的是用 scipy.optimize 或 pulp 求解线性规划和整数规划。
pulp 写整数规划的示例:
import pulp model = pulp.LpProblem("ProductionPlan", pulp.LpMaximize) x1 = pulp.LpVariable("x1", lowBound=0, cat="Integer") x2 = pulp.LpVariable("x2", lowBound=0, cat="Integer") model += 40 * x1 + 30 * x2 model += 2 * x1 + 1 * x2 <= 100 model += 1 * x1 + 1 * x2 <= 80 status = model.solve() print(pulp.LpStatus[status]) print("x1 =", x1.value(), "x2 =", x2.value(), "利润 =", pulp.value(model.objective))这里要注意,变量类型声明为Integer才是整数规划;如果全部使用连续变量,得到的是线性规划松弛解,可能不满足实际业务“只能造整数件”的约束。
如果题目规模很大,用 scipy 或 pulp 无法在合理时间内求解,再考虑贪心和遗传算法等启发式方案。但启发式算法的结果一般不保证最优,论文中必须说明适用条件和参数设置。
4.4 模型选型速查表
| 题目特征 | 推荐模型 | 论文重点 |
|---|---|---|
| 根据历史数据预测连续值 | 线性回归、随机森林、时间序列 | 特征选择、误差评估、趋势分析 |
| 给多个方案排序或打分 | AHP + 熵权法 + TOPSIS | 指标体系、权重确定、敏感性分析 |
| 在约束下求最优方案 | 线性规划、整数规划 | 决策变量、目标函数、约束条件 |
| 分类预测,如是否违约 | 逻辑回归、决策树 | 数据均衡、评估指标选择 |
| 聚类分析,如客户分群 | KMeans | 聚类数选择、业务解释 |
不必追求“题目说预测就必须用神经网络”。绝大多数题目用解释性强的模型更容易写清楚、更容易拿分。
4.5 模型使用中的常见坑
模型不会报错不代表模型正确。以下几种现象是零基础队伍最常遇到的:
- 数据泄漏:用未来信息预测当前值,例如用整段时间的均值填充某个历史缺失点。
- 标准化时机错误:先切分数据再标准化,不能用全量数据计算均值和标准差,否则测试集信息混入训练过程。
- 结果无法解释:模型输出很好,但论文里写不出变量如何影响结果。
- 过度调参:比赛时间有限,调参收益远低于把论文写完整。
遇到模型结果异常时,优先检查数据清洗和特征构造,而不是立刻更换模型。模型本身很少是唯一问题。
5. 真题拆解:从读题到论文的完整流程
5.1 用“题目拆解法”把一道题变成任务列表
拿到题目后,不能直接开始写代码。标准动作先把题目逐句读一遍,把问题转化为可执行任务。
拆题步骤如下:
- 标记背景信息:哪些内容是赛题给出的现实背景,哪些才是真正要解决的问题。
- 画出要输出的结果:是“给出最优方案”“预测未来值”“排序”还是“分析原因”。
- 列出现有数据:每个字段代表什么、时间范围、粒度。
- 列出隐含约束:题目中是否有产能、预算、物理限制、政策限制。
- 拆成子问题:将一个大问题拆成 3 到 5 个子问题,每个子问题对应一个模型或一种分析。
拆完题后,队伍内三个人可以明确分工:一人负责数据处理,一人负责模型实现,一人负责论文框架。角色并不绝对固定,但每个角色必须清楚自己在整个流程中承担什么输出。
5.2 真题示例:以农作物种植策略题为例
近年国赛 C 题中有一道农作物种植策略题,题目给出多块地块、多种农作物,以及各作物在不同地块的产量、成本、销售价格等数据,要求设计种植方案。这道题非常典型,因为它兼具三类问题特征:
- 需要处理大量表格数据,属于数据密集型。
- 需要设置种植面积、轮作、销售约束等条件,属于优化类问题。
- 需要解释方案为什么可行,属于建模分析问题。
拿到这道题时,拆题结果大概长这样:
| 子问题 | 输出 | 对应工具 |
|---|---|---|
| 数据整理 | 地块、作物、收益明细表 | pandas、Excel |
| 单季种植优化 | 每块地种什么、种多少 | 线性规划或整数规划 |
| 多年轮作约束 | 多年连续方案 | 多期整数规划 |
| 敏感性分析 | 产量波动对方案的影响 | 参数扰动 + 重新求解 |
| 方案可视化 | 种植结构图、收益对比图 | matplotlib |
这个拆解过程比直接套模型重要得多。把子问题一个个完成,论文骨架也已经出来了。
5.3 拆题清单和时间分配
建议在比赛的第一个半天内完成拆题,并把时间按比例分配到五个环节:
- 拆题和数据处理:约 20%。
- 第一问模型建立和求解:约 25%。
- 第二问、第三问扩展:约 25%。
- 结果整理、图表制作、论文写作:约 30%。
切勿在第一个半天就写论文,也不要在最后两小时才补数据说明。论文应该随着每个子问题的完成同步推进。
6. AI 应用:让大模型当助手,不替你做判断
6.1 竞赛 AI 使用边界
国赛对 AI 工具的使用有明确规范:允许 AI 辅助写作、润色、翻译、代码调试、查阅资料,但必须主动披露使用情况,且不能直接让 AI 生成未经验证的模型、数据和结论。具体规范以赛前发布的官方通知为准。
这里必须强调:AI 输出的模型代码、公式、结论都需要人工核实。大模型可能在“看起来专业”的表述中给出错误结果,尤其是涉及具体数据计算时,不能直接复制。
6.2 AI 能辅助的四个场景
实际备赛和比赛过程中,AI 可以帮你在以下四个场景中提速:
- 数据处理脚本生成:告诉它列名和清洗需求,生成本地可运行的 pandas 脚本。
- 模型代码骨架生成:描述你的优化问题,让 AI 生成 pulp 或 scipy 版本代码,再由队员检查修改。
- 论文润色和语言整理:把生硬的表达改成更学术化的说法。
- 排查报错:把报错信息和相关代码片段输入给 AI,让它分析可能原因。
这四个场景的共同特点是:AI 负责“生成初稿”,你负责“判断、验证和修正”。
6.3 提示词模板
给 AI 的提示词越具体,输出越可用。一个有效公式是:
- 背景信息:数据是什么、字段有哪些。
- 任务目标:要生成什么脚本、解决什么问题。
- 约束条件:有哪些列不能动、输入输出格式是什么。
- 输出格式:给出完整代码、附解释,还是只给思路。
例如数据处理场景:
我有以下 pandas DataFrame,包含“日期”“品类”“销量”“价格”四列。 日期列部分缺失,销量列存在 0 值和明显偏离均值的异常值。 请生成一个数据清洗脚本: 1. 日期列解析为 datetime,缺失行删除。 2. 销量为 0 且超过 7 天连续缺失时标记为缺失。 3. 对删除后的异常值用前后周期均值填充。 4. 最后输出清洗前后行数对比。 请给出完整 Python 代码,并解释每一步。模型选择场景:
题目要求根据历史销售数据预测未来 7 天销量,数据存在明显的周末效应和节假日波动。 目前只有 12 个月数据,约 365 行,没有额外外部数据。 请比较线性回归、随机森林和季节性时间序列模型在该场景下的适用性。 结论请用表格列出优缺点,并给出推荐方案。论文润色场景:
下面这段文字是用口语写成的模型描述,请改成学术论文语言,保持信息不变。 保留第一人称复数“我们”,不新增任何数据和结论。6.4 审 AI 输出的三个原则
第一,代码必须亲眼运行。AI 生成代码后,至少在本地跑一遍,确认输出结果与预期一致。第二,公式和数据必须溯源。AI 生成的结论如果没有依据,不写进论文。第三,AI 使用情况要如实披露。赛前必须阅读当年竞赛通知中关于 AI 的条款,按规范填写使用说明。
注意:AI 是效率工具,不是答案来源。任何直接照搬的模型解释和结论,都可能成为论文漏洞。
7. 论文撰写:把建模过程变成可读、可查、可复现的交付物
7.1 论文结构模板
数学建模论文通常采用固定结构,不要随意创新。推荐按以下顺序组织:
| 章节 | 核心内容 |
|---|---|
| 摘要 | 问题、模型、结果、创新点 |
| 关键词 | 3 到 5 个主题词 |
| 一、问题重述 | 用自己的话复述问题,不照抄原文 |
| 二、问题分析 | 指出问题的难点、解决思路、模型选择依据 |
| 三、模型假设 | 列出必要假设并说明理由 |
| 四、符号说明 | 用表格列出主要符号 |
| 五、模型建立与求解 | 每个子问题分开写,包含数据预处理、模型公式、求解结果 |
| 六、模型检验 | 误差分析、灵敏度分析、稳定性验证 |
| 七、模型评价与推广 | 优缺点,以及能否迁移到其他场景 |
| 参考文献 | 按标准格式列出 |
| 附录 | 代码、详细数据表、重要运行结果 |
多数零基础队伍会忽略“模型检验”和“模型评价”,但这两个章节恰恰是拉开差距的地方。评委看多了“建立—求解—给出答案”的三段式论文,一份带灵敏度分析和误差讨论的论文明显更有说服力。
7.2 摘要怎么写
摘要是整篇论文的门面,也是评委最先读的部分。很多优秀论文的摘要不是“本文做了什么”,而是“针对什么问题,采用什么方法,得到什么结果,结果是否可靠”。
建议按四步写:
- 第一句交代背景和问题:一句话说清实际场景和要解决的目标。
- 中间部分按子问题顺序介绍方法:每个子问题用了什么模型、怎么处理数据、关键约束是什么。
- 给出具体结果:数值或方案要点,最好有量化信息。
- 收尾说明验证方式:做了误差检验或灵敏度分析,表明结果稳定。
避免在摘要中堆砌所有人都知道的方法名,例如“本文使用了层次分析法和 TOPSIS”,却不说明指标是什么、权重怎么确定。没有上下文的模型名毫无信息量。
7.3 公式、图表和正文保持对应
论文不是代码仓库,而是要让读者仅通过正文就能理解建模过程。每张图、每个表格都应该在正文中至少出现一次“如图 x 所示”“见表 x”。公式需要编号,并解释每个变量含义。
Matplotlib 出图后,建议导出为高分辨率图片:
plt.savefig("result.png", dpi=300, bbox_inches="tight")如果论文用 Word 写作,要确保图片清晰,不要直接截图屏幕。如果使用 LaTeX,公式和交叉引用会更方便,但学习成本高,建议队伍在赛前统一熟练一种方案。
7.4 提交前检查清单
提交论文前,按以下清单逐项检查:
- 摘要是否包含问题、方法、结果、检验四要素。
- 首行缩进、字体、行距是否一致。
- 所有图表是否有编号和正文引用。
- 公式编号是否连续。
- 引用是否完整,是否出现“百度百科”等不规范来源。
- 附录中代码是否与正文模型对应。
- 所有数据结果是否有来源说明。
- 文件名和提交格式是否符合赛区要求。
- AI 使用声明是否填写完整。
很多队伍最后被扣分不是因为模型差,而是格式混乱、结果缺失、来源不明。提交前至少留出一个小时专门处理这些问题。
8. 从零基础到比赛:分阶段备赛路线
8.1 距离比赛 30 天:先完成最小闭环
如果距离比赛只有一个月,不要贪多。目标是完整跑完一次“真题 + 论文”的模拟流程。
第一周:准备环境和工具,找一道一两年前的 C 题,完整读取附件。第二周:完成数据处理和目标预测模型,画出核心图表。第三周:补上评价类或优化类模型,把第一问扩展到第二问。第四周:完整写一篇论文,不限时间,但要在最后一天提交前完成格式检查。
这个阶段不需要学完整本教材,关键是体验一次全流程,知道自己在哪个环节最耗时。
8.2 距离比赛 60 天:增加模型深度
有 60 天时间,可以在最小闭环基础上增加:
- 学透一类自己最擅长的题型,例如预测题。
- 补充优化类模型的约束写法,包括多期变量、逻辑约束、容量限制。
- 练习 AI 提示词,把数据处理、代码调试、润色场景提前测试。
- 整理自己的备赛文档:常用代码片段、数据清洗模板、图表参数配置、摘要模板。
备赛文档不是整篇抄代码,而是记录“遇到什么问题,用哪段代码,注意什么坑”。这种文档在赛场上比临时搜索强得多。
8.3 最后 48 小时检查清单
距离比赛结束前 48 小时,不要再引入新模型。要做的是:
- 确认所有模型结果都能复现。
- 确认论文中的图表和代码输出一致。
- 检查摘要没有出现“结果无法解释”的数字。
- 压缩代码体积,删除无用变量和打印内容。
- 确认提交文件命名和格式正确。
注意:比赛最后出现的大多数问题,都不是新问题,而是“之前想清楚但没落实”的问题。提前完成闭环,比最后一夜突击更有效。
8.4 备赛文档和提示词管理
建议在本地建立两类文件:
一类是代码库,按“数据处理、预测模型、评价模型、优化模型、可视化”分类存放。第二类是文档库,包括“历年初赛题拆解笔记”“优秀论文摘要摘录”“AI 提示词模板”“提交前检查清单”。
AI 提示词模板建议按场景保存:
通用数据分析提示词: 数据文件名:xxx 字段说明:xxx 任务:数据清洗/特征构造/模型训练 输出格式:完整代码 + 解释论文润色提示词: 下面这段是初稿,请改成学术化表达。 保持信息不变,不新增数据,不改变结论。 需要保留关键词:xxx。实际使用时,把模板中的占位符替换成真实内容即可。提示词的价值不在于“问得多花哨”,而在于信息完整、输出格式明确。
数学建模国赛的速成路径,本质不是压缩思考,而是把有限时间投入到反馈最密集的环节。数据清洗决定模型是否可信,模型与问题的对应关系决定论文逻辑是否成立,论文写作决定成果能否被评审看见。备赛阶段最值得做的练习,是选一道真实赛题,从读取附件开始,一路写到提交论文,在完整闭环里找出自己的短板。AI 工具可以在各个环节帮助你提速,但所有代码、数据和结论都必须由队伍自身验证。拿到题后先拆题,再处理数据,然后建模求解,及时补上验证和写作,这支队伍就已经跑在了多数准备不足的队伍前面。