## 压测结论

### 只测两条线就够

如果当前目标是忽略实际玩法状态，只验证理想与极端条件下的局部避障性能，那么建议压测对象收束为： RVO2 原版 和 基于 RVO2 思想的自研版。RVO2 是稳定基准，自研版负责验证项目可控性、可调参空间和性能上限。

## 推荐压测口径

1. 理想情况：空旷水域、均匀分布、目标方向一致或轻微交叉，验证基础吞吐和稳定收敛。
2. 中等冲突：双向穿流、圆阵向心、随机目标切换，验证重叠率、抖动和换边稳定性。
3. 极端情况：高密度聚集、初始重叠、狭窄通道、所有 agent 争同一目标点，验证退化行为。
4. 规模阶梯：100、500、1000、3000、5000 agent，记录每帧耗时、最大耗时、重叠对、平均速度损失。
5. 移动端口径：固定竖屏 1080x1920，编辑器和百元机使用相同分辨率、数量档、场景和采样窗口。
6. 公平条件：相同半径、最大速度、timeStep、目标生成、积分方式、邻居查询范围和日志采样策略。

## 日志与真实性要求

环境 | 必须输出 | 不要做 | 推荐实现
--- | --- | --- | ---
Unity 编辑器 | 算法、场景、数量、分辨率、平均 FPS、1% Low、模拟耗时、最大耗时、GC、XZ/3D 重叠对。 | 不要每帧 `Debug.Log`，不要在热路径拼接字符串，不要每帧写文件。 | 内存环形缓冲 + 固定间隔采样；单轮结束后一次性导出 CSV/JSON，并在 Console 只打印摘要。
百元机真机 | 同一套指标，加设备型号、Unity 图形 API、目标帧率、分辨率 1080x1920、温度/降频观察备注。 | 不要开详细 HUD、不要高频日志、不要连接调试器长期采样导致额外开销。 | Release/Development 分开测；真机默认静默聚合，测试结束或手动按钮导出日志文件。
性能公平性 | 日志开销要对两个算法一致，最好能统计采样写入耗时。 | 不要让某个算法额外输出调试明细，导致对比不公平。 | 所有算法只写结构化数值样本，统一由 benchmark runner 收集和导出。

## 一句话判断

如果当前阶段只做算法压测，RVO2 原版 + RVO2 思想自研版 就是最小有效对照组。 其他方案暂时不必进入压测主线，可以作为解释来源或后续扩展参考。

## 共同点

- 大多数方案都需要上层提供目标或期望速度，然后再做局部修正。
- 核心输入都离不开位置、速度、半径、邻居范围和预测时间。
- 都在权衡两个目标：尽量接近期望运动，同时减少未来碰撞风险。
- 当前压测只关心局部速度修正，不比较全局寻路、地图可达性或复杂玩法状态。
- 在 FishROV 的 3D/2.5D 场景里，多数方案仍需要明确如何处理 XZ 投影、高度层和真实体积冲突。

## 核心矩阵

