2026 年 4 月 30 日,我建立了一个公开的多波束测线规划基准仓库,同日发布 v0.1.0。代码、派生的 CSV/JSON、图表、环境文件和数据引用从这一天起可以对外查到。这个日期只对应数值规划包的公开节点,不对应出航、海上试验或测量验收。
重新整理这份仓库时,我先把这几个概念拆开。它处理的是公开海底地形先验上的规划问题:比较固定航向测线的方向、非均匀间距、路径长度、预测覆盖、过度重叠和局部修复。船体姿态、声速剖面、导航控制、波束级声学和原始声呐产品都不在当前证据里。规划结果可以重算,测量结果还没有发生。
公开包保存的是计算链
基准使用 GEBCO 2025 Grid 和 USGS Southern Cascadia 30 m 复合海底地形产品,仓库为两者保留了 DOI。体量较大的原始数据没有提交;需要重跑导入时,仍要回到官方 DOI 页面取得对应产品。仓库里留下的是小型处理缓存、派生表格和分析入口。
这个安排牺牲了“克隆以后立即拥有全部数据”的便利,却把归属关系保留下来:一张图或一个覆盖数字来自哪项公开数据、经过哪个入口生成、写入哪份表格。上游产品如果更新,旧结果不会因此自动变成新结果,重跑者也不能绕过数据版本重新解释它。
environment.yml 记录了 Python、NumPy、Pandas、Matplotlib、Rasterio 等环境项。当前代码锚点也包含 check_release_readiness.py:它在 5 月 23 日首次加入,并在 7 月 12 日的 a51dcf1d 中更新,用来检查当前公开树是否缺少必需文件和目录,以及是否混入禁止路径或禁止词。这个脚本不在 4 月 v0.1.0 的标签树中,也不负责数值重跑;它只说明后来的仓库结构增加了一层发布前检查。
所以我没有用 7 月的整理结果反向装饰 4 月的 Release。前者说明当前树怎样约束文件和声明,后者保存当时公开的代码与派生产物。对这份基准而言,“可重放”至少要能回答数据从哪里来、脚本从哪里运行、输出落在哪里;它没有承诺所有机器的耗时一致,也没有把存档包写成海测产品。
一条得分更高的测线仍可能失败
在公开网格上,路径长度、预测覆盖率和过度重叠可以形成几项直观指标。问题是,这些汇总值会压掉空间位置。更短的线路可能丢掉局部覆盖,平均重叠平稳的线路也可能在峡谷壁或坡度变化处留下集中缺口。
这也是仓库没有只保存一张最终路径图的原因。网格分辨率、先验误差、覆盖阈值、最大未覆盖块、局部单元重叠和修复决策被拆成不同诊断。优化器回答“在当前假设下哪条线路得分更高”,这些诊断继续追问“假设变动以后,它会从哪里失效”。两类问题需要同时留下。
粗先验到细网格的回放给出了最直接的一次提醒。诊断在 300x240 的细网格上,回放用 120、300、600 和 900 米先验网格选出的布局,并为混合方法使用 20 个种子。在高复杂度裁剪上,混合方法的回放可行率从 120 米时的 1.00 降到 900 米时的 0.35;低、中复杂度场景在同一组表里更稳定。
单看这组数字,不能得出“900 米先验普遍不可用”的结论。地形复杂度必须留在表里:只报告四种尺度的总体印象,会掩盖高复杂度场景先失效的事实。先验越粗,可能减少栅格计算量,也可能丢掉局部结构;这两件事必须放在同一张判断表里。
结构化先验误差又增加了三种更具体的偏差:相关低频偏差、坡度放大偏差和局部峡谷壁偏差,每个场景仍使用 20 个种子。两个 GEBCO 场景与 USGS 高复杂度场景没有给出同一种响应,后者更容易暴露固定间距方案的过度重叠与可行性问题。这些公开网格扰动只是规划层压测,不能被改称为任务日志或部署验证。
流偏移代理只是一种比较条件
流偏移回放把流速和方向映射成残余横向偏移、航向扰动、低频足迹变化,以及与地形耦合的足迹缩小。相同场景和扰动下的不同方法使用共同随机数,因此比较落在同一组扰动样本上。它适合观察固定测线几何在代理扰动中的相对差异,不构成流体动力学模型。
执行风险修复再把部分流偏移、航向和足迹风险从事后回放移入候选布局的选择。我后来才把这件事想清楚:已知的失效条件不必等到最终图表里才出现,也可以提前成为拒绝候选的理由。但目标函数仍然缺少反馈控制、流体动力学、声速不确定性和任务日志。它只让数值目标更难通过,尚不能证明线路已经更容易执行。
二元通过不能替代局部检查
在默认平均门禁之外,阈值与局部失效诊断继续检查 95%、97%、98%、99% 和 99.5% 覆盖阈值,以及 1%、2%、3% 和 5% 平均过度重叠门禁。在更严格的 C99/O2 条件下,GEBCO 的混合布局并非每次都被接受。最大未覆盖块和 p99 单元过度重叠还会标出均值没有呈现的位置。
分段航向也没有因为自由度更多就自动进入结果。公开决策审计里,有的场景需要块级修复,有的场景在覆盖门禁处直接拒绝分段方案,还有的场景虽然得到覆盖改善,却因转换代价继续保留单一航向。这份审计重算了决策逻辑,没有重跑规划器,也没有实现 Dubins 路径或 AUV 控制。拒绝分段同样是一项结果,因为它保留了拒绝发生在哪个条件上。
足迹有效性检查提供了另一种容易被误读的“通过”。在 9 个代表性场景-方法布局里,将总宽度代理改为分别保留左舷与右舷足迹范围后,C97/O3 可行性判定没有变化;与此同时,USGS 高复杂度场景的局部单元计数最大分歧达到 10.42%。
如果只保留二元可行性,这项检查会被压缩成“零翻转”。局部计数分歧说明两个足迹表示并不等价。当前证据支持规划层的门禁解释没有被翻转,无法支持足迹代理已经代替波束级声学、姿态和声速验证。
四月的 Release 与七月的代码锚点
2026 年 7 月 12 日,公开主分支固定在提交 a51dcf1d5166dd798007dfd72a6b7ff30530c11b。这次提交将仓库元数据与当前稿件对齐,README 也说明仓库名是历史名称,当前支持的贡献是固定测线的 MBES 规划基准。本文以这个提交为代码锚点,没有从本地未提交文件取材。
四月的标签已经有粗先验的早期版本(120、300、600 米,混合方法使用 0--4 号种子)。后来补进的是 900 米与 20 种子的扩展,以及结构化误差、执行风险和局部门禁;这些都不能被算进 v0.1.0 当时已经完成的内容。版本分开以后,仓库的变化才可以被复查:早期公开了什么,后来补了什么,哪些声明至今仍为空白。
整理这组结果以后,我更在意一条线路在什么条件下应被拒绝。最短路径、较高覆盖均值或一次二元通过都不足以替代局部缺口、先验敏感性和执行代理的检查。当前公开包已经能暴露一部分不稳定分支,下一层证据仍需要控制器执行、任务日志、声速不确定性和原始 MBES 产品级核查;这份仓库因此停在出航以前,保存的是规划问题怎样被计算、怎样被压测,以及哪些结论还不能写成测量结果。
资料与版本
- 当前代码锚点:提交
a51dcf1d与该提交下的 README。 - 4 月公开节点:Release
v0.1.0,其标签指向提交625fb6a。 - 先验回放:粗先验到细网格 与 结构化先验误差。
- 执行扰动:流偏移回放 与 执行风险修复。
- 局部门禁:阈值与局部失效、分段决策 与 足迹有效性。
- 环境与仓库卫生:environment.yml 与当前的 发布准备检查(5 月首次加入,7 月更新)。