本技能应在用户要求"数学建模"、"建模比赛"、"数模论文"、"数学建模竞赛"、"建模分析"、"建模求解"或提及数学建模相关任务时使用。适用于全国大学生数学建模竞赛(CUMCM)、美国大学生数学建模竞赛(MCM/ICM)等各类数学建模比赛。
本技能为数学建模竞赛提供五阶段工作流:前置准备 → 建模分析 → 代码实现 → 论文撰写 → 编译自查,最终交付 LaTeX 论文项目及编译后的 PDF。
所有阶段必须遵守:
先读比赛规则文档,再读题目,再做任何其他事 — 页数限制、摘要长度、是否有目录、字号、附录政策等全部由规则文档决定。规则文档由用户提供,若未提供必须主动索要。
读题后立即把原题导出为 markdown 文件(如 C题.pdf → C题.md),后续所有阶段都基于此 md 文件对齐题意。
文献检索是必做任务,不是可选项。建模手与论文手都必须独立使用 paper_search 工具完成检索,并将命中文献写入产出文档。
每一问必须"先对比多方法,再建模":
论文交付形态是 LaTeX 项目,编译为单个 PDF,不交付 Word / Markdown / HTML。
排版失败即扣分:禁止出现"一页一张图 + 下方整片空白"、摘要溢出到第二页、章节标题孤悬页底等问题。排版最佳实践见 references/latex-guide.md。
按规则文档控制篇幅:正文页数、摘要长度、附录政策以比赛规则为准;没有规则文档时默认采用国赛惯例(正文 ≤ 25 页 + 摘要独占一页 + 参考文献和附录不计页数),但必须在产出中声明"采用默认值,待规则文档确认"。
建模创新 > 算法复杂度:数模竞赛的评分核心是数学推导的严密性 + 模型的原创性 + 问题抽象的深度,而不是"用了多新的算法"。候选方法不必非得从 assets/ 算法目录里挑,允许并鼓励:
唯一不允许的是造假(数据造假、结果编造、引用造假)。不要为了"显得高级"而硬套 LSTM / XGBoost / Transformer,用经典方法 + 严密推导反而容易得高分。
阶段零 前置准备
├── 0.1 获取并解析比赛规则文档(由用户提供)
├── 0.2 读题 → 导出 markdown → 检查附件 / 附录数据
└── 0.3 根据题型判断要读的算法文档
↓
阶段一 建模分析 ── 产出:题目分析报告.md、术语表格.md
↓
阶段二 代码实现 ── 产出:q1.py ~ qN.py、output/(csv + log + figures/)
↓
阶段三 论文撰写 ── 产出:paper/ LaTeX 项目
↓
阶段四 编译自查 ── 产出:paper/main.pdf + 自查清单通过
第一件事:询问用户是否提供了比赛规则文档(通常是 PDF 或竞赛官方通知)。
如果 有:使用 tools/pdf 读取,结构保真导出为 规则原文.md(保留原 PDF 所有字段,不做摘要化)。此文件即阶段三配置 main.tex、阶段四自查页数上限的事实来源。读取时必须在脑内过以下清单:
| 必读项 | 示例(国赛) | 影响 |
|---|---|---|
| 论文页数上限 | 正文 ≤ 25 页 | 控制正文篇幅、图表密度 |
| 摘要长度 | 一页、约 300-500 字 | 模板中的 abstract.tex 结构 |
| 是否要目录 | 国赛不要、美赛要 | main.tex 中 \tableofcontents 开关 |
| 字号 / 行距 / 边距 | 小四 / 1.5 倍 / 2.5cm | main.tex 的 geometry / \linespread 设置 |
| 附录政策 | 代码放附录、不计页数 | 附录的组织 |
| 参考文献格式 | GB/T 7714 / IEEE / APA | .bib 样式与 \bibliographystyle |
| 语言 | 中文 / 英文 | ctexart vs article |
| 文件命名与提交形式 | 如:承诺书+论文+源码压缩包 | 最终打包 |
如果 没有:必须主动提醒用户上传。未确认时沿用国赛默认值,并在产出文档顶部写明"以下约束基于国赛默认规则,待比赛规则文档确认后可能调整"。
用户自定义论文模板(第二来源):除了比赛规则文档,用户还可能提供自己的论文模板或格式要求(如工作目录下的 format.md / 格式要求.md / 学校 LaTeX 模板)。若为 PDF 则用 tools/pdf 导出为 md(命名如 用户模板.md);若本身已是 md / tex 直接读取原文件,不生成摘要文件。
格式优先级(从高到低,不得违反):
references/latex-template/,fallback)例如:比赛要求正文 ≤ 25 页,但用户模板默认 30 页时,必须按 25 页执行。
使用 tools/pdf 读取题目 PDF,立即导出为 markdown 文件(如 C题.pdf → C题.md),必须 100% 结构保真 + 美观排版,不是 pdfplumber/pypdf 抽完文本就算完。
结构保真硬性要求:
| 原题元素 | md 里必须落地的形式 |
|---|---|
| 标题、副标题层级 | 对应 #、##、###(按原题层级一一对应) |
| 自然段 | 独立段落,不要合并、不要换行切断 |
| 编号列表(问题 1 / 2 / 3、附表 1 / 2 / 3) | 对应 **问题 1**:… 或正规 markdown 有序列表 |
| 原题表格 | 必须还原为 markdown 表格,列名和数据一一对齐,不能丢列、不能合并单元格。公式用 $...$ |
| 原题中的数学符号 / 单位 | 保留 TC 3.1-6.2 mmol/L 等完整单位和区间;不得简写 |
| 中文标点 | 保留(,。:;""()),不要替换为半角 |
| 图 / 示意图 | 文字描述 "原题此处有图:XXX 示意图",不丢失信息 |
审核步骤(导出后必须执行):
X题.md,逐章逐表检查是否有丢失同步检查是否有附件目录(附录/、附件/、appendix/、data/ 等),若有,用 tools/xlsx 粗读每个 Excel 文件,记录行列数、列名、数据类型,写入 附件清单.md。附件清单同样要美观格式化:列字段表、数值范围、每列的含义和量纲。
读题后根据题目类型,针对性选读 assets/ 下的算法文档,而不是一股脑全读:
| 题目类型关键词 | 定点阅读 |
|---|---|
| 优化 / 调度 / 分配 / 最大化最小化 | assets/01-优化算法说明.md + assets/算法选择决策指南.md §1 |
| 预测 / 时间序列 / 未来趋势 | assets/02-预测类算法说明.md + 决策指南 §2 |
| 评价 / 排序 / 方案选优 | assets/03-评价类算法说明.md + 决策指南 §3 |
| 路径 / 网络 / 运输 | assets/04-图论与网络分析算法说明.md |
| 聚类 / 分类 / 降维 / 检验 | assets/05-统计分析与数据处理算法说明.md |
| 仿真 / 博弈 / 微分方程 / 马尔科夫 | assets/06-综合类算法说明.md |
| 机器学习 / 集成学习 / 异常检测 | assets/07-机器学习算法说明.md |
无论题型是什么,都必须通读:
references/problem-decomposition.md — 变量 / 约束 / 目标的系统提取协议assets/算法选择决策指南.md — 反模式清单 + head-to-head 对比先读:references/roles/建模手说明.md
按 references/problem-decomposition.md 的协议系统化执行:
每一问必须独立执行以下流程:
Step 1 头脑风暴 ≥ 3 种候选方法
├── 经典方法:参考 assets/ 算法目录(规划、预测、评价、图论、统计、综合、机器学习)
├── 组合方法:把 2+ 个基础方法拼起来(如 灰色预测 + ARIMA 残差修正)
├── 改造方法:改进经典算法的某个步骤(如 改造 TOPSIS 的距离度量)
└── 自创方法:从题目物理/经济/社会含义出发,自己推导新模型
(例如自建微分方程、自建效用函数、自建评价指标)
Step 2 用对比表筛选出 ≥ 2 种进入论文
└── 维度:适用性 / 精度 / 效率 / 可解释性 / 数据要求 / 创新性
Step 3 从 ≥ 2 种中选定 1 种作为"主方法"用于实际求解
└── 另外 1+ 种作为论文中的"对照方法"或备选
Step 4 在分析文档中记录:为何淘汰其余候选、为何选定主方法
关键点:
assets/ 算法目录。assets/ 是参考百科,不是必选项清单。鼓励自创、组合、改造(见关键原则 #8)。使用 tools/paper_search 为每一问的主方法搜索 ≥ 3 篇文献:
python tools/paper_search/scripts/openalex_scholar.py --query "grey prediction GM(1,1)" --email "[email protected]"
邮箱说明:OpenAlex API 只要求 mailto 字段存在,不验证邮箱真实性。脚本已默认 [email protected],无需问用户,直接跑。用户主动提供真实邮箱时可覆盖。
把命中文献写入 题目分析报告.md 的"参考文献信息"章节:论文名、作者、年份、期刊、DOI。这些文献后续进入 references.bib。
建立 术语表格.md(中文名 / 英文名 / 缩写 / 数学符号),后续所有阶段必须遵守此术语表,避免同一概念多种叫法。
| 文件 | 内容 |
|---|---|
X题.md | 阶段零导出的原题 md |
规则原文.md | 阶段零导出的比赛规则原文(若用户提供) |
附件清单.md | 阶段零产出的附件数据清单 |
题目分析报告.md | 本阶段:问题分解 + 多方法对比 + 方法选择 + 文献检索结果 + 依赖图 |
术语表格.md | 本阶段:术语对照表 |
先读:references/roles/编程手说明.md
编写任何代码前先确认编程语言(Python / MATLAB),用户未指定时必须主动询问。
按问分子目录(强制)。每问的 csv、log、figures 全部隔离在自己的子目录里,不要跨问混放。
project/
├── data/ 只读输入数据(题目附件)
├── q1.py 问题一:独立可跑
├── q2.py 问题二:独立可跑
├── ... qN.py
└── output/
├── q1/
│ ├── q1_*.csv 问题一数值结果(论文表格从这里摘抄)
│ ├── q1_log.txt 问题一运行日志
│ └── figures/ 问题一的图(PNG,300 dpi),命名 q1_fig01_xxx.png
├── q2/
│ ├── q2_*.csv
│ ├── q2_log.txt
│ └── figures/
└── q3/
└── ...
反模式(禁止):
output/ 根目录平铺 q1_*.csv、q2_*.csv、q3_*.csv,一个公共 output/figures/ 塞所有图figures/ 单独一级且不分问;多问之间文件名混在一起figures/ 子目录理由:论文写作阶段,\includegraphics{output/q2/figures/q2_fig05_xxx.png} 的路径清晰定位到"问题 2 第 5 张图";平铺结构导致一眼分不清归属。
代码只做三件事:计算 → 出图 → 输出数值和日志到 output/。
严禁代码越界承担论文手 / 建模手的工作:
optimal_method = "A"、# 方法A更优)print / 注释 / 文件里写结论性话语(如"本方法优于 XX")print 数值 + 标签(如 print(f"method_A obj={val:.3f}"))output/*.csv 里自然出现,由建模手 / 论文手解读后再决定怎么写论文np.random.seed(42) / random.seed(42) / torch.manual_seed(42) 等CONFIG = {...} 块,不散落在代码中间output/ 目录一键跑通(python q1.py 就够了)Path(__file__).parent / "data" / "xxx.csv",不写绝对路径q1.py ~ qN.py + output/q{n}/q{n}_*.csv + output/q{n}/q{n}_log.txt + output/q{n}/figures/q{n}_fig{k}_*.png
规则表 / 方案明细等"应当手动打成表格"的数据:只输出 CSV(如 q3_rule_table.csv、q3_sample_monthly.csv),不要画成 matplotlib 文字排版图(plot_rule_summary 这类把表格塞进图里的做法是反模式)。CSV 供论文手渲染成 LaTeX 三线表。
先读:
references/roles/论文手说明.mdreferences/latex-guide.md(必读:含排版最佳实践、避免空白页的技术细节)[标题页]
[摘要页] ← 独占一页,页面内容只有摘要 + 关键词
[目录] ← 按比赛规则决定是否保留
§1 问题重述
§2 问题分析 ← 整体思路 + 各问依赖图
§3 模型假设
§4 符号说明
§5 问题一的模型建立与求解
5.1 方法对比与选择 ← ≥ 2 种方法对比表 + 各自原理 + 选定理由
5.2 模型建立 ← 决策变量 / 目标函数 / 约束;自创或困难方法必须完整推导
5.3 求解过程
5.4 结果与分析 ← 引用 output/ 里的数值做表格、引用 figures/ 里的图 + 分析 + 灵敏度
§6 问题二的模型建立与求解 (同 §5 结构)
...
§N 模型评价与推广
[参考文献]
[附录] ← 完整代码(lstlisting)+ 运行数据(longtable)
摘要页必须是独立的一整页,不允许混入标题、目录、正文。技术实现见 references/latex-guide.md §"摘要独占一页"。
摘要内容结构:问题 → 方法 → 每问具体数值结果 → 结论 → 关键词(3-5 个)。
每问第一小节就是 方法对比与选择,即使建模阶段已经对比过,论文中也必须重新展开对比,原因:
对比表模板见 references/latex-template/question1.tex。
output/q{n}/figures/ 直接引入(按问分子目录)booktabs 三线表,禁止竖线\ref{} 引用,顺序与出现顺序一致数模评奖的核心不是"用了多高级的算法",而是数学推导的严密性 + 模型的原创性 + 问题抽象的深度。所以:
全文禁止出现的词汇 / 句式(详见 references/roles/论文手说明.md):
paper/ 项目目录(基于 references/latex-template/ 复制),编译产物 paper/main.pdf。
终审捷径:本阶段提供两个即插即用的审核 prompt,位于
references/review-prompts.md。分别用于论文审核(与题目交叉验证 + 至少 5 份得奖论文对标 + 用户痛点清单核对)和代码/运行结果审核(与题目交叉验证 + 正确性 / 可复现 / 职责边界 / 图表质量检查)。建议执行顺序:先跑 Prompt B 审代码(数值基础),再跑 Prompt A 审论文(论文数值引自代码产物)。下方 §4.2 手动清单作为补充 / 最终勾选用。
cd paper/
latexmk -xelatex main.tex
报错时读 main.log,修 .tex 后重编译,循环直到零错误产出 main.pdf。
排版与篇幅
内容硬伤
output/*.csv 找到来源)方法对比
数学推导
代码产物
q1.py ~ qN.py 都能从空 output/ 一键跑通去 AI 味 & 引用
\cite{} 在 references.bib 中有条目\ref{} 或 \eqref{} 引用当出现"一页一图 + 大片空白"时,优先级从高到低尝试:
[H] 改为 [htbp],允许 LaTeX 自主浮动subcaption 左右排布width(0.6–0.85\textwidth)\FloatBarrier(需 placeins 宏包)强制浮动体在本节内落位详细方案见 references/latex-guide.md §"浮动体与空白页避坑"。
| 类别 | 路径 | 用途 |
|---|---|---|
| 问题分解协议 | references/problem-decomposition.md | 阶段一变量/约束/目标提取 |
| 算法决策指南 | assets/算法选择决策指南.md | 每问方法对比的依据 |
| 算法百科 | assets/01-07-*.md | 按题型选读 |
| 角色工作指南 | references/roles/{建模手,编程手,论文手}说明.md | 各阶段详细规范 |
| LaTeX 模板 | references/latex-template/ | 阶段三起点 |
| LaTeX 排版指南 | references/latex-guide.md | 阶段三/四必读,含避坑 |
| 审核提示词 | references/review-prompts.md | 阶段四终审即插即用 prompt:论文审核 + 代码/运行结果审核,均与题目交叉验证 |
| 优秀论文 | references/Outstanding Thesis/ | 按需参考,非必读 |
| PDF 工具 | tools/pdf/ | 读题、读规则、读文献 |
| Excel 工具 | tools/xlsx/ | 读附件、写结果模板 |
| 文献搜索 | tools/paper_search/ | 阶段一必做 |