mcm26b — CUMCM 2026 B 题:无线电干扰源的快速自动定位与清除
本仓库为参赛论文(docs/paper/main.tex)的可复现支撑材料:
提供四问的完整可运行程序、自建模拟器、论文全部数据与插图的生成脚本。
算法本身的推导、证明与结果分析见论文,本文件只说明怎么跑、怎么复现。
1. 环境
- Python ≥ 3.10;运行时依赖仅
requests,测试与自检另需pytest、numpy。 - 自建模拟器
referee/为零第三方依赖的独立包,uv sync时作为开发依赖一并挂载。 - 复现论文 PDF 另需 TeX Live(XeLaTeX、ctex、TikZ)。论文用字体在
docs/paper/fonts/, 该目录约 150 MB、已在.gitignore中排除、不入库;缺失时按docs/paper/mcm26b-paper.cls中的「若未携带 fonts/ 目录」注释改用系统字体即可编译。
uv sync # 安装主包与 referee(可编辑挂载)
2. 运行程序(问题三 / 问题四闭环)
队号不在代码中固化:登录标识属身份信息,一律在运行时通过 --robot-id 传入,
代码、测试、示例与日志中只出现与赛事无关的中性占位符(如 TEAM-0001)。
# 对接官方模拟器(先在界面确认测试已开始、接口就绪)
uv run python -m mcm26b.cli run --robot-id <队号> --problem 3
uv run python -m mcm26b.cli run --robot-id <队号> --problem 4
# 一键本地评测:自动起自建模拟器 → 开一局演练 → 跑完整闭环 → 汇总
uv run python -m mcm26b.cli run --robot-id <队号> --problem 3 --local-judge
# 不连任何模拟器的自检(随机场景,内存回环)
uv run python -m mcm26b.cli run --robot-id SELFCHECK --problem 3 --self-test
# 复现附件计时示例(期望 105/111/194/199 秒)
uv run python -m mcm26b.cli sim-check
主要开关:--strategy {bayes,seven,grid}(仅问题三,默认 bayes)、
--base-url、--log <路径>、--real-budget-s(仅自检生效)。
问题一 / 问题二
uv run python -m mcm26b.cli q1 examples/q1/normal.json -o output/q1/result.json
uv run python -m mcm26b.geometry examples/q1/triangle.json
examples/q1/ 下的五个算例分别覆盖正常多边形、劣交会、零误差线段、不相容观测与直径圆反例。
仓库根的 main.py 只是转发到同一 CLI 的薄壳(python main.py <子命令>),
等价于 python -m mcm26b.cli <子命令>。
3. 自建模拟器(referee/)
按题面附件 1《模拟器使用说明》与附件 2《通信接口说明》实现,与参赛队代码零耦合, 只通过 HTTP 协议对接;论文正文的演练数据即由它产生。
uv run python -m referee # WebUI http://127.0.0.1:8026,接口 :2026
uv run python -m referee --data-dir referee-data
- WebUI 复现官方测试流程:四个模块(演练不限次 / 正式各 3 次)、确认→5 秒倒计时→ 25 分钟窗口、指令与反馈流、中止需两次确认、结束原因、行为日志导出;
- "回放"页可用本局行为日志动画复现运动与扫描过程,也支持手动导入任意 JSONL;
- 自建差异(联网登录、官方校时、加密上传属官方服务器侧,本地不实现;
误差场与场景分布为测试假设)见
referee/README.md。
4. 复现论文数据(referee-data/ → 宏与表格)
referee-data/sessions/ 收录论文正文引用的 44 局演练日志(问题三 15 局、问题四 29 局),
referee-data/rejected-sessions/ 保留同批采集中被判定为无效的 11 局以便复核。
python scripts/build_practice_data.py # 复算演练局 → 宏、整表、CSV/JSON 快照
python scripts/audit_paper_formal.py --snapshot docs/paper/data/formal-results.json
python scripts/build_paper_support.py # 附录正式数据表与支撑包
- 第一条按题面计时模型逐动作复算,输出
docs/paper/data/practice-*.tex与practice-results.{json,csv};复算值与评测机记录的最大偏差应为 0.000000 s。 运行结束会打印局数、全清局数与平均虚拟时间,可直接与论文数字对照。 - 第二条校验官方六份正式导出包与统计快照的对应关系(来源匹配需原电脑的官方统计队列)。
- 第三条生成附录表格与
support-materials.zip(--package)。
需要重新采集演练局时
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 打空"的无效局。
5. 复现论文插图
uv run python scripts/plot_paper_figures.py # 生成 docs/figures/*.png
脚本只读 docs/paper/data/ 下的复算结果与第四问覆盖计划,不手抄任何数字;
图内文字与图注数据均来自同一次复算。插图清单、数据来源与生成命令见
docs/figures/README.md 与 docs/figures/manifest.json。
6. 编译论文
cd docs/paper
latexmk -xelatex -interaction=nonstopmode -halt-on-error -outdir=build main.tex # 产物 build/main.pdf
latexmk -xelatex -interaction=nonstopmode -halt-on-error main.tex # 产物 main.pdf
两条口令都完成交叉引用所需的多遍编译。VS Code 的 LaTeX Workshop 配置见
.vscode/settings.json(默认配方为前者)。细节与注意事项见
docs/paper/README.md。
7. 单文件核心代码与测试
uv run pytest # 全部测试(本包 + referee)
python scripts/build_core_notebook.py # 由 src/mcm26b 生成单文件核心代码
python scripts/run_notebook_cells.py # 顺序执行 notebook 全部代码单元(零依赖自检)
mcm26b-核心代码.ipynb 是四问生产实现的单文件版本
(约 5000 行),不含评测机、命令行外壳、采集/绘图脚本与测试;
src/mcm26b/ 保留与之逐字对应的模块化版本。
8. AIGC 使用合规记录
竞赛要求如实记录 AI 使用情况。本项目使用的 AI 编程助手(ChatGPT/Codex 桌面版、 DeepSeek Harness)在本目录内的全部会话,已从本机客户端存储中提取并汇编为一份合规记录:
| 文件 | 说明 |
|---|---|
docs/aigc-compliance-record.tex |
LaTeX 源文件(58 页):编制说明、使用总览、环境与权限配置、逐会话逐轮次详细记录、合规性说明、附录 |
docs/aigc-compliance-record.pdf |
编译成品 |
记录覆盖 11 个会话 / 34 个工作轮次 / 31 条人工提示词 / 1508 次工具调用, 跨 2026-09-10 20:52 至 2026-09-13 18:51(UTC+8)。每条目给出该轮次的 发生时间、执行环境与上下文(含提示词全文)、大模型实际操作概要(工具调用分类、 写入文件、代表性命令、模型对外结论)。
编译(需 ctex / longtable / booktabs):
cd docs
latexmk -xelatex -interaction=nonstopmode aigc-compliance-record.tex
记录由审计脚本从
~/.codex/sessions/、~/.codex/state_5.sqlite、~/.dsh/sessions/中工作目录等于本仓库的会话自动提取生成,原始记录未经改写;提取与统计脚本 存于tmp/aigc/(该目录按.gitignore不入库)。会话如何归属本项目、 哪些存储被核查后排除,见记录第 1 节与附录 A.4。
9. 目录结构
src/mcm26b/ 四问求解实现:config / protocol / geometry / belief / coverage /
guarantee / planner / particles / routing / evaluation / harness
referee/ 自建模拟器(独立包,零第三方依赖,不依赖本队代码)
referee-data/ 论文数据来源:演练日志(sessions / rejected-sessions)、正式统计快照
tests/ 本包测试(含运行时零导入 referee 的解耦守卫)
docs/paper/ 论文 LaTeX 源、数据与宏、编译说明
docs/figures/ 论文插图(PNG)与来源清单
docs/ AIGC 使用合规记录(aigc-compliance-record.tex / .pdf)与本目录索引
examples/ 问题一算例与回放归档
scripts/ 复现脚本:数据复算、插图绘制、正式数据核对、采集与基准
project/ 四问"最优实现 / 基线实现"配对对比框架(论文对比表的来源)
issue/ 赛题、附件与格式规范(原始材料)
docs/paper/REWRITE_NOTES.md 记录论文各轮修订与验证过程(含数据重采与问题修复)。