# 数学模型建立

> 面向全国大学生数学建模竞赛（CUMCM）本科组 A/B/C 的自动建模方案生成技能：输入赛题（原文/PDF/年份题号）与附件后，自动拆题、检索本地语料并深度联网搜索、对比候选建模路线、按需取数与清洗数据，最终产出《建模方案（模型与公式）》与《数据与来源》两份文档、建模思路图与汇总数据表。当用户要求“建立模型/选模型/给建模方案/出建模思路与公式/这题怎么做”时使用；只评论文用 数学模型评价，只评代码用 cumcm-code-reviewer，均不触发本技能。需要 Word 版时先做本机导出工具链检测，再导出两份 DOCX。

- Skill: `star1342354/skill` (Agent Skill, multi-file: 22 files)
- Install (CLI): `npx skillmds@latest add star1342354/skill`
- Raw SKILL.md: https://api.skillmd.com/api/skills/star1342354/skill/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: star1342354 (https://skillmd.com/u/star1342354)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/star1342354/skill

---


# 数学模型建立

面向国赛本科组（A/B/C）的**自动建模方案生成**技能。输入赛题（含附件）→ 拆题 → 本地语料 + 深度联网检索 → 候选路线对比 → 按需取数与清洗 → 两次人工门禁 → 产出可直接写进国赛论文的建模方案与数据文档。

**边界**：只产出建模方案，**不写求解代码**，不评论文、不评代码。只给论文要求评分走 `数学模型评价`；只给赛题+论文+代码要求核验走 `cumcm-code-reviewer`。非国赛（美赛/研赛/校赛）先说明本技能按国赛口径产出、结果仅供参考。

## 输入要求

