Files
mcm-26-b/docs/paper
2026-09-13 19:37:19 +08:00
..
2026-09-13 18:05:59 +08:00
2026-09-13 18:05:59 +08:00
2026-09-13 18:43:25 +08:00
2026-09-13 19:37:19 +08:00
2026-09-11 02:33:19 +08:00
2026-09-13 19:16:47 +08:00
2026-09-12 14:48:43 +08:00
2026-09-13 18:43:25 +08:00
2026-09-13 18:43:25 +08:00

论文与支撑材料

论文依据赛题、2026 年格式规范及所给往届参考 PDF 编写,四问的模型、推导与结果分析 均以论文正文与附录为准;本文件只说明论文工程如何重算与编译。 版式采用项目原始 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 --robot-id <队号> \
    --counts 10,13,16 --seeds 300-314
uv run python scripts/run_practice_episodes.py --problem 4 --robot-id <队号> \
    --counts 10,13,16 --directional-cycle 3,6,8 --seeds 400-439

采集脚本启动评测机并调用生产策略对接接口,真值与行为日志由评测机写入 referee-data/sessions/<案例编码>/。判定标准为 清完全部源 ∧ 无缺席误判 ∧ 主动退出 ∧ 零异常 ∧ 零失败清除: 只看“是否清完”会放过“清完了但中途大量 /clear 打空”的无效局, 这类局的总虚拟时间被无效试探撑大,故不纳入统计。 被排除的局保留在 referee-data/rejected-sessions/; build_practice_data.py 按案例编码白名单只统计论文声明的批次。

交付文件

  • main.pdf:论文、演练局数据清单、正式数据清单与四问核心函数代码附录。
  • main.tex、sections/:可编辑 LaTeX 源文件。
  • data/practice-results.json、practice-results.csv:44 局演练局的结构化复算结果。
  • 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/(HeitiSC / SongtiSC / Times New Roman,约 150 MB), 该目录已在 .gitignore 中排除、不入库,mcm26b-paper.cls 通过 Path = fonts/ 引用。 若克隆后缺少该目录,按 mcm26b-paper.cls 中的「若未携带 fonts/ 目录」注释把那几行 \setCJKmainfont / \setmainfont 换成系统字体即可照常编译。

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。