Files
mcm-26-b/docs/算法审核与优化-20260911.md
2026-09-11 11:16:23 +08:00

103 lines
8.1 KiB
Markdown
Raw Permalink 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.
# 第三、四问算法审核与优化
依据:原始 `issue/B题.pdf` 第1—3页,重点为附录2(3)(4),并结合(1)(2)(5)(6)(8)与第三、四问要求。
审核起点为 `9cf9428` 的程序;最后一次官方第三问演练为 `3BW5-9R54-NZNA-MYB9`,
13/13源成功清除、虚拟总时间4058.709750秒。本轮改进验证使用本地模拟器,没有启动或消耗官方测试。
## 1. 题设约束及审查结论
附录2(3)中的交会是有宽度的角域交集。不能把两条示向线的交点当作精确真值,
也不能利用同地重测求平均缩小±1°误差。程序已保留完整角域及0.005°舍入裕量,
本轮继续使用该证据颁发清除证书。统计评分仅用于选点,不能替代保守几何证书。
附录2(4)要求逐频道检测,换频1秒;结合(5),每次停靠检测5秒且不能在移动中检测。
已有HTTP客户端是串行的,没有把20频道视为一次免费测量。缺陷在于规划成本和站点利用:
| 审核发现 | 影响 | 当前改进 |
| --- | --- | --- |
| 已停靠点只测UNKNOWN频道,已发现频道容易错失交会机会 | 之后为第二条方位线另走一段路 | 对DETECTED频道预测收缩;当前位置到整个候选集均小于1000m、未在此处测过且预测半径减少35%时,逐频道补测;每次仍支付5秒和实际换频成本 |
| 定位选点只计到测点的移动 | 测完后到清除区域的路程没有进入选点目标 | 加入候选检测点→候选源中心的接近代价,保留后续根据真实响应重新规划 |
| 候选方向固定在全局角度网格 | 与当前交会几何不对齐,可能产生多余绕行 | 增加以当前位置到候选中心为轴的对称候选;均仍位于距离保证盘内 |
| 路线代价中的service_s按初始频道一次估计 | 2-opt比较不同顺序时没有正确传递频道状态 | 路径成本逐任务传递频道,站内当前频道优先,clear保持频道;两个任务也比较完整开放路径成本 |
| 清除默认走到候选集包围圆心 | 未利用20米光学定位/清除范围 | 在证书允许范围内向当前位置平移目标;平移距离+原包围半径不超过阈值,保留三角不等式证明 |
| 七站环半径可调但没有执行覆盖校验 | 不合法调参可能把“都没测到”误作不存在 | 构造时检查解析覆盖界;不满足条件直接拒绝运行 |
| 第四问盘外探点无信号也可能记为定向遮挡 | 把接收距离不足误诊为已确认定向 | 仅当实际探点位于距离保证盘内才据无信号确认定向;盘外无信号保留不确定性 |
| 第四问发现一个源就离站定位,后续频道再返回原站 | 同站频道间产生长距离往返 | 保留49站定向覆盖,先逐频道扫完本站,再按当前位置就近处理已发现源 |
| 后备清除按初始位置距离静态排序 | 狭长候选集可能反复折返,且循环内无虚拟预算检查 | 每一步从当前位置选最近未处理格,并逐次检查虚拟预算 |
第三问所有源均为全向,才能用no_signal排除1000米圆盘。第四问源类型与朝向未知,
no_signal还可能是半平面遮挡,不能用上述排除规则,也不能直接沿用七站缺席证明。
本轮没有把BayesLoop套到第四问;第四问继续采用49站覆盖和独立的定向定位/后备清除。
回归用例包含(1800,0)向外发射的源:七站全无信号,49站中有站可检出。
七站覆盖界为 `max(r/√3, sqrt(R²+r²−√3Rr))`,前提是`0<r≤√3R`。
当前R=1800m、r=1159.7m,通过小于1000m的校验。网格滤波额外带Voronoi裕量,
故无源时仍可能留下边界格;此时完整七站覆盖可以证明缺席,不要求PF一定为空。
## 2. 验收口径
4000秒目标按整场虚拟总时间(包含移动、换频、全部检测、清除和缺席确认)比较,
没有在4000秒强行停止,也没有以只清除部分源或最后一次成功清除的时刻代替总时间。
题面表格的平均定位清除时间仍等于总时间除以实际清除源数。
第三问优化开发集固定为种子0—5、10/16源,加两个最小接收半径的圆周边界场景(14场)。
选择实现后停止调整,再运行种子100—105、10/13/16源的独立验证集(18场)。
同场景前后使用相同位置、频道、有效半径和逐点固定误差种子。
真值只传给本地模拟器和执行后的校验,不提供给算法;全部请求和响应保存。
有效运行要求:全部真实源清除、没有误判真实频道缺席、正常exit、无算法异常、逐步耗时复算一致。
| 第三问指标 | 旧版 | 改进后 |
| --- | ---: | ---: |
| 开发集全清且有效 | 14/14 | 14/14 |
| 开发集平均总时间 | 3812.97s | 3390.88s |
| 开发集最大总时间 | 5535.13s | 4624.97s |
| 开发集中小于4000s | 10/14 | 12/14 |
| 独立验证集全清且有效 | 18/18 | 18/18 |
| 独立验证集平均总时间 | 3799.72s | **3315.89s(减少12.73%)** |
| 独立验证集最大总时间 | 4569.47s | **3981.74s** |
| 独立验证集中小于4000s | 12/18 | **18/18** |
两个人工圆周边界场景改进后仍为4145.19s、4624.97s左右。因此本轮实现达成的是
独立验证组每场小于4000秒,**不是对全部合法题目场景的最坏时间保证**。
旧官方案例已经结束,无法对新路线查询其未知响应;本地结果不冒充官方同案例重跑。
更新后的官方成绩仍需新演练验证,不能由前后不同案例的数字直接得出提升比例。
## 3. 第四问结果
固定四场:10源/3定向,种子0、1;16源/8定向,种子2、3。覆盖朝向未知场景,
每场源分布与误差种子前后相同。旧版、改进版均4/4全清、正常退出、零异常和零计时偏差。
| 场景 | 旧版总时间 | 改进后总时间 |
| --- | ---: | ---: |
| 10源,种子0 | 18599.317s | 13652.140s |
| 10源,种子1 | 16709.225s | 14918.134s |
| 16源,种子2 | 16388.604s | 11635.398s |
| 16源,种子3 | 16983.270s | 12453.274s |
| 平均 | 17170.104s | **13164.737s(减少23.33%)** |
第四问尚未降到4000秒。保留域外49站是为未知朝向源提供发现证据;本轮优化减少重复移动,
没有用第三问假设缩小第四问覆盖范围。其后备清除仍是有预算上限的算法,不能据四场结果声称所有混合场景必定在预算内完成。
## 4. 数据及复现
- 第三问数据根目录:`output/q3/optimization-20260911/`,含冻结旧版代码、配置、逐场景真值、动作日志、summary及汇总。
- 最终开发集:`development/improved/results.json`;独立验证:`validation/verified/results.json`;对应旧版在各自`baseline/results.json`。
- 第四问:`output/q4/optimization-20260911/{baseline,improved}-{10,16}.json`。
- 中间开发试验也保留:同点补测、移动前瞻、路线终点、来向候选、路径计费及自适应发现。最终未采用均值变差的路线终点估计和未知频道自适应补扫。
- 回归测试:`pytest -q`,**166项全部通过**。新增用例验证串行6秒补测、不重复同地读数、频道状态成本、清除圆平移证书、无信号诊断及七站/49站的适用边界。
在项目根目录运行(label使用未存在的名称以保护已有证据):
```powershell
.venv/Scripts/python.exe scripts/benchmark_q3_revision.py --label rerun-development
.venv/Scripts/python.exe scripts/benchmark_q3_revision.py --label rerun-validation --suite validation
.venv/Scripts/python.exe scripts/benchmark_q3_revision.py --label rerun-baseline --suite validation --baseline
.venv/Scripts/python.exe scripts/benchmark_q4.py --seeds 0,1 --sources 10 --directional 3 --out output/q4/rerun-10.json
.venv/Scripts/python.exe scripts/benchmark_q4.py --seeds 2,3 --sources 16 --directional 8 --out output/q4/rerun-16.json
```
概率限制:网格幸存集是保守可行集,不是已知官方概率模型的精确贝叶斯后验。
均匀源分布、接收半径分布、代表读数和哈希误差均属测试或启发式假设。
完备覆盖与清除证书依赖题面给出的确定性边界,性能数字则依赖具体测试分布。