Files
mcm-26-b/docs/paper/README.md
T
2026-09-13 18:05:59 +08:00

101 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 论文与支撑材料
论文依据 issue 题目、2026 年格式规范及所给往届参考 PDF 编写,四问算法对应 docs/algo-1.md 至 algo-4.md。版式采用项目原始 mcm26b-paper.cls。
## 数据分工(本轮调整的核心约定)
| 用途 | 数据来源 | 在论文中的位置 |
| --- | --- | --- |
| 机制论证与定量结论 | **自建模拟器**(`referee/`)演练局,本次采集 44 局 | 正文全部表格与插图 |
| 最优实现与朴素基线的配对对比 | `project/`(内存回环,四问同口径) | 正文“实验结果与分析” |
| 最终效果验证 | **官方模拟器**六份正式导出包,无可读真值 | 附录 A 及附录 C 数据清单 |
正文数字与插图全部由脚本从日志复算生成,不手抄:`scripts/build_practice_data.py` 复算演练局,
`scripts/plot_paper_figures.py` 据同一份数据绘图;复算累计虚拟时间与评测机日志记录的最大偏差为 0.000000 s。
演练局可重新采集(固定种子、可重放):
uv run python scripts/run_practice_episodes.py --problem 3 --counts 10,13,16 --seeds 300-314
uv run python scripts/run_practice_episodes.py --problem 4 --counts 10,13,16 \
--directional-cycle 3,6,8 --seeds 400-439
采集脚本启动评测机并调用生产策略对接接口,真值与行为日志由评测机写入
`referee-data/sessions/<案例编码>/`。判定标准为
`清完全部源 ∧ 无缺席误判 ∧ 主动退出 ∧ 零异常 ∧ 零失败清除`:
只看“是否清完”会放过“清完了但中途大量 /clear 打空”的脏数据,
这类局的总虚拟时间被无效试探撑大,必须排除。
被排除的局保留在 `referee-data/rejected-sessions/`,历史留档保留在
`referee-data/superseded-sessions/`;`build_practice_data.py` 按案例编码白名单
只统计论文声明的批次。
## 交付文件
- main.pdf:论文、演练局数据清单、正式数据清单与四问核心函数代码附录。
- main.tex、sections/:可编辑 LaTeX 源文件。
- data/practice-results.json、practice-results.csv:25 局演练局的结构化复算结果。
- data/formal-results.json、formal-results.csv、audit.md:六份正式测试数据、复算结果与校验说明。
- support-materials.zip:源码、自建模拟器、演练局与正式日志、统计快照、论文工程及逐文件哈希清单。
- REWRITE_NOTES.md:本次修订及验证说明。
## 正文数据
演练局问题三 15 局、问题四 29 局,源数覆盖 10 至 16,问题四定向源覆盖 3/6/8 个;
**44 局全部清完全部源且失败清除为零**,累计清除 557 个源。
问题三平均总虚拟时间 3261.579 s,问题四 8401.445 s,移动时间占比 78.1% 与 75.8%。
正式测试六次累计清除 75 个源,清除失败为零;仅用于附录中的效率与结论验证。
## 重算与编译
在项目根目录执行:
python scripts/run_practice_episodes.py --problem 3 --seeds 300-314 # 需要时重采演练局
python scripts/build_practice_data.py # 演练局复算,生成正文数据、表格与宏
python scripts/plot_paper_figures.py # 生成正文全部插图
python scripts/audit_paper_formal.py --snapshot docs/paper/data/formal-results.json
python scripts/build_paper_support.py # 附录正式数据表与支撑包
`audit_paper_formal.py` 的第一种调用需要原电脑的官方统计队列;
快照模式重算统计并校验现有正式包的哈希,来源匹配仍需官方统计队列。
进入 docs/paper 执行:
latexmk -xelatex -interaction=nonstopmode -halt-on-error main.tex # 产物 main.pdf
latexmk -xelatex -interaction=nonstopmode -halt-on-error -outdir=build main.tex # 产物 build/main.pdf
两条口令都完成交叉引用所需的多遍编译,输出均为 57 页。
需要 TeX Live 的 XeLaTeX、ctex、TikZ,以及原项目 docs/paper/fonts/ 目录。
### VS Code(LaTeX Workshop)
仓库根的 `.vscode/settings.json` 已把默认配方设为
**`latexmk (xelatex, outdir=build)`**,即上面的第二条口令;
另有 `latexmk (xelatex, paper)`(就地产出 `main.pdf`)与
`xelatex (单遍,调试用)` 两个配方可手动切换。
默认配方写 `build/` 而不是就地写 `docs/paper/main.pdf`,原因是 Windows 下
PDF 预览会锁住已打开的 `main.pdf`,此时 `xdvipdfmx` 报 `gave an error` 且不产出 PDF,
表现为“保存后编译没反应”。写到 `build/` 后预览读的是 `docs/paper/build/main.pdf`,
与源码目录互不抢占,`latex-workshop.latex.autoBuild.run: onSave` 才能稳定工作。
若确需就地产出,切换配方后请先关闭 PDF 预览。
> `data/*.tex` 一律使用 LF 换行。CRLF 会让 `\input` 进表格的数据行在 TeX 缓冲中提前 `\par` 化,
> 触发 booktabs 的 “Misplaced \noalign”;表格因此整表生成,正文只 `\input` 完整 table 环境。
生成附录核心函数清单(数据源为单文件核心代码 ipynb,需先更新该 ipynb):
python scripts/build_code_appendix.py
在项目根目录生成支撑包(需要原电脑的 Jammers-simulator-full 正式包):
python scripts/build_paper_support.py --package
## 排版与复算
正文采用原模板的字体、标题、页边距及页码设置,图解与表题统一使用中文。
附录代码直接取自单文件核心代码 ipynb,数学符号由导言区的 lstlisting 样式 corecode 映射。
正文使用集合估计、凸外包、清除充分条件、网格幸存集滤波、信息增益、前向半盘最小命中集、
位置与朝向联合信念和最近邻路径排序等概念描述模型。
附录只收录四问主线的核心函数(32 个,约 1300 行),评测机、命令行外壳、采集与绘图脚本、
测试以及未被采用的方案不进入论文;完整可执行程序见支撑包的 mcm26b-核心代码.ipynb。