数学模型建立
面向国赛本科组(A/B/C)的自动建模方案生成技能。输入赛题(含附件)→ 拆题 → 本地语料 + 深度联网检索 → 候选路线对比 → 按需取数与清洗 → 两次人工门禁 → 产出可直接写进国赛论文的建模方案与数据文档。
边界:只产出建模方案,不写求解代码,不评论文、不评代码。只给论文要求评分走 数学模型评价;只给赛题+论文+代码要求核验走 cumcm-code-reviewer。非国赛(美赛/研赛/校赛)先说明本技能按国赛口径产出、结果仅供参考。
输入要求
- 赛题:原文、PDF 路径,或“年份+题号”。命中
数学模型评价/work/赛题文本/<年><题>.md时直接复用;扫描件先 OCR。 - 附件:题给数据文件(csv/xlsx/txt/pdf)路径;确实无附件时明确记录“本题无题给附件”。
- 输出路径(可选):未指定时用
建模方案\<年><题>-<题目简称>\。
年份题号无法确定时问用户,不要猜。三要素齐全前不要进入第 3 步。
执行流程(严格按序,不得跳步)
- 定位与取文:确定 年份+题号 → 取赛题文本(本地或 OCR)→ 清点附件,逐个确认可读(xlsx/csv 先看行列与字段)。
- 拆题冻结(逐问四遍法,硬性):对每一问分别走完四遍,四遍记录逐问留痕(写进《问项卡》的「四遍记录」栏,缺任何一遍视为未完成拆题)。其中 ①② 必须由"无技能预读会话"先行完成——编排者派发的独立会话,不加载任何 skill,只读赛题原文与附件,产物封为
_handoff/S1_preread.md并哈希登记;目的是不让本技能的写作惯例与选型偏好先入为主:- ① 抄读(无技能预读会话):把该问原文逐句摘出(连同相关附表、附注、单位与图表标题),只抄不解释,标页码;
- ② 自解(无技能预读会话):不看任何历史方案、结论与本技能材料,自己列出该问要什么——对象、变量、目标、约束、必须输出的量/表/文件、精度与格式红线;
- ③ 对照核缺(本技能会话):把②的清单逐条回原文找依据(句级),无依据的划掉、原文有而清单漏的补上;同时核对该问要求与附件字段的对应关系(哪一列、哪个时间点、哪个单位);
- ④ 反读复核(本技能会话):站在阅卷人角度反查歧义、多解、隐含条件、单位与量纲陷阱、必须提交的表/图/文件;把结论与①的原文并列比对,确认无增删走样。③④ 若发现①②有误,回原文改①②并在《问项卡》注明"预读更正"。 四遍走完再列出「要建什么模型 / 需要什么数据 / 必须给出哪些量、表、文件 / 红线是什么」,形成问项卡并冻结,中途不增删、不放宽收紧。红线来自题目硬性要求(指定时刻、指定指标、指定文件格式、指定单位)。
- 数学化理解题意(数据检索前的硬前置):先只用数学语言把题目"翻译"一遍,产出《数学问题定义》,读
references/数学化理解题意.md并按其中的检查表执行(逐问分别写,不合并;每问的数学化结论必须能回溯到第 2 步该问的①原文摘录):- 列清 已知量 / 未知量 / 决策变量 / 待标定参数,各自量纲与取值范围;
- 写出一句话的数学问题陈述:在什么约束下,求什么目标的最优值/估计/判定/排序;
- 判定数学问题类型(优化、机理与微分方程、统计推断、预测、评价、分类聚类、图论网络、随机与仿真,可复合);
- 说明数据在模型中的角色:模型输入的已知量、需要标定的参数、需要验证的观测量,还是决策的输出;
- 做可解性判断:自由度是否闭合、量纲是否齐次、规模与精度要求、能否解析求解、需不需要数值或启发式方法。 由此推导《数据需求清单》:每个待获取量写清口径、粒度、时间与空间范围、精度、用途(标定/验证/输入/无需)。后面的检索与取数只围绕这份清单展开,禁止"先找数据再想模型"。 最后把《数学问题定义》逐句回读题面,核对是否漏约束、误读题意。
- 本地检索:按需读
数学模型评价/references/problem_cards/<年><题>.md、本技能references/选型库.md、数据集\算法写作模板\、同题获奖论文的方法分布(训练语料/papers_anchors/、papers_text/)→ 生成候选模型池。 - 深度联网检索(中英双线):按
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、访问日期、可达状态、支撑哪条结论。若国际文献给出更贴合题意的模型或算法,采用它并写明取舍理由与出处。 - 候选路线对比:给出 2–4 条完整路线,按适配性、数据需求、可检验性、计算成本、创新性、风险逐项对比,写明主选与备选及理由。对比时要回到第 3 步的《数学问题定义》与《数据需求清单》,检查每条路线所需的量是否真的拿得到。若联网检索发现比本地常见做法更贴合题意的模型或算法,以更合适者为准,并在方案中写明取舍依据与出处;本地选型库是先验候选池,不是白名单。
- 【门禁一】数据确认(仅需要外部数据的题):按第 3 步的《数据需求清单》检索候选数据源 → 自动下载到
data\raw\→ 清洗到data\clean\→ 出质量报告与data\汇总数据.xlsx→ 暂停,把"数据是否满足清单要求(口径、范围、精度)"连同来源一起交给用户,明确询问是否采用。用户否决则回到数据源选择重做,不得带病进入建模。纯建模题(无外部数据需求)跳过此门禁,并在方案中注明"本题不依赖外部数据"。 - 【门禁二】模型定稿确认:把选定方案摘要交用户过一眼:假设、符号、各问模型与公式骨架、检验计划、数据口径。确认后落稿;用户改选则按新路线重跑第 6–7 步受影响部分。
- 产出与自检:按下方交付物落盘 → 运行
scripts/check_deliverable.py自检 → 对照references/检验清单.md补齐漏项 → 输出结论摘要(选定模型、关键公式、数据来源、主要风险)。 - 导出 Word(按需或按项目约定):先运行
scripts/check_docx_toolchain.py检测本机可用的解释器与工具;检测通过再运行scripts/export_docx.py导出两份 DOCX。检测不通过时先尝试安装依赖或改用MODELING_PY指定的解释器,两条路都走不通就停下来问用户(说明缺什么、给可选方案),不得把公式写成纯文本硬造 Word 版。 - 交付打包(收尾必做):按用户指定路径建立文件夹
论文建模,把两份 DOCX、思路图、Markdown 源稿与data/一并归集过去,并生成《交付清单.md》:scripts/package_deliverables.py --src <交付目录> --base <用户路径>。用户没给路径时先用工作区根目录并明确告知实际落盘位置;文件夹名默认论文建模,用户另有要求时用--folder覆盖;同一路径下已有其它题目的交付物时保留原目录。
交付前严格自检(缺一不得过门禁 B,逐条留痕)
- 公式可直接实现:每一问的每个模型必须给齐——变量表(符号/含义/单位/取值或取值范围)、控制方程、边界条件(类型与具体表达式)、初始条件、参数来源(题给/文献/估计,各标出处)、离散与求解思路。缺任何一项视为该问未完成。
- 验收标准(怎么算做对):每问写明判据——与什么对照(解析解/退化情形/守恒/网格收敛/文献基准)、残差或误差的量级要求、收敛判据与步长。没有验收标准的模型不得进方案。
- 量纲齐次:逐式检查等式两边量纲一致;经验式必须写明变量单位与适用温区,禁止照抄公式不带单位。
- 假设可检验:每条假设标注「依据 / 可检验性(怎么验、用什么量)/ 若不成立的后果」;"为简化而设"的假设必须写清简化代价的估计量级。
- 题面逐条对齐:把赛题每一条要求(含表号、时刻、位置、小数位、文件名、工作表结构)映射到方案的落点;缺落点即列为未闭环并当场补齐。
- 数据可追溯:附件字段→清洗规则→模型输入的量表一一对应;任何外部数据给来源与许可,禁止用不可追溯的数。
- 风险清单:列出 3–5 条最可能出错的地方(数值稳定性、参数敏感性、边界处理、单位陷阱),各写一条验证计划。
- 公式版式核对(硬):题面公式一律不得只靠文本提取判读。凡含分式、上下标、根号、绝对值的公式,必须用 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:数据检索前的审题检查表、《数学问题定义》与《数据需求清单》模板、回读核对与高频误读清单。