Files
mcm-26-b/project
2026-09-13 18:05:59 +08:00
..
2026-09-12 16:58:25 +08:00
2026-09-12 16:58:25 +08:00
2026-09-12 16:58:25 +08:00
2026-09-12 16:58:25 +08:00
2026-09-12 17:01:49 +08:00
2026-09-12 16:58:25 +08:00
2026-09-12 16:58:25 +08:00
2026-09-13 18:05:59 +08:00
2026-09-12 16:58:25 +08:00

1-4 问「最优实现 / 基线实现」对比框架

本目录不是比赛运行时代码,而是把四问的生产实现与独立基线放在同一口径下 配对对比、生成可写进论文的"算法对比"证据。运行时代码仍只有 src/mcm26b, project/ 只依赖它和测试侧内存回环,不反向污染求解入口。

1. 设计原则

角色 含义 约束
最优实现 复用 src/mcm26b 中已由测试固化的生产实现 不复制算法,只做 I/O 适配
基线实现 同题下更朴素、但能独立跑通的对照 不得共享最优实现的关键步骤
独立参考 与分析算法正交的数值/枚举标准 用于判定谁对谁错,而非自证
  • 第三、四问走 LocalSimulator 内存回环,与官方 HTTP 协议同一边界; 真值只在评测机侧,策略端只看响应,因此"全清率/缺席误判"是可信的。
  • 闭环有效性判定沿用项目口径:全清 ∧ 无缺席误判 ∧ 正常 /exit ∧ 零异常 ∧ 逐微秒计时复算一致,任何一项不满足该局记为无效,失败不静默丢样本。
  • 所有对比都按 scene_id 配对,汇总同时给均值、中位、最大与相对基线的 配对变化,避免"均值好看但逐局更差"。

2. 目录结构与职责

project/
├── README.md             本文件
├── common.py             公共层:方法描述、指标聚合、结果落盘、闭环装配
├── run.py                统一入口:一次跑完四问并生成 results/
├── results/              自动生成:q1.md/json … q4.md/json + summary.md
├── q1/                   问题一:交会定位区域直径与直径圆覆盖
│   ├── optimal.py        最优:半平面交 + 顶点对精确直径 + Welzl MEC + 覆盖反例
│   ├── baseline.py       基线:网格采样 + 轴对齐包围盒对角线代理
│   ├── reference.py      参考:大框 Sutherland–Hodgman 半平面裁剪 + 精确直径/MEC
│   ├── cases.py          固定示例(examples/q1)+ 随机交会算例
│   └── compare.py        同案配对:状态/直径/覆盖/耗时
├── q2/                   问题二:第二检测点选择
│   ├── optimal.py        最优:保证接收盘内最小最坏后验半径(生产选点器)
│   ├── baseline.py       基线:垂直 1000 m 最大交会角 / 候选集 MEC 圆心
│   ├── reference.py      参考:保证接收盘内稠密网格枚举
│   ├── region.py         K1 = Ω ∩ 角域 ∩ B(s,1500) 统一构造
│   ├── cases.py          随机首次示向度算例
│   └── compare.py        统一评估器:保证接收、最坏后验、移动代价
├── q3/                   问题三:全向源闭环
│   ├── optimal.py        最优:bayes(粒子滤波 + 信息增益 + 滚动 2-opt)
│   ├── baseline.py       基线:grid(49 点网格)/ seven(七点批量)
│   └── compare.py        冻结基准集 core 配对对比
└── q4/                   问题四:含定向源闭环
    ├── optimal.py        最优:directional(联合信念 + 后备清除 + 定向覆盖计划)
    ├── baseline.py       基线:把问题三策略直接搬用(bayes / grid)
    └── compare.py        冻结基准集 core+boundary 配对对比

3. 各问对比设计

问题一(q1/)

  • 最优:mcm26b.geometry.localization.solve,半平面交求凸多边形,顶点对 枚举直径,Welzl 最小包围圆,并输出直径圆覆盖判断、圆外顶点与最大超出距离。
  • 基线:固定大框网格采样,直径取包围盒对角线、覆盖取"包围盒中心 + 代理直径圆"。它在斜/细长区域上系统性高估直径,并对任意包围盒都几乎恒判覆盖。
  • 参考:从 ±1e7 m 大框出发逐半平面 Sutherland–Hodgman 裁剪,独立实现 直径暴力枚举与 1/2/3 点支撑圆暴力最小包围圆。与最优实现共享 0 个内部步骤。
  • 指标:状态判定、直径绝对误差、直径圆覆盖准确率、运行耗时。

