baseline
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
# 1-4 问「最优实现 / 基线实现」对比框架
|
||||
|
||||
本目录**不是**比赛运行时代码,而是把四问的生产实现与独立基线放在同一口径下
|
||||
配对对比、生成可写进论文的"算法对比"证据。运行时代码仍只有 `src/mcm26b`,
|
||||
`project/` 只依赖它和测试侧内存回环,不反向污染求解入口。
|
||||
|
||||
## 1. 设计原则
|
||||
|
||||
| 角色 | 含义 | 约束 |
|
||||
| --- | --- | --- |
|
||||
| **最优实现** | 复用 `src/mcm26b` 中已由测试固化的生产实现 | 不复制算法,只做 I/O 适配 |
|
||||
| **基线实现** | 同题下更朴素、但能独立跑通的对照 | 不得共享最优实现的关键步骤 |
|
||||
| **独立参考** | 与分析算法正交的数值/枚举标准 | 用于判定谁对谁错,而非自证 |
|
||||
|
||||
- 第三、四问走 `LocalSimulator` 内存回环,与官方 HTTP 协议同一边界;
|
||||
真值只在评测机侧,策略端只看响应,因此"全清率/缺席误判"是可信的。
|
||||
- 闭环有效性判定沿用项目口径:**全清 ∧ 无缺席误判 ∧ 正常 `/exit` ∧ 零异常
|
||||
∧ 逐微秒计时复算一致**,任何一项不满足该局记为无效,失败不静默丢样本。
|
||||
- 所有对比都按 `scene_id` 配对,汇总同时给均值、中位、最大与相对基线的
|
||||
配对变化,避免"均值好看但逐局更差"。
|
||||
|
||||
## 2. 目录结构与职责
|
||||
|
||||
```text
|
||||
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. 运行方式
|
||||
|
||||
```bash
|
||||
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` 固化,本框架在其上补齐"朴素基线错在哪"。
|
||||
- 问题二"最坏后验半径"是**对候选集外包多边形的启发式评估**,不是连续问题
|
||||
的全局最优证明;生产实现与参考网格共享该目标函数,只比较搜索质量。
|
||||
- 问题三、四的随机分布(源位置均匀、误差场逐点固定等)是**测试假设**,
|
||||
题面未规定;正式成绩以官方模拟器演练/正式测试为准。
|
||||
- 基线不是稻草人:`q2` 的 MEC 圆心、`q3` 的 `seven`、`q4` 的 `grid` 都是
|
||||
能独立跑通、在部分场景有效的真实方法;它们暴露的是"缺了哪一步"。
|
||||
Reference in New Issue
Block a user