方案 | 核心抽象 | 最终如何选速度 | 安全性来源 | 最擅长 | 主要风险 | FishROV 定位
--- | --- | --- | --- | --- | --- | ---
RVO2 / ORCA | 速度空间半平面约束 把每个邻居变成 ORCA 线性约束。 | 在所有安全半平面内，求最接近期望速度的新速度。 | 显式几何约束和低维优化，理论性最强。 | 大规模多动态 agent 的实时局部避障。 | 不做全局规划，2D 投影，参数不当会保守、停滞或碰撞。 | 最适合作为局部避障工程基准和对照组。
HRVO | 速度空间混合 VO/RVO 把 VO 与 RVO 的几何边界混合。 | 排除危险速度，再选择接近期望速度且更稳定的速度。 | 速度障碍几何，加上减少 reciprocal 振荡的边界设计。 | 对称对冲、互相避让时减少左右横跳。 | 仍是局部 2D 方法，不处理地图和动力学约束。 | 适合作为处理振荡问题的设计参考。
RVO_Py_MAS | 速度空间采样过滤 把动态体和静态障碍都转成速度禁区。 | 采样候选速度，先过滤禁区，有安全速度就选最接近期望速度的；没有安全速度则选折中。 | 禁区过滤加碰撞时间折中，不是严格 ORCA 求解。 | 学习 RVO 建模方式，快速改造原型。 | 没有空间索引时规模变贵，采样可能错过好速度。 | 适合作为可读的 RVO 原理参考，不建议直接当大规模生产方案。
采样避障学习版 | 候选速度评分函数 候选速度由期望速度、偏转、减速、停止等组成。 | 对每个候选速度计算目标偏差、平滑、预测碰撞、当前重叠、边界等惩罚，选最低分。 | 启发式风险函数和权重调参，不保证无碰撞。 | 项目内自研、调参、验证新评分项。 | 权重依赖场景，高密度可能局部最优或卡住。 | 最适合作为 FishROV 自研避障算法的实验骨架。
rl_rvo_nav | 学习策略RVO 先验 把 VO/RVO 风险编码进状态和奖励。 | PPO actor 根据自身状态和 VO/RVO 序列输出速度增量。 | 训练经验、RVO 区域奖励、预计碰撞时间塑形。 | 复杂多机器人场景下学习更灵活的风险权衡。 | 训练成本高，泛化依赖仿真覆盖，工程可控性较弱。 | 建议先吸收风险表达和 reward/score 思想，不急着引入完整 RL 链路。

## 真正拉开差距的六个轴

### 1. 位置空间还是速度空间

RVO2、HRVO、RVO_Py_MAS、rl_rvo_nav 都把问题转成“哪些速度会导致未来碰撞”。采样学习版虽然是评分，但最关键的预测碰撞项也已经进入速度空间。

### 2. 约束、过滤还是惩罚

ORCA 是约束求解，危险速度直接被半平面排除。RVO_Py_MAS 是采样后过滤禁区。采样学习版是给风险加惩罚，危险速度未必完全禁止。RL 是把风险变成训练信号。

### 3. 谁承担避让责任

VO 偏“我躲别人”；RVO/ORCA 假设双方共同承担；HRVO 在 reciprocal 基础上减少来回换边。采样版需要靠评分项或通行偏置来塑造行为。

### 4. 是否进入主压测

当前主压测只保留 RVO2 原版和自研版。HRVO、RVO_Py_MAS、RL-RVO 只作为思想参考，不进入编辑器选择项。

### 5. 可解释性和可改性

RVO2 理论清晰但实现复杂。自研版最容易改权重和新增评分项。RVO_Py_MAS 最适合读懂速度障碍。RL 灵活但可解释性和复现实验成本更高。

### 6. 2D 与 3D 的边界

这些方案多数原生是 2D 或平面导航。FishROV 里如果只看 XZ，会把不同高度层的对象误判为冲突，也可能漏掉真实 3D 体积风险。核心决策必须明确水平避障、高度分层和体积碰撞的关系。

## 工程选择倾向

理论安全约束
RVO2 / ORCA
HRVO
采样 / RL
可改可调
采样学习版
RVO_Py_MAS
RVO2

## 推荐读法

### 先压测 RVO2

把 RVO2 / ORCA 当成标准基线，确认理想、拥挤、对冲、初始重叠等场景下的耗时和重叠率。

### 再压测自研版

自研版可以先吸收 RVO2 的速度空间思想，但保留可调评分、鱼群权重和性能优化入口。

### 暂缓其他方案

HRVO、RVO_Py_MAS、RL-RVO 暂时不用进编辑器主压测。先把 RVO2 和自研版两条主线测准。

依据文档：rvo2-core-principles.md、unity-navmesh-core-principles.md、sampling-local-avoidance-core-principles.md、hrvo-core-principles.md、rvo-py-mas-core-principles.md、rl-rvo-nav-core-principles.md。