132 lines
7.6 KiB
Markdown
132 lines
7.6 KiB
Markdown
# 问题一至四:最优实现与基线实现对比
|
||
|
||
本文件是四问"最优实现 / 基线实现"对比的**论文口径说明**。代码与可复现
|
||
产物在仓库根目录 `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 # 几何回归
|
||
```
|