7.6 KiB
问题一至四:最优实现与基线实现对比
本文件是四问"最优实现 / 基线实现"对比的论文口径说明。代码与可复现
产物在仓库根目录 project/,运行 uv run python -m project.run 一次生成
project/results/summary.md 与逐问 q1.md … q4.md。本文件只摘录设计与结论,
数字以后者为唯一来源。
1. 交付物与目录
project/
├── README.md 设计原则、各问对比设计、口径与边界
├── common.py 方法描述 / 指标聚合 / 落盘 / 闭环装配
├── run.py 统一入口(--question/--quick)
├── results/ 自动生成:q1.md/json … q4.md/json + summary.md
├── q1/ optimal.py baseline.py reference.py cases.py compare.py
├── q2/ optimal.py baseline.py reference.py region.py cases.py compare.py
├── q3/ optimal.py baseline.py compare.py
└── q4/ optimal.py baseline.py compare.py
角色边界:
- 最优实现:直接适配
src/mcm26b中已由 pytest 固化的生产实现, 不重写算法; - 基线实现:同题下更朴素、但能独立跑通的对照,不共享最优实现的关键步骤;
- 独立参考:与分析算法正交的数值/枚举标准,用于判定谁对谁错。
第三、四问统一走 LocalSimulator 内存回环(与官方 HTTP 协议同一边界),
真值只在评测机侧;有效性判定沿用项目口径:
全清 ∧ 无缺席误判 ∧ 正常 /exit ∧ 零异常 ∧ 逐微秒计时复算一致。
2. 四问方法设计对照
| 问 | 最优实现 | 基线实现 | 独立参考 | 主要指标 |
|---|---|---|---|---|
| 1 | 半平面交 + 顶点对精确直径 + Welzl MEC + 覆盖反例 | 网格采样 + 包围盒对角线代理直径/覆盖 | 大框半平面裁剪 + 暴力直径/MEC | 状态、直径误差、覆盖准确率、耗时 |
| 2 | 保证接收盘内最小最坏后验半径(生产选点器) | ① 垂直 1000 m 最大交会角;② 候选集 MEC 圆心 | 保证接收盘内 9×9 网格枚举 | 保证接收率、最坏后验半径、移动时间 |
| 3 | bayes:粒子滤波 + 信息增益 + 滚动 2-opt |
grid:49 点网格 + 就近服务;seven:七点批量 |
冻结基准集 + 真值全清校验 | 全清率、虚拟时间及其分布 |
| 4 | directional:31 点定向覆盖 + 联合信念 + 后备清除 |
问题三策略直接搬用(bayes / grid) |
冻结基准集(core+boundary) | 全清率、缺席误判、虚拟时间 |
3. 对比结果
3.1 问题一(40 个随机交会算例)
| 指标 | 最优 | 基线 |
|---|---|---|
| 状态判定准确率 | 100% | 100% |
| 直径平均绝对误差 | 0.000 m | 4.583 m(最大 14.60 m) |
| 直径圆覆盖判定准确率 | 100% | 52.5% |
| 平均耗时 | 0.11 ms | 22.35 ms |
固定示例进一步给出结构性反例(examples/q1,解析期望由
tests/test_geometry*.py 固化):
normal:直径 26.99 m,直径圆不覆盖定位区域(最优判否、基线判是);triangle:直径 40.00 m 的等边三角形反例,最小包围圆半径 23.09 m > 20 m, 直径圆不覆盖;基线因"包围盒中心 + 对角线"恒判覆盖;poor:近共线检测点 → 无界,最优/基线/参考一致判无界;segment:零误差退化线段,最优判线段 D=100 m 且覆盖成立,基线退化为点;empty:观测不相容 → 空集。
基线的两处结构性缺陷:直径用包围盒对角线在斜/细长区域系统性高估; 覆盖用包围盒中心圆则恒判"能覆盖",恰好丢掉问题一要考的反例。
3.2 问题二(30 个随机首次示向度,初始 ρ 均值 681.5 m)
| 方法 | 保证接收率 | 最坏后验均值 | 终值比 ρ'/ρ | 移动均值 |
|---|---|---|---|---|
| 最优(保证盘内最小最坏后验) | 100% | 73.89 m | 0.104 | 170.4 s |
| 基线① 垂直 1000 m 最大交会角 | 0% | 80.11 m | 0.116 | 200.0 s |
| 基线② MEC 圆心 | 100% | 340.75 m | 0.500 | 136.3 s |
| 参考(保证盘内网格枚举) | 100% | 75.63 m | 0.106 | 170.3 s |
基线①说明"只追交会角"会在本题失败:首次角域可延伸到 1500 m, 真源在远端时第二点距离超过 1000 m,测量直接
no_signal。 基线②保证接收但后验几乎不收缩(≈0.5ρ)。最优在同等保证下把后验压到 0.10ρ, 且与网格参考几乎重合(生产采样质量足够)。
3.3 问题三(18 个冻结 core 场景,全向 10/13/16 源)
| 方法 | 有效局 | 全清率 | 虚拟时间均值 | 中位 | 检测均值 | 请求均值 | 位移均值 |
|---|---|---|---|---|---|---|---|
最优 bayes |
18/18 | 100% | 3188.7 s | 3111.3 s | 111.1 | 124.1 | 12338 m |
中间 seven |
18/18 | 100% | 5361.7 s | 5367.5 s | 100.8 | 113.8 | 23508 m |
基线 grid |
18/18 | 100% | 14935.7 s | 15275.1 s | 430.6 | 443.6 | 61550 m |
配对变化:bayes 相对 grid 虚拟时间 −78.4%(18/18 场景更快),
seven 相对 grid −63.7%。全部 54 局零异常、计时复算一致。
3.4 问题四(11 个冻结 core+boundary 场景,含朝外发射的边界定向源)
| 方法 | 有效局 | 全清率 | 缺席误判 | 虚拟时间均值 | 后备清除均值 |
|---|---|---|---|---|---|
最优 directional |
11/11 | 100% | 0 | 9069.9 s | 24.8 |
基线 grid(49 点全向) |
0/11 | 67% | 0 | 18179.2 s | 0 |
基线 bayes(七站全向缺席证明) |
0/11 | 77% | 24 | 3890.8 s | 0 |
两条搬用基线的失效机理不同:
bayes用七站环的全向缺席证明,遇到背离圆心发射的边界定向源时 会把真源直接判成 ABSENT(累计 24 次 缺席误判,属"快而错",其虚拟时间 不可与最优直接比较);grid的 49 点覆盖对定向源发现是完备的,但缺少 定向观测推理与 ≤20 m 后备清除,定位停滞只能停在 DETECTED("稳而不全")。 最优directional两种工况都是 11/11 全清、零误判,代价是多花时间与 平均 24.8 次后备清除。
4. 结论
- 问题一:生产几何内核对状态、直径、覆盖三项与独立参考逐案一致; 朴素包围盒基线在覆盖判定上只有约 52% 准确率,且对固定反例全错。
- 问题二:只有在"保证接收"约束内优化后验才既安全又有效;最优相对保守 基线把最坏后验半径从 0.5ρ 降到 0.10ρ,且与网格参考几乎重合。
- 问题三:
bayes在相同全清率下把虚拟时间降到grid的约 1/5, 且逐场景配对 18/18 更快,说明"负观测感知 + 信息增益选点 + 全局排序" 三步都产生净收益。 - 问题四:定向源的难点不是"发现"而是"证明缺席"与"失去信号后的清除";
直接搬用第三问策略会得到 24 次缺席误判,不可接受。
directional的 联合信念 + 后备清除是 11/11 全清的关键。
写论文时建议按"基线为什么错 → 最优补了哪一步 → 独立参考如何判定"的三段式
展开,并声明:随机分布是测试假设;基线时间快于最优的场景(如问题四 bayes)
不构成有效性优势,因为该局基线未完成全清任务。
5. 复现
uv run python -m project.run # 四问全部(约 3–4 分钟)
uv run python -m project.run --question 1 # 只跑问题一
uv run python -m project.run --quick # 缩小算例/基准集规模
uv run pytest tests/test_geometry.py tests/test_geometry_certificates.py -q # 几何回归