1. **赛题**：原文、PDF 路径，或“年份+题号”。命中 `数学模型评价/work/赛题文本/<年><题>.md` 时直接复用；扫描件先 OCR。
2. **附件**：题给数据文件（csv/xlsx/txt/pdf）路径；确实无附件时明确记录“本题无题给附件”。
3. **输出路径**（可选）：未指定时用 `建模方案\<年><题>-<题目简称>\`。

年份题号无法确定时问用户，不要猜。三要素齐全前不要进入第 3 步。

## 执行流程（严格按序，不得跳步）

1. **定位与取文**：确定 年份+题号 → 取赛题文本（本地或 OCR）→ 清点附件，逐个确认可读（xlsx/csv 先看行列与字段）。
2. **拆题冻结（逐问四遍法，硬性）**：对**每一问**分别走完四遍，四遍记录逐问留痕（写进《问项卡》的「四遍记录」栏，缺任何一遍视为未完成拆题）。**其中 ①② 必须由"无技能预读会话"先行完成**——编排者派发的独立会话，**不加载任何 skill**，只读赛题原文与附件，产物封为 `_handoff/S1_preread.md` 并哈希登记；目的是不让本技能的写作惯例与选型偏好先入为主：
   - ① **抄读**（无技能预读会话）：把该问原文逐句摘出（连同相关附表、附注、单位与图表标题），只抄不解释，标页码；
   - ② **自解**（无技能预读会话）：不看任何历史方案、结论与本技能材料，自己列出该问要什么——对象、变量、目标、约束、必须输出的量/表/文件、精度与格式红线；
   - ③ **对照核缺**（本技能会话）：把②的清单逐条回原文找依据（句级），无依据的划掉、原文有而清单漏的补上；同时核对该问要求与附件字段的对应关系（哪一列、哪个时间点、哪个单位）；
   - ④ **反读复核**（本技能会话）：站在阅卷人角度反查歧义、多解、隐含条件、单位与量纲陷阱、必须提交的表/图/文件；把结论与①的原文并列比对，确认无增删走样。③④ 若发现①②有误，回原文改①②并在《问项卡》注明"预读更正"。
   四遍走完再列出「要建什么模型 / 需要什么数据 / 必须给出哪些量、表、文件 / 红线是什么」，形成**问项卡**并冻结，中途不增删、不放宽收紧。红线来自题目硬性要求（指定时刻、指定指标、指定文件格式、指定单位）。
3. **数学化理解题意（数据检索前的硬前置）**：先只用数学语言把题目"翻译"一遍，产出《数学问题定义》，读 `references/数学化理解题意.md` 并按其中的检查表执行（**逐问分别写，不合并**；每问的数学化结论必须能回溯到第 2 步该问的①原文摘录）：
   - 列清 已知量 / 未知量 / 决策变量 / 待标定参数，各自量纲与取值范围；
   - 写出一句话的**数学问题陈述**：在什么约束下，求什么目标的最优值/估计/判定/排序；
   - 判定数学问题类型（优化、机理与微分方程、统计推断、预测、评价、分类聚类、图论网络、随机与仿真，可复合）；
   - 说明**数据在模型中的角色**：模型输入的已知量、需要标定的参数、需要验证的观测量，还是决策的输出；
   - 做可解性判断：自由度是否闭合、量纲是否齐次、规模与精度要求、能否解析求解、需不需要数值或启发式方法。
   **由此推导《数据需求清单》**：每个待获取量写清口径、粒度、时间与空间范围、精度、用途（标定/验证/输入/无需）。后面的检索与取数只围绕这份清单展开，禁止"先找数据再想模型"。
   最后把《数学问题定义》逐句回读题面，核对是否漏约束、误读题意。
4. **本地检索**：按需读 `数学模型评价/references/problem_cards/<年><题>.md`、本技能 `references/选型库.md`、`数据集\算法写作模板\`、同题获奖论文的方法分布（`训练语料/papers_anchors/`、`papers_text/`）→ 生成**候选模型池**。
5. **深度联网检索（中英双线）**：按 `references/检索与引用规范.md` 执行。三路并行：题目专属资料（同题解读、官方数据口径）、方法学文献（先用 `scripts/search_literature.py` 跑一轮中英双线检索，再按需追到全文；中文线 + 国际线，走 OpenAlex / Crossref / arXiv / DOAJ / Europe PMC / RePEc 等 API 与 Springer、Nature、IOP、Project Euclid 等全文站点，中文标准走国标全文公开系统）、可复用实现（GitHub）。深搜档要求每题不少于 15 个可用来源，其中境外英文权威来源不少于 6 个（含至少 2 篇方法原始文献、至少 3 篇近 5 年综述或应用），并对每个主选模型做至少一次"同类方法对比或综述"检索；抓取优先用 `curl.exe` + 浏览器 UA（内置请求在 doi.org、国标全文系统等处会误报失败）。登记**来源表**：标题、作者、年份、类型、级别、语言、URL/DOI、访问日期、可达状态、支撑哪条结论。**若国际文献给出更贴合题意的模型或算法，采用它并写明取舍理由与出处。**
6. **候选路线对比**：给出 2–4 条完整路线，按适配性、数据需求、可检验性、计算成本、创新性、风险逐项对比，写明主选与备选及理由。对比时要回到第 3 步的《数学问题定义》与《数据需求清单》，检查每条路线所需的量是否真的拿得到。**若联网检索发现比本地常见做法更贴合题意的模型或算法，以更合适者为准**，并在方案中写明取舍依据与出处；本地选型库是先验候选池，不是白名单。
7. **【门禁一】数据确认（仅需要外部数据的题）**：按第 3 步的《数据需求清单》检索候选数据源 → 自动下载到 `data\raw\` → 清洗到 `data\clean\` → 出质量报告与 `data\汇总数据.xlsx` → **暂停，把"数据是否满足清单要求（口径、范围、精度）"连同来源一起交给用户，明确询问是否采用**。用户否决则回到数据源选择重做，不得带病进入建模。纯建模题（无外部数据需求）跳过此门禁，并在方案中注明"本题不依赖外部数据"。
8. **【门禁二】模型定稿确认**：把选定方案摘要交用户过一眼：假设、符号、各问模型与公式骨架、检验计划、数据口径。确认后落稿；用户改选则按新路线重跑第 6–7 步受影响部分。
9. **产出与自检**：按下方交付物落盘 → 运行 `scripts/check_deliverable.py` 自检 → 对照 `references/检验清单.md` 补齐漏项 → 输出结论摘要（选定模型、关键公式、数据来源、主要风险）。
10. **导出 Word（按需或按项目约定）**：先运行 `scripts/check_docx_toolchain.py` 检测本机可用的解释器与工具；检测通过再运行 `scripts/export_docx.py` 导出两份 DOCX。检测不通过时先尝试安装依赖或改用 `MODELING_PY` 指定的解释器，两条路都走不通就**停下来问用户**（说明缺什么、给可选方案），不得把公式写成纯文本硬造 Word 版。
11. **交付打包（收尾必做）**：按**用户指定路径**建立文件夹 `论文建模`，把两份 DOCX、思路图、Markdown 源稿与 `data/` 一并归集过去，并生成《交付清单.md》：`scripts/package_deliverables.py --src <交付目录> --base <用户路径>`。用户没给路径时先用工作区根目录并明确告知实际落盘位置；文件夹名默认 `论文建模`，用户另有要求时用 `--folder` 覆盖；同一路径下已有其它题目的交付物时保留原目录。

## 交付前严格自检（缺一不得过门禁 B，逐条留痕）

1. **公式可直接实现**：每一问的每个模型必须给齐——变量表（符号/含义/单位/取值或取值范围）、控制方程、边界条件（类型与具体表达式）、初始条件、参数来源（题给/文献/估计，各标出处）、离散与求解思路。缺任何一项视为该问未完成。
2. **验收标准（怎么算做对）**：每问写明判据——与什么对照（解析解/退化情形/守恒/网格收敛/文献基准）、残差或误差的量级要求、收敛判据与步长。没有验收标准的模型不得进方案。
3. **量纲齐次**：逐式检查等式两边量纲一致；经验式必须写明变量单位与适用温区，禁止照抄公式不带单位。
4. **假设可检验**：每条假设标注「依据 / 可检验性（怎么验、用什么量）/ 若不成立的后果」；"为简化而设"的假设必须写清简化代价的估计量级。
5. **题面逐条对齐**：把赛题每一条要求（含表号、时刻、位置、小数位、文件名、工作表结构）映射到方案的落点；缺落点即列为未闭环并当场补齐。
6. **数据可追溯**：附件字段→清洗规则→模型输入的量表一一对应；任何外部数据给来源与许可，禁止用不可追溯的数。
7. **风险清单**：列出 3–5 条最可能出错的地方（数值稳定性、参数敏感性、边界处理、单位陷阱），各写一条验证计划。
8. **公式版式核对（硬）**：题面公式一律不得只靠文本提取判读。凡含**分式、上下标、根号、绝对值**的公式，必须用 PDF 布局信息（`page.get_drawings()` 找横线 + span 坐标）或渲染页面逐条核对，并在方案里留痕（核对方式 + 证据坐标/截图路径）。系数、指数、分母写错会改变整题量级，属最高级别风险。

自检通过的结论写入方案末页《交付前自检表》（逐条打勾 + 证据位置），并作为 S1 回执字段随回执提交。

## 交付物

默认目录 `建模方案\<年><题>-<题目简称>\`（用户指定路径优先；**任何情况都不写入 `数据集\`**）：

| 路径 | 内容 |
|---|---|
| `01_建模方案_模型与公式.md` | 建模总流程与逐问 Mermaid 思路图、假设、符号表、各问模型与编号公式、求解思路、检验与灵敏度方案、候选对比表、模型优缺点、论文章节映射；参考文献用 GB/T 7714 尾注 |
| `02_数据与来源.md` | 字段说明、来源与获取方式、清洗规则、质量报告、局限与替代数据源 |
| `data\raw\` / `data\clean\` | 原始文件原样保存 / 清洗后结果，二者都必须保留 |
| `data\汇总数据.xlsx` | 清洗数据按表分 sheet + “来源与字段”sheet |
| `diagrams\*.png` | 思路图渲染结果（渲染失败时保留 Mermaid 源码并在文档中注明） |

写作要求见 `references/建模方案模板.md` 与 `references/数据文档模板.md`；公式必须编号且编号连续，尾注编号必须与正文一一对应，禁止出现未被引用的参考条目。

**方案正文只写建模思路（硬要求）**：`01_建模方案_模型与公式.md` 是**可独立阅读的建模文档**，只写——问题与目标、符号与单位、模型假设（逐条带依据）、控制方程与边界/初值、逐问建模、求解思路、主要结果、验证要点、模型评价与局限、参考文献（GB/T 7714，正文引注与题录一一对应，**不得删减题录**）。
**过程性内容不得塞进方案正文**：勘误与修订说明、收敛史与变体穷举、性能对比、TODO 回填表、交付口径明细、变更摘要、任务书引用等，一律另存为同目录下的独立文件（如 `勘误说明_*.md`、`修订记录_*.md`、`交付口径.md`），在方案里最多用一句话指向。

需要 Word 版时，两份文档各导出一份 `.docx`（默认与 Markdown 同目录）：**导出前必须先按 `references/文档导出与工具检测.md` 检测工具链**，公式以高清图片嵌入，导出后按同文件第二节复核。

全部产出完成并按第 10 步归集后，最终交付位置为 `<用户指定路径>\论文建模\<年><题>-<题目简称>\`；该目录内应包含两份 DOCX、`图片/`、两份 Markdown、`data/` 与《交付清单.md》。

## 脚本

解释器查找顺序（命中即用）：① 环境变量 `MODELING_PY` → ② `CUMCM_PYTHON` → ③ 技能同级 `工具\环境配置.json` 的 `python`（安装脚本写入）→ ④ `工具\code_env`、`工具\ocr_env` 虚拟环境 → ⑤ 当前/系统 Python。都找不到时按《文档导出与工具检测》的规则停下询问用户，不要硬造。

| 脚本 | 用途 |
|---|---|
| `scripts/make_figures.py` | 用数据生成图表：折线/柱状/散点/双轴/时间轴，自动加数据标注与中文图注，输出 PNG+SVG 并生成《绘图清单.md》（可复现） |
| `scripts/check_docx_toolchain.py` | 导出 Word 前的环境检测：解释器与包、LibreOffice/WPS/Word、在线兜底是否可用，并给出“可导出/需询问用户”的结论 |
| `scripts/check_docx_render.py` | 页面级版式校验：把导出的 PDF 逐页统计文字量、图片数、空白页与内容贴边情况（需先用办公软件把 DOCX 导成 PDF） |
| `scripts/package_deliverables.py` | 收尾归集：在用户指定路径下建 `论文建模` 文件夹，复制两份 DOCX、图片、Markdown 与 data，并生成《交付清单.md》 |
| `scripts/export_docx.py` | 把建模方案与数据文档导出为 DOCX（公式转高清图片、表格与思路图排版、参考文献成表） |
| `scripts/search_literature.py` | 国际文献检索：并发查 OpenAlex / Crossref / arXiv / DOAJ，去重后输出 Markdown + CSV 来源表（可设 `OPENALEX_API_KEY` 免匿名限流） |
| `scripts/fetch_data.py` | 下载数据到 `data\raw\`，记录 URL/来源/时间/HTTP 状态/sha256，追加写入 `data\sources.csv` |
| `scripts/clean_data.py` | raw → clean，出质量报告（缺失/重复/异常/类型/量纲）与清洗日志 |
| `scripts/build_xlsx.py` | clean 目录 → `data\汇总数据.xlsx`（多 sheet + 来源与字段） |
| `scripts/render_mermaid.py` | 方案文档中的 Mermaid 块 → `diagrams\*.png`（kroki.io / mermaid.ink，失败自动跳过） |
| `scripts/check_deliverable.py` | 交付前自检：问项覆盖、公式编号连续、尾注闭合、图与数据文件存在、来源字段齐全、未写入 `数据集\` |
| `scripts/build_selection_library.py` | 用 `训练语料/papers_anchors` 重算 `references/选型库_语料统计.md`，供选型库更新 |

赛题/附件 OCR 复用 `cumcm-code-reviewer/scripts/ocr_pdf.py`（同一 Python 环境）；未安装该技能时请用户直接提供可提取文本，不要拿其他脚本顶替。

## 强制规则

- **不编造**：文献、数据、结论三项都要有可打开的出处；打不开或不确定的来源标注“未能核实”，不得当作依据。禁止以 AI 洗稿站、文库、无署名聚合页作为唯一依据。
- **数据可追溯**：原始文件必须原样保留在 `data\raw\`，清洗只写 `data\clean\`；清洗规则写进数据文档，保证他人能复现。
- **该做的检验必须做**：按 `references/检验清单.md` 对所选模型逐项给“做/不做+理由”，不得整节留空。
- **两次门禁不得省略**：数据确认（第 6 步）与模型定稿确认（第 7 步）必须真实暂停并等用户答复。
- **只读不改**：`数据集\`、`训练语料\`、`数学模型评价\`、`代码编写评价\` 只读引用，不修改其中任何文件；本技能的产出只写自己的工作目录。
- **不写求解代码**：方案里给求解步骤、算法流程与工具建议；用户另行要求代码时再单独处理。
- **表格必须原生**：方案与数据文档中的表格一律写成 Markdown 表格（导出后为 Word 原生表格），列出表头、单位与口径；**禁止**用截图、图片或公式块冒充表格。
- **数据图必须由 Python 生成**：含数据标注、坐标轴、图例、误差棒的图一律用 `scripts/make_figures.py` 之类的脚本生成，并把数据文件、图表定义（JSON）与《绘图清单.md》随交付物保存，保证换数据后可一键复现；禁止用生成式图像工具绘制数据图，也禁止手工修改图上的数值标注。公式图与 Mermaid 思路图属例外，可用图片。
- **先数学化再取数**：任何检索与数据获取之前，必须先产出《数学问题定义》与《数据需求清单》；方案里缺这一节视为不合格。
- **导出前先检测环境**：任何 Word/PDF 导出都必须先跑 `scripts/check_docx_toolchain.py`；工具缺失时先尝试补齐，补不齐就停下来问用户，不得用纯文本或改名文件冒充。
- **收尾必须归集**：任务结束前要在用户指定路径的 `论文建模` 文件夹里留一份完整交付物（两份 DOCX + 图片 + Markdown + data + 交付清单）；用户未指定路径时先问，或默认工作区根目录并说明实际位置。

## references 索引

- `选型库.md`：问题类型 → 候选模型/算法 → 适用条件 → 必备检验 → 常见坑（先验候选池）。
- `选型库_语料统计.md`：由 243 篇获奖论文档案统计得到的“年题 × 方法关键词”分布，用于校准选型先验。
- `检索与引用规范.md`：来源分级、国际学术来源清单与实测可达性、双线检索广度要求、“更合适的模型”判定与采纳规则、GB/T 7714 尾注模板、证据登记要求。
- `数据获取手册.md`：国内外公开数据源清单（含国际门户与 API）、抓取合规与降级路径。
- `建模方案模板.md` / `数据文档模板.md`：两份交付物的固定章节与写法。
- `检验清单.md`：按模型类型的必做检验与灵敏度/稳健性要求。
- `文档导出与工具检测.md`：Word 导出的环境检测规则、导出流程、DOCX 排版约定与常见故障处置。
- `数学化理解题意.md`：数据检索前的审题检查表、《数学问题定义》与《数据需求清单》模板、回读核对与高频误读清单。

