Files
mcm-26-b/docs/最优与基线实现对比.md
T
2026-09-12 16:58:25 +08:00

132 lines
7.6 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.
# 问题一至四:最优实现与基线实现对比
本文件是四问"最优实现 / 基线实现"对比的**论文口径说明**。代码与可复现
产物在仓库根目录 `project/`,运行 `uv run python -m project.run` 一次生成
`project/results/summary.md` 与逐问 `q1.md … q4.md`。本文件只摘录设计与结论,
数字以后者为唯一来源。
## 1. 交付物与目录
```text
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. 结论
1. 问题一:生产几何内核对状态、直径、覆盖三项与独立参考**逐案一致**;
朴素包围盒基线在覆盖判定上只有约 52% 准确率,且对固定反例全错。
2. 问题二:只有在"保证接收"约束内优化后验才既安全又有效;最优相对保守
基线把最坏后验半径从 0.5ρ 降到 0.10ρ,且与网格参考几乎重合。
3. 问题三:`bayes` 在相同全清率下把虚拟时间降到 `grid` 的约 1/5,
且逐场景配对 18/18 更快,说明"负观测感知 + 信息增益选点 + 全局排序"
三步都产生净收益。
4. 问题四:定向源的难点不是"发现"而是"证明缺席"与"失去信号后的清除";
直接搬用第三问策略会得到 24 次缺席误判,不可接受。`directional` 的
联合信念 + 后备清除是 11/11 全清的关键。
写论文时建议按"基线为什么错 → 最优补了哪一步 → 独立参考如何判定"的三段式
展开,并声明:随机分布是测试假设;基线时间快于最优的场景(如问题四 `bayes`)
不构成有效性优势,因为该局基线未完成全清任务。
## 5. 复现
```bash
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 # 几何回归
```