2026 数学建模国赛备赛,很多人的第一反应是“我模型还没背熟怎么办”,但真正拉开差距的往往不是模型数量,而是完整流程的熟练度:从拿到题目到提交论文,中间要过数据清洗、特征构造、模型选型、结果可视化、论文排版、查重降重这几关。这篇文章直接把整套备赛路线拆开讲,覆盖工具链、数据处理、三大高频模型、真题拆题方法、AI 辅助建模和论文撰写,零基础也能按顺序执行。
先给一个总览:如果你正在备赛 2026 全国大学生数学建模竞赛,本文会从“用什么工具”、“怎么处理数据”、“三大模型怎么选”、“真题怎么拆”、“AI 提示词怎么用”、“论文怎么写”六个维度展开。全文不是单纯堆模型清单,而是尽量给出可以直接上手的操作流程、代码片段和检查清单。适合第一次参赛的本科生,也适合准备冲击国奖但还没形成完整方法论的小组。
1. 核心能力速览
| 能力项 | 说明 |
|---|---|
| 备赛对象 | 2026 数学建模国赛(全国大学生数学建模竞赛) |
| 适用人群 | 零基础小白、第一次组队参赛、想冲击国奖的参赛队伍 |
| 核心模块 | 工具链、数据处理、三大模型、真题拆解、AI 应用、论文撰写 |
| 常用软件 | Python、Excel、SPSS、MATLAB、LaTeX / Word、ProcessOn / draw.io |
| 三大模型方向 | 评价决策类、预测类、优化类 |
| AI 使用边界 | 可用于辅助编程、公式理解、思路整理、论文润色,需遵守竞赛规则 |
| 交付物 | 参赛论文(摘要、模型建立、求解、分析、附录) |
| 推荐验证方式 | 先跑通一套完整题目,再按时间倒推模拟比赛 |
表格里的所有内容都是备赛路线,没有固定的“显存门槛”或“显卡要求”,普通笔记本电脑就能完成大部分训练和代码运行。真正需要注意的是时间分配、数据质量和模型解释能力,这三样比堆模型更重要。
2. 适用场景与备赛边界
数学建模国赛解决问题的方式,本质上是用数学语言描述实际问题,再通过编程求解,最后用论文讲清楚整个过程。所以本文适用的场景是:
- 刚接触数学建模,不知道从哪开始准备的参赛队伍;
- 已经会基础 Python,但对数据处理和模型选型不熟悉的人;
- 想梳理一套可复用的备赛流程,避免赛前临时抱佛脚;
- 想利用 AI 工具提升写代码、查资料、润色论文效率,但也担心学术规范问题的同学。
在这条备赛路线里,也要先说清楚边界。数学建模竞赛考的是“解决问题能力”,不是“调包能力”。评委真正关注的是你的模型是否合理、假设是否清晰、求解是否可复现、结论是否经得起检验。如果只是把现成代码往题目上套,没有解释清楚为什么选这个模型、数据怎么处理、参数怎么定,最后分数不会高。
AI 工具的使用也一样。目前主流 AI 在辅助编程、解释公式、生成初稿、润色表达方面效率很高,但 AI 生成的模型不一定贴合题目,也可能编造参考文献。更重要的是,竞赛规则对 AI 辅助使用越来越严格,不同年份、不同赛区会有具体说明。稳妥做法是:AI 提供思路和代码片段,自己负责验证和解释;不要把 AI 生成的内容直接复制进论文,也不要把 AI 生成结果当作真实计算结果。
另外,数据处理素材可能来自公开数据集、比赛附件或自己爬取的数据。使用公开数据时注意来源规范;涉及个人隐私、商业数据、版权内容时,要谨慎授权,不要直接公开原始数据。论文中引用的参考文献要真实可查,不能编造。
3. 环境准备与前置条件
数学建模不是把所有时间花在环境配置上,但一套顺手的工具链能节省大量时间。推荐按以下顺序准备。
3.1 编程环境
Python 是当前数学建模最常用的语言,生态完整,matplotlib、pandas、numpy、scikit-learn、scipy 这些库几乎覆盖了从数据处理到模型求解的全部需求。建议安装 Anaconda 或 Miniconda,然后用 conda 创建独立环境,避免依赖冲突。
# 创建数学建模专用环境(Python 3.10) conda create -n mathmodel python=3.10 -y conda activate mathmodel # 安装核心依赖 pip install numpy pandas matplotlib seaborn scipy scikit-learn openpyxl如果是第一次配置,建议再安装一个代码编辑器,VSCode 和 Jupyter Notebook 二选一。Jupyter 适合数据探索和分步验证,VSCode 适合写完整脚本和调试。赛题做完后,建议把关键代码整理成.py脚本,方便在论文附录中展示。
3.2 写作与排版工具
论文排版是参赛评分中的“门面”,推荐直接用 Word 或 LaTeX。
- Word 上手快,图表插入方便,但公式排版需要使用公式编辑器;
- LaTeX 公式美观、排版专业,但前期需要学习语法;
- 很多参赛队伍用 Word 写初稿,最后用 LaTeX 或 Word 自带公式工具统一排版。
如果队伍里有一个人熟悉 LaTeX,推荐直接使用模板。国赛论文一般包含摘要、问题重述、问题分析、模型假设、符号说明、模型建立与求解、模型检验、模型评价、参考文献、附录等部分,排版时把这些章节结构先建好,后面写内容会轻松很多。
3.3 制图与画流程图工具
数学建模论文中,结构图和流程图非常重要,尤其是模型流程图、数据预处理流程图、算法流程图。推荐用 draw.io 或 ProcessOn 画流程,用 Python 的 matplotlib 画数据图和结果图。图要清晰、有编号、有标题,不要直接用未处理的数据截图。
3.4 硬件要求
数学建模大部分题目在普通笔记本电脑上就能完成。除非涉及深度学习或大规模搜索,否则不需要高性能 GPU。备赛阶段主要瓶颈是磁盘空间和内存,建议保证至少 20GB 剩余空间用于数据和环境。
4. 数据处理全流程
数据处理往往是新手最先崩溃的地方。Excel 打开大文件卡死、日期格式混乱、缺失值不知道填什么、异常值不知道怎么判断,这些问题在赛题中非常常见。这里给出一套可以复用的流程。
4.1 数据导入与格式统一
拿到赛题附件后,第一步不是建模,而是先搞清楚数据长什么样。
import pandas as pd # 读取 Excel 附件 df = pd.read_excel("data.xlsx", sheet_name=0) # 查看数据维度 print(df.shape) # 查看字段名和前 5 行 print(df.columns.tolist()) print(df.head())如果附件包含多个 sheet,建议先逐个读取并记录每个 sheet 的字段含义。出现中文列名时先统一改成英文字段名或规范的变量名,避免后面写代码时反复切换输入法。
4.2 缺失值处理
缺失值的处理不能无脑填充。需要注意:不同字段的缺失含义不同,有些缺失代表“没有这个数据”,有些缺失代表“该值为 0”,还有的是“未记录”。处理前先看缺失比例。
# 统计缺失值数量 print(df.isnull().sum()) # 数值列:可考虑用中位数填充 df["sales"] = df["sales"].fillna(df["sales"].median()) # 分类列:可考虑用众数填充,或新增“缺失”标记 df["city"] = df["city"].fillna("unknown")如果某个字段缺失比例超过 50%,要慎重决定是否使用。缺失过多时,模型很容易学到错误规律,不如直接丢弃或做标记。
4.3 异常值处理
异常值可以用箱线图、Z-score 或业务逻辑判断。注意,异常值不一定要删除——有些题目考察的恰恰是异常点背后的原因。
import numpy as np def detect_outliers_zscore(series, threshold=3): z = np.abs((series - series.mean()) / series.std()) return series[z > threshold].index.tolist() outliers = detect_outliers_zscore(df["price"]) print(outliers)如果题目本身是预测类,异常值通常会拉高误差,需要剔除或平滑;如果题目是监测类或异常检测类,异常点反而是重点分析对象。处理前要想清楚模型目的。
4.4 数据标准化与归一化
不同量纲的数据进入模型前需要统一尺度。比如评价类问题中,价格是万元量级,满意度是 0-5 分,如果直接用原始值,价格会因为数值大而主导结果。
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() df[["price_norm", "satisfaction_norm"]] = scaler.fit_transform(df[["price", "satisfaction"]])归一化会把数据映射到 [0,1] 区间,标准化则让数据均值为 0、方差为 1。评价类模型多用归一化,回归和聚类类模型常用标准化。
4.5 数据可视化与探索
建模前先画图,这一步不能省。通过散点图、箱线图、热力图可以快速发现变量之间的关系。
import matplotlib.pyplot as plt import seaborn as sns sns.pairplot(df[["sales", "price", "satisfaction"]]) plt.savefig("pairplot.png", dpi=150)热力图适合看数值变量之间的相关性:
corr = df[["sales", "price", "satisfaction"]].corr() sns.heatmap(corr, annot=True, cmap="RdBu_r") plt.savefig("corr.png", dpi=150)可视化结果可以直接放到论文“数据探索”部分,这是很多获奖论文都会有的加分项。
5. 三大高频模型拆解
数学建模赛题虽然千变万化,但模型选择经常落在评价决策、预测、优化这三个方向上。这里给出每个方向的常用模型、适用条件和 Python 实现思路。
5.1 评价决策类模型
常见题目是“对多个方案排序”“评估城市竞争力”“评价多种路线优劣”。这类问题的核心是先确定评价指标体系,再选择评价方法。
常用方法包括:
- 层次分析法(AHP):适合指标少、主观判断重的场景;
- 熵权法:适合由数据客观确定权重的场景;
- TOPSIS 法:适合有多个方案、多个指标,需要贴近理想解的排序场景;
- 灰色关联度分析:适合数据少、规律不明显的场景。
TOPSIS 是国赛中出场率很高的方法。下面是结合熵权法和 TOPSIS 的简化实现。
import numpy as np import pandas as pd # 假设 X 为 n 个方案、m 个指标 的矩阵 X = np.array([ [0.8, 0.7, 0.9], [0.6, 0.9, 0.5], [0.7, 0.6, 0.8] ]) # 归一化(这里用极差归一化,假设所有指标都是正向指标) X_norm = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0)) # 熵权法求权重 p = X_norm / X_norm.sum(axis=0) k = 1 / np.log(X.shape[0]) e = -k * np.sum(p * np.log(p + 1e-12), axis=0) w = (1 - e) / np.sum(1 - e) # TOPSIS 计算正负理想解和得分 V = X_norm * w ideal_best = V.max(axis=0) ideal_worst = V.min(axis=0) d_best = np.sqrt(((V - ideal_best) ** 2).sum(axis=1)) d_worst = np.sqrt(((V - ideal_worst) ** 2).sum(axis=1)) score = d_worst / (d_best + d_worst) print("权重:", w) print("得分:", score)使用评价类模型时,最关键的是指标正负方向处理和权重的可解释性。论文里一定要写清楚为什么选这些指标、权重如何得出,不是把代码跑完就结束。
5.2 预测类模型
预测类题目一般给历史数据,让预测未来值。常见方法从简单到复杂包括:
- 线性回归:适合趋势明显、变量关系线性;
- 时间序列模型(ARIMA、SARIMA):适合单变量时间序列;
- 灰色预测 GM(1,1):适合数据量少、指数增长趋势明显的场景;
- 随机森林、XGBoost:适合多特征、非线性关系的回归预测;
- LSTM 等深度学习:适合长序列、大数据量,但训练成本高、解释性弱。
国赛中,数据量中等或偏少时,时间序列模型和灰色预测依然是首选,因为可解释性强。下面是一个 ARIMA 的快速示例。
import pandas as pd from statsmodels.tsa.arima.model import ARIMA # 读取单变量时间序列 data = pd.read_csv("sales.csv", parse_dates=["date"], index_col="date") series = data["sales"] # 差分后确认平稳性后建模 model = ARIMA(series, order=(1, 1, 1)) result = model.fit() # 预测未来 7 期 forecast = result.forecast(steps=7) print(forecast)使用预测类模型时,一定要做误差评估。常见指标包括 MAE、RMSE、MAPE。预测结果画图时,要把历史值、真实测试值、预测值画在一起,并标注置信区间或误差带,论文表达会更完整。
5.3 优化类模型
优化类题目通常是“在一定约束下,最大化收益或最小化成本”。常见模型包括线性规划、整数规划、非线性规划、动态规划、遗传算法、模拟退火等。
小规模问题直接用 scipy.optimize 或 pulp 求解;大规模、非线性、组合爆炸问题,可以用启发式算法。下面是一个简单的线性规划示例。
from scipy.optimize import linprog # 最大化:3x1 + 5x2 # 约束:x1 + 2x2 <= 10, 3x1 + x2 <= 12, x1,x2 >= 0 # linprog 默认做最小化,取负号转换 c = [-3, -5] A_ub = [[1, 2], [3, 1]] b_ub = [10, 12] bounds = [(0, None), (0, None)] res = linprog(c, A_ub=A_ub, b_ub=b_ub, bounds=bounds, method="highs") print(res.x) print(-res.fun)优化类模型的难点不在求解器,而在建模。约束条件有没有写全、目标函数是否线性、决策变量是否可拆分,这些才是评阅重点。写完模型后,最好先用小规模样例验证结果合理性,再扩大规模求解。
如果问题规模很大,可以用遗传算法框架,下面是简单的遗传算法骨架:
import random def fitness(x): # 示例适应度函数,实际需按题目替换 return sum(x) def mutate(solution, prob=0.1): new = solution[:] for i in range(len(new)): if random.random() < prob: new[i] = 1 - new[i] return new pop = [[random.randint(0, 1) for _ in range(10)] for _ in range(50)] for gen in range(100): pop.sort(key=lambda x: fitness(x), reverse=True) new_pop = pop[:10] while len(new_pop) < 50: p1, p2 = random.sample(new_pop[:10], 2) cut = random.randint(1, 9) child = p1[:cut] + p2[cut:] child = mutate(child) new_pop.append(child) pop = new_pop print(pop[0], fitness(pop[0]))注意,启发式算法的结果有随机性,正式提交前要多跑几次,记录最优解、最差解、平均耗时,并在论文中写清楚参数设置。
6. 真题拆解与选题策略
真题拆解不是把题目看一遍,而是拆出“已知条件、目标、约束、可用数据、评价点”五个要素。拿到题目后,建议按下面的模板记录:
| 题目编号 | 问题类型 | 已知条件 | 待求目标 | 关键约束 | 可能用到的模型 | 可能用到的数据方法 |
|---|---|---|---|---|---|---|
| A 题 | 物理/工程 | 附件数据 | 优化方案 | 成本/资源 | 微分方程/优化 | 参数估计 |
| B 题 | 决策/评估 | 多评价指标 | 综合排序 | 权重/口径 | 熵权法/TOPSIS | 归一化 |
| C 题 | 预测/分类 | 历史数据 | 未来预测 | 时间范围 | 时间序列/机器学习 | 特征工程 |
拆题时要注意,题目中经常有多问递进关系。第一问一般是数据可视化或简单建模,第二问开始引入新的因素,第三问会把模型做复杂。答题时不要跳过第一问直接做第三问,每一问都要有自己的分析和输出。
选题策略上,A 题偏物理、工科,常需要微分方程和机理建模;B 题偏决策和管理,适合逻辑分析强的队伍;C 题偏数据挖掘和预测,适合编程能力强的队伍。第一次参赛的队伍,建议优先选数据量相对可控、模型链条清晰的题目,不要一上来追求难题。
7. AI 应用与提示词工程
AI 在数学建模备赛中最有价值的场景有三个:快速理解概念、辅助生成代码、润色论文表达。下面给出可以直接套用的提示词写法。
7.1 建模思路生成提示词
不要问“给我一个模型”,要先把题目要素给全。
你是一名数学建模竞赛指导老师。现在有一个题目:XXX。 已知条件:XXXX。 需要求解:XXXX。 请给出: 1. 该问题的建模思路; 2. 2-3 个候选模型,并对比优缺点; 3. 推荐模型的详细建模步骤; 4. 需要的计算工具和代码框架。用这种结构化的提问方式,AI 的回答会更具体,也更像一份可执行的建模方案,而不是泛泛而谈。
7.2 数据处理代码生成提示词
写代码遇到不熟悉的库时,把数据样例和需求一起给 AI。
我有一个 DataFrame,包含字段:date, city, sales, price。 现在需要: 1. 按 city 分组统计 sales 的中位数; 2. 对缺失值用中位数填充; 3. 把日期列转为 datetime 类型,并新增月、周、星期字段; 4. 生成一个折线图,展示每个城市的销售趋势。 请给出完整 Python 代码,并加上必要的注释。这种提示词让 AI 生成的代码更贴合任务,减少来回修改。
7.3 论文润色提示词
论文写完后,可以用 AI 检查逻辑和表达,但不要直接整段替换。
你是一名学术论文编辑。请帮我润色以下段落,要求: 1. 保持原意不变; 2. 使表达更简洁、专业; 3. 不增加虚构内容; 4. 如果发现逻辑不连贯,请指出问题并给出修改建议。 原文:XXXX需要注意,AI 润色后的内容仍然需要自己核对数据、公式和结论。尤其是摘要部分,评委阅读密度很高,任何事实性错误都会被放大。
7.4 AI 使用合规边界
不同年份的竞赛规则不同,有些赛区要求注明使用了哪些 AI 工具,有些赛区对 AI 生成内容有比例限制。备赛阶段就养成记录习惯:每次用 AI 时,保存对话内容、生成时间、使用目的,比赛截止前再按当年规则整理。这样做一方面保证合规,另一方面也能追溯到“哪段代码是 AI 写的、哪段是自己改的”,避免答辩时讲不清楚。
8. 论文撰写与排版
论文是建模结果的最重要载体。即使模型很简单,一篇逻辑清晰、图表规范的论文也能拿到不错分数;反过来,模型再复杂,如果表达混乱,评阅体验也会很差。
8.1 摘要撰写
摘要的权重非常高。评委可能不会细读每一页论文,但一定会看摘要。建议按照“问题背景 + 方法 + 结果 + 精度评估”的结构写,每个问题尽量用一句话概括方法,用一句话给出结果。
例如:
针对 XXX 问题,建立了基于 TOPSIS 的综合评价模型。首先通过熵权法确定各指标权重,然后利用 TOPSIS 计算相对贴近度,得到各方案的排序。结果表明,方案 X 在综合表现上最优,排序结果通过了灵敏度分析验证。避免写“本文研究了……”“对问题进行了深入分析”这类空话。
8.2 图表规范
论文中的每张图都要有编号、标题、坐标轴标签。数据图用 Python 生成后,导出 PNG 时分辨率建议不低于 150dpi。流程图用 draw.io 画完后导出为高清 PNG 或 PDF。表格尽量使用三线表样式,不要贴 Excel 原始截图。
8.3 LaTeX 快速上手
如果选择 LaTeX,建议提前准备好模板,下面是一个精简示例:
\documentclass[12pt, a4paper]{article} \usepackage{ctex} \usepackage{amsmath} \usepackage{graphicx} \begin{document} \section{问题分析} ... \section{模型建立与求解} ... \begin{equation} y = ax^2 + bx + c \end{equation} \end{document}第一次用 LaTeX 时不用追求复杂的自定义,只要保证公式、图片、参考文献能正常编译即可。
8.4 查重与降重
论文写完后建议用查重软件做一次重复率检查。降低重复率的正确方式是:把“模型原理部分”用自己的语言概括,把“结果分析”写成基于自己计算数据的判断,把“参考文献”整理成真实可查实的列表。不要用翻译软件来回翻译来降重,那会导致句子语义失真、技术表达错漏。
9. 备赛文档管理与冲刺计划
完整的备赛文档应该包含:题目原文、数据附件、数据处理脚本、模型代码、实验记录、图表输出、论文草稿、AI 对话记录。建议按下面的目录结构管理:
2026_math_modeling/ ├── data/ │ ├── raw/ │ └── processed/ ├── code/ │ ├── data_preprocess.py │ ├── model_eval.py │ ├── model_forecast.py │ └── model_optimize.py ├── figures/ ├── paper/ │ ├── main.tex │ ├── main.docx │ └── references.bib └── ai_records/备赛阶段建议每支队伍每周完成一次“限时模拟”:拿一套往年真题,按正式比赛的时间分配,从读题到出论文完整走一遍。第一次模拟一定会超时,这没问题,关键是复盘时间花在哪、哪个环节阻塞、分工是否合理。赛前至少完成 2 到 3 次完整模拟,团队节奏会有明显提升。
10. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 数据读不进去 | Excel 文件格式问题、编码错误 | 检查文件路径和后缀,读取少量行测试 | 用pd.read_excel指定 sheet_name,或使用encoding='utf-8' |
| 缺失值太多 | 数据本身稀疏 | 统计缺失比例,结合题目判断 | 合理填充或标记,不要无脑删除 |
| 预测结果误差很大 | 数据未平稳、特征选择不当、模型参数不对 | 绘制预测残差图,观察误差分布 | 先做差分和平滑,换用更简洁的模型 |
| 模型代码报错 | 参数类型不对、维度不匹配 | 打印shape和dtype | 调试时缩小数据量,先跑通再跑全量 |
| 论文重复率偏高 | 直接复制模板或 AI 生成内容 | 用查重工具检查 | 用自己的语言重写原理和结果分析 |
| AI 生成结果不专业 | 提示词缺少上下文 | 给 AI 更多字段、目标、约束 | 按结构化提示词重新提问 |
| 模拟赛超时 | 分工不清、流程不熟练 | 记录各环节耗时 | 提前固定分工,建立标准化流程 |
11. 最佳实践与备赛建议
第一条,先跑通最小闭环。备赛前期不要求做完整难题,可以拿一道往年 C 题,从读数据到出图和简单预测,完成一次全部流程。流程跑通了,后面加模型才有效果。
第二条,固定分工而不是固定角色。三个人分别负责模型为主、编程为主、论文为主,但每个人都要能看懂整个流程。比赛前一周可以做一次交叉检查:写论文的人读模型代码,负责模型的人看摘要,提前发现问题。
第三条,模型可解释性优先。国赛更看重一个指标:评委能否看懂你的模型。复杂模型不是不能用,但必须用中文把思路讲清楚,配合流程图和公式推导。如果模型复杂到自己都解释不了,大概率也拿不到高分。
第四条,AI 是辅助,不是替代。不要让 AI 替你写结论。AI 可以帮助选型、写函数、润色表达,但不能替你做实验、替你做判断。每次利用 AI 生成内容,都要预留时间人工验证,尤其是计算结果、参考文献和摘要中的关键数字。
第五条,提前准备一套自己的模板和工具箱。包括数据清洗函数、绘图样式、论文模板、摘要模板和常用模型代码。比赛时直接复用,可以节省大量时间。平时每次做完题,都把好用的代码整理到工具箱里,而不是赛前临时找。
12. 总结
2026 数学建模国赛备赛的核心,不是记住所有模型,而是把“读题、数据处理、模型选型、编程求解、论文排版”这条链路跑顺。建议从上手一套往年真题开始,先完成数据清洗和可视化,再补评价、预测、优化三个方向的模型代码,最后完整写一篇论文走一遍流程。
如果这篇备赛思路对你有用,建议收藏备用。备赛过程中的难点往往不是你选的模型不够高级,而是数据和表达没有讲清楚。把基础流程练熟,比临时背十个模型更稳。