- name
- math-modeling-workflow
- description
- 通用数学建模竞赛(CUMCM / MCM-ICM / 各类数模赛)端到端工作流。适用于拿到赛题后, 从问题分析、数据处理、模型构建、算法实现、结果验证到论文交付的完整流程。触发词包括 "数学建模""建模比赛""数模赛题""开始建模""solve modeling problem"等。
# 数学建模竞赛通用工作流
从赛题拆解到论文交付的六阶段端到端 Workflow。每个阶段标注输入/输出/依赖/可复用步骤,可适配计算机视觉、统计推断、优化、预测等不同赛题类型。
---
## 阶段零:赛前准备(5 分钟)
1. 在项目根目录下创建标准目录结构:
```
项目名/
├── data/ ← 原始赛题数据(只读,不修改)
├── src/ ← 所有源代码
├── results/ ← 实验输出(模型权重、日志、预测结果)
├── figures/ ← 可视化图表
├── 论文/ ← LaTeX 论文工程(阶段六创建)
└── 解题方案.md ← 问题分析与技术路线(阶段一产出)
```
2. 确认计算环境:GPU 型号、Python 版本、关键库版本。
3. 若项目下有 `cumcm-paper-writing` skill,后续阶段六直接沿用其 LaTeX 模板。
---
## 阶段一:问题分析与假设
**输入**:赛题 PDF、附件数据
**输出**:`解题方案.md`(含问题分类、假设、技术路线图)
**依赖**:无
### 步骤
1. **通读赛题**,逐问题标注数学类型:
| 类型 | 常见问法 | 典型方法 |
|:--|:--|:--|
| 分类/判别 | "判断是否…""分为几类…" | 统计检验、机器学习分类器、EVT |
| 检测/定位 | "找出位置…""标注…" | YOLO / Faster R-CNN / 语义分割 |
| 回归/预测 | "预测未来…""估算…" | 时序模型、回归分析、神经网络 |
| 优化 | "最优方案…""最小化…" | 线性规划、遗传算法、模拟退火 |
| 评估/排序 | "评价…""排名…" | AHP / TOPSIS / 熵权法 / DEA |
2. **识别核心困难**:数据缺失?类别不平衡?无标注?多目标冲突?
3. **建立假设体系**(5–7 条),每条假设对应一个模型前提,引用文献支撑。
4. **画技术路线图**(TikZ 或 Mermaid):
```
赛题 → 数据EDA → [问题二模型] → [问题一推断] → [问题三评估] → 论文
```
- 先确定问题间的依赖关系,再决定解题顺序。
- 常用策略:「先检测后推断」「先建模后评估」。
### 适配提示
- **优化类赛题**:阶段一重点在约束条件形式化和目标函数定义。
- **预测类赛题**:阶段一重点在时间粒度选择和外部变量筛选。
---
## 阶段二:数据预处理与导入
**输入**:原始数据、阶段一的问题分析
**输出**:清洗后数据集、EDA 报告、`dataset.yaml`(如适用)
**依赖**:阶段一
### 步骤
1. **探索性数据分析(EDA)**
- 统计样本量、类别/特征分布、缺失率、异常值。
- 建立 **「真实数字清单」**:数据规模、类别占比、不平衡比、尺度分布等——后续论文中的所有数字必须从此清单取用。
- 输出可视化:类别柱状图、相关性热力图、分布直方图。
2. **数据划分**
- 使用 **分层抽样**(`StratifiedShuffleSplit`)按类别/标签等比例划分训练集与验证集(常用 85:15)。
- 固定随机种子 `seed=42`,确保可复现。
- 测试集由赛题提供,不参与任何训练/调参。
3. **数据增强与特殊处理**(按需)
| 场景 | 策略 | 实现 |
|:--|:--|:--|
| 类别不平衡 | 过采样 / Copy-Paste / SMOTE | 增加少数类有效样本 |
| 缺乏负样本 | 从无标注区域裁剪纯背景图 | 生成 hard negative |
| 多尺度目标 | Mosaic / 多尺度训练 | 扩展尺度覆盖范围 |
| 数据量不足 | 翻转、旋转、色彩抖动 | 标准数据增强 |
| 时序数据 | 滑动窗口、差分、归一化 | 时序特征工程 |
4. **格式转换**:将数据转为模型所需格式(YOLO txt / COCO JSON / CSV 等)。
### 适配提示
- **表格/数值类赛题**:重点在特征工程(缺失值填充、编码、降维)。
- **图像类赛题**:重点在增强策略和标注格式转换。
---
## 阶段三:模型构建
**输入**:阶段一的问题类型、阶段二的 EDA 结论
**输出**:模型架构定义、损失函数公式、数学推导文档
**依赖**:阶段一 + 阶段二
### 步骤
1. **选择基线模型**
| 问题类型 | 推荐基线 |
|:--|:--|
| 目标检测 | YOLOv8 / YOLOv11 / RT-DETR |
| 图像分类 | ResNet / EfficientNet / ViT |
| 时序预测 | LSTM / Transformer / Prophet |
| 回归分析 | XGBoost / LightGBM / 线性回归 |
| 组合优化 | Gurobi / OR-Tools / 遗传算法 |
| 多准则评价 | AHP + TOPSIS / 熵权法 |
| 统计推断 | 极值理论 / 贝叶斯推断 / 假设检验 |
2. **设计创新点**(论文核心加分项)
遵循「缺陷—改进—验证」链条:
```
传统方法的已知缺陷(文献引用)
↓ 数学分析证明缺陷存在
↓ 引入新的数学工具弥补
↓ 推导统一公式(boxed)
↓ 实验验证改进幅度(消融表)
```
> 原则:优先选择有严格数学推导支撑的改进,而非纯工程 trick。
3. **数学推导文档化**
每个核心公式必须包含:
- 符号定义(写入符号说明表)
- 推导过程(定义 → 引理 → 定理 → 证明)
- 物理/几何直觉解释
- 公式编号(`\eqref` 引用)
### 适配提示
- **优化类赛题**:模型构建 = 目标函数 + 约束条件 + 松弛/对偶变换。
- **评价类赛题**:模型构建 = 指标体系 + 权重确定方法 + 综合评分函数。
---
## 阶段四:模型求解与算法实现
**输入**:阶段二的数据集、阶段三的模型设计
**输出**:模型权重、训练日志、测试集预测结果
**依赖**:阶段二 + 阶段三
### 步骤
1. **编写训练/求解脚本**
- 使用 `argparse` 管理超参数,便于消融实验切换。
- 固定所有随机种子 `seed=42`。
- 记录完整训练日志(逐 epoch 指标、损失曲线)。
2. **设计消融实验**
| 实验 | 改变的变量 | 控制变量 | 目的 |
|:--|:--|:--|:--|
| Exp-A (Baseline) | 基础模型/默认参数 | — | 性能下限 |
| Exp-B (改进 1) | 模型容量/数据增强 | 同数据划分 | 量化单一改进 |
| Exp-C (改进 2) | 叠加新策略 | 同上 | 验证增量贡献 |
> **铁律**:每次只改变一个变量。
3. **执行训练并管理产物**
```
results/
├── exp_a/weights/best.pt, results.csv, args.yaml
├── exp_b/...
└── exp_c/...
```
4. **生成测试集提交文件**
- 格式严格对齐赛题要求(列名、顺序、是否含扩展名)。
- 提交前人工抽查若干样本。
### 适配提示
- **优化类赛题**:此阶段 = 调用求解器(Gurobi/OR-Tools)或实现元启发式算法。
- **统计类赛题**:此阶段 = 参数估计 + 假设检验 + 置信区间计算。
---
## 阶段五:结果验证与敏感性分析
**输入**:阶段四的模型输出
**输出**:评估指标汇总表、消融分析、鲁棒性报告
**依赖**:阶段四
### 步骤
1. **多维度评估**
| 维度 | 常用指标 |
|:--|:--|
| 精度 | mAP / Accuracy / RMSE / R² |
| 分类 | Precision / Recall / F1 / AUC-ROC |
| 效率 | FPS / 参数量 / FLOPs / 求解时间 |
| 稳定性 | 多次运行的均值 ± 标准差 |
2. **消融实验分析**
- 制作对比表格(含 Δ 列),量化每个改进的贡献。
- 按类别/场景做细粒度分析(如逐类 mAP)。
3. **跨配置一致性验证**(统计推断类)
- 用不同模型/参数重复实验,验证结论的模型无关性。
- 合格标准:核心结论的变异系数 < 15%。
4. **鲁棒性/敏感性分析**
- 对关键参数做扰动实验(±10%、±20%),观察输出变化。
- 若有真实退化数据则量化,否则写「增强覆盖分析 + 建议协议」。
### 适配提示
- **优化类赛题**:敏感性分析 = 对约束参数做松弛,观察目标函数变化。
- **预测类赛题**:验证 = 回测历史数据 + 滚动预测误差分析。
---
## 阶段六:可视化与报告生成
**输入**:阶段一~五全部产物
**输出**:`main.pdf`(论文)+ `支撑材料.zip`
**依赖**:阶段一~五
### 步骤
1. **可视化生成**
```python
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['figure.dpi'] = 300
```
必出图表:类别分布图、技术路线图、训练曲线、消融对比表、结果可视化。
2. **论文工程搭建**
- 若有 `cumcm-paper-writing` skill,执行其步骤3(复制 `assets/latex-template/` 为论文目录)。
- 若无模板,手动搭建 `ctexart` + `geometry` + `booktabs` + `fancyhdr` 结构。
3. **论文章节对照**
| 章节 | 内容来源 | 写作要点 |
|:--|:--|:--|
| 摘要 | 全文精华 | 单页,700-900字,每个问题一段(方法+关键数字) |
| 问题重述 | 阶段一 | 用自己的语言复述,不抄原题 |
| 问题分析 | 阶段一 | 技术路线图 + 各问题建模切入点 |
| 模型假设 | 阶段一 | 5-7 条,每条有文献支撑 |
| 符号说明 | 阶段三 | longtable 两列格式 |
| 数据处理 | 阶段二 | EDA 图表 + 数字清单 |
| 问题 N 求解 | 阶段三+四 | 建模 → 公式 → 算法 → 结果 |
| 模型评估 | 阶段五 | 多维指标 + 消融 + 鲁棒性 |
| 模型评价 | 全文总结 | 优点/缺点/推广(如实) |
| 参考文献 | 全文引用 | GB/T 7714 著录,`\cite` 一一对应 |
| 附录 | 阶段四 | 全部可运行源代码 |
4. **自检清单**
- [ ] 摘要单页,数字与正文一致
- [ ] 每张图/表在正文被引用,图下表上
- [ ] 公式编号连续,`\eqref` 引用
- [ ] 参考文献 `\cite` 与文末一一对应
- [ ] 无身份/学校信息
- [ ] 电子版不含承诺书/编号页
- [ ] 附录含全部可运行源程序
- [ ] 提交文件格式与赛题要求一致
5. **编译**:`xelatex main.tex` × 2 遍。
---
## 时间分配建议
### 72 小时赛制(CUMCM 国赛)
| 阶段 | 时间 | 占比 | 说明 |
|:--|:--|:--|:--|
| 阶段一 | 4-6h | 7% | 不要急于写代码 |
| 阶段二 | 6-8h | 10% | EDA 决定后续方向 |
| 阶段三 | 8-12h | 15% | 创新点是灵魂 |
| 阶段四 | 16-20h | 25% | 并行跑实验 |
| 阶段五 | 8-10h | 13% | 消融实验不可省 |
| 阶段六 | 20-24h | 30% | 论文质量 = 获奖概率 |
### 4 天赛制(MCM/ICM 美赛)
时间更充裕,可在阶段三加厚数学推导、阶段五做更多灵敏度分析,阶段六补充英文摘要。
---
## 参考文件(按需读取)
- `references/stage-checklist.md`:每个阶段的详细检查清单。
- `references/innovation-patterns.md`:常见创新模式与数学工具速查。
- `references/paper-structure.md`:论文各章节的写作模板与范例。
View on GitHub