问题二(q2/)

  • 候选集 K1 = Ω ∩ W(s,θ±δ_eff) ∩ B(s,1500),三个方法共用同一次构造。
  • 最优:保证接收盘 B(MEC 圆心, 1000−ρ) 内环形采样,最小化"目标边界点 × 读数区间端点"的最坏后验半径,移动时间同分决胜;保证接收严格,采样是启发式。
  • 基线:① 垂直首次示向度 1000 m 的"90° 交会点"——忽略接收保证,真源在 角域远端时必然 no_signal;② 候选集 MEC 圆心——保证接收但交会角可能最差。
  • 参考:保证接收盘内 9×9 网格枚举同一目标函数,检验生产采样接近网格最优。
  • 指标:保证接收率、最坏后验包围半径、收缩量、移动时间。

问题三(q3/)

  • 最优 bayes:网格粒子滤波幸存集 + 期望信息增益选点 + 滚动 2-opt 任务排序。
  • 基线 grid:49 点(700 m 步长)网格发现 + 就近服务;seven:七点解析 覆盖 + 同站批量扫频,作为"覆盖证明 + 批量调度"的中间对照。
  • 冻结基准集 harness.suites(种子/源数版本化),逐局校验全清与计时复算。
  • 指标:全清率、均值/中位/最大虚拟时间、检测数、请求数、位移、墙钟。

问题四(q4/)

  • 最优 directional:31 点定向覆盖计划 + 朝向遮挡推理 + (位置×朝向) 联合 信念 + ≤20 m 有限圆盘后备清除。
  • 基线:把问题三策略原样搬用——bayes 的七站全向缺席证明会把朝外定向源 误判为 ABSENT("快而错");grid 的 49 点覆盖对定向源发现完备,但无后备清除, 定位停滞只能停在 DETECTED("稳而不全")。
  • 冻结基准集 core+boundary,其中 boundary 场景全部为背离圆心发射的边界定向 源,是最不利工况。
  • 指标:全清率、缺席误判数、虚拟时间、后备清除次数、墙钟。

4. 运行方式

uv run python -m project.run                  # 四问全部,写入 project/results/
uv run python -m project.run --question 1     # 只跑问题一
uv run python -m project.run --quick          # 缩小随机算例/基准集规模

project/ 用到 numpy(网格参考解)。它随 dev 依赖组(optuna)安装; 只跑正式求解入口 mcm26b 不需要它。

5. 结果文件

文件 内容
results/q1.md / q1.json 固定示例 + 随机算例的逐案明细与汇总
results/q2.md / q2.json 逐案第二点位置、保证接收、最坏后验与汇总
results/q3.md / q3.json 冻结基准集逐场景明细、逐方法汇总、配对变化
results/q4.md / q4.json core+boundary 逐场景明细与汇总
results/summary.md 四问核心指标总览 + 方法映射 + 目录结构

6. 口径与边界(写论文时必须一并声明)

  • 问题一参考解与最优实现都是精确算法;固定示例的解析期望另有 tests/test_geometry*.py 固化,本框架在其上补齐"朴素基线错在哪"。
  • 问题二"最坏后验半径"是对候选集外包多边形的启发式评估,不是连续问题 的全局最优证明;生产实现与参考网格共享该目标函数,只比较搜索质量。
  • 问题三、四的随机分布(源位置均匀、误差场逐点固定等)是测试假设, 题面未规定。本框架的结果用于正文的"最优实现 / 基线"配对对比章节; 正文的机制论证与定量结论另取自自建模拟器(referee/)的演练局, 正式成绩以官方模拟器的六次正式测试为准(论文附录 A)。
  • 基线不是稻草人:q2 的 MEC 圆心、q3 的 seven、q4 的 grid 都是 能独立跑通、在部分场景有效的真实方法;它们暴露的是"缺了哪一步"。

7. 与论文的对接

python scripts/build_paper_support.py 会读取本目录的 results/*.json, 生成 docs/paper/data/project-macros.tex 与两张对比整表 (project-q3-table.tex、project-q4-table.tex),正文直接 \input 使用, 不手抄任何数字。修改本目录的对比口径后,重新运行该脚本即可同步论文。