# v3.6 异质环境与 AA–AT 双关系实验设计

日期：2026-09-15

## 本轮回答的两个问题

第一，加入真实 UAV/UGV 类型差异、UGV 地形通行效率和共享危险点约束后，DelivCoal 是否仍然可执行、可学习，并能在独立场景上达到稳定任务完成水平。

第二，在同一个新环境中，按 assignment 路由的有符号 AA 是否能在显式 AT 基础上形成稳定增量。该问题由 v3.6 AT-only 与 v3.6 dual 的配对训练直接检验。

本轮保持标量可分割配送、任务生成、联盟动作、奖励和事件重配置流程不变。多维联合服务等后续环境设想不进入本轮。

## 环境改动

启用 `heterogeneous_agent_dynamics` 后，环境严格创建配置数量的 UAV 和 UGV，并在初始化时随机打乱编号。UAV/UGV 分别从配置的感知、速度和载重范围采样，能力向量继续保留个体差异。默认正式参数为：

| 参数 | UAV | UGV |
| --- | ---: | ---: |
| 感知半径 | 50–200 | 10–30 |
| 每步移动距离 | 18–22 | 8–12 |
| 初始载重 | 30–60 | 90–140 |
| 地形通过能力 | 1.0 | 0.35–0.65 |

异构模式的焦点智能体观测额外包含自身类型。其他智能体观测原先已经包含类型；结合能力标量，可以确定每个成员在上述类型区间中的感知、速度、载重和地形通过能力。关闭异构开关时保持旧 `ego` 维度，历史 checkpoint 继续使用原接口。

连续地图重新加入 20×20 的粗地形难度场。UGV 在难度不高于自身通过能力时保持原速度，超过后按 `passability / difficulty` 降速，最低速度比例为 0.25。UAV 的地形速度比例固定为 1。

危险点仍在 reset 时全部生成，`discovered` 是全队共享状态。UAV 可以越过地面危险区并凭较大感知范围发现它们。UGV 只使用已发现危险点规划绕行；车辆对危险点的近场检测半径至少覆盖危险圆安全半径，保证在越界前发现并停车，下一步依据更新后的共享地图重新规划。新异构模式使用固定规模的危险圆可见图和最短路搜索。每个已发现危险圆生成固定数量的环形候选节点，合法直线段构成图边；抽象探索航点若落在危险圆内，会投影到最近安全环点。节点数随危险点数量线性增长，规避了旧迭代插点方法在多危险点场景中产生指数级路点的风险。

旧环境通过 `heterogeneous_agent_dynamics: false` 完整保留。新参数已经加入训练 checkpoint 配置和 sweep 受控评估场景键，避免训练与 held-out test 使用不同物理环境。

## v3.6 AA–AT 方法

对焦点智能体 `i` 和任务 `k`，v3.6 计算有符号 AT 分数：

\[
R^{AT}_{ik}=f_{AT}(h_i,h_k,e_{ik}).
\]

对焦点智能体 `i` 和其他成员 `j`，AA 读取成员当前任务 `c_j` 的上下文：

\[
R^{AA}_{ij\mid c_j}=f_{AA}(h_i,h_j,h_{c_j},e_{ij},e_{jc_j}).
\]

AA 分数通过 `c_j` 直接 scatter 到候选任务：

\[
R_{ik}=R^{AT}_{ik}+
\frac{\sum_{j:c_j=k}R^{AA}_{ij\mid k}}
{\sqrt{\max(1,|C_k|)}}.
\]

两类关系采用相同的多头 query-key、边特征调制、`tanh` 有符号 head 和 head 合并步骤，参数按关系类型独立。最终关系分数直接作为动作 logit 残差。head 合并权重初始化为零，因此 AT-only 与 dual 在同一初始化 seed 下具有完全相同的初始策略。

在线张量包含 `A×T` 的 AT 分数和 `A×A` 的 AA 分数。v3.5 的 `A×T×A` 成员展开已经删除。

本轮首先检验这种可辨识结构能否由 PPO 稳定优化。短时域反事实辅助监督属于后续增强项；若 dual 的关系头能够学习且出现稳定策略增益，再用成员删除/替换反事实检查其含义。若关系头有梯度和非零输出，整体决策仍没有增益，随后再决定是否需要加入显式校准损失。

## 实验条件

| 条件 | 环境 | 方法 | 回答的问题 |
| --- | --- | --- | --- |
| v20-legacy | 历史同分布能力、全危险图规划 | HATT v2.0 | 已知可训练参考 |
| v20-type-only | 类型相关感知/速度/载重，地形中性，全部危险点已知且两类均绕行 | HATT v2.0 | 类型参数本身是否破坏学习 |
| v20-terrain-only | 类型参数、UGV 地形减速，全部危险点已知且两类均绕行 | HATT v2.0 | UGV 地形通过能力带来的独立影响 |
| v20-hazard-only | 类型参数、地形中性、UAV 侦察、共享危险图、UGV 绕行 | HATT v2.0 | 危险发现与类型相关绕行带来的独立影响 |
| v20-full-hetero | 类型参数、UGV 地形减速、UAV 侦察、共享危险图、UGV 绕行 | HATT v2.0 | 完整新环境是否可训练 |
| v36-at-only | 完整新环境 | 显式有符号 AT | 新 AT 路径是否稳定 |
| v36-dual | 完整新环境 | 有符号 AT + assignment-routed AA | AA 在相同 AT 上的增量 |

smoke 使用 `v20-legacy → v20-type-only → v20-full-hetero` 检查环境接口。正式阶段在 type-only 基础上增加 terrain-only、hazard-only 和 full-hetero，形成地形机制与危险信息机制的 2×2 对照。`v36-at-only ↔ v36-dual` 使用相同 actor/critic 初始化 seed、训练 seed 和场景 seed，唯一有效差异是 AA 分数是否进入动作残差。

## 运行阶段

smoke 使用一个 training seed、每个条件 15 episode，5 episode 一次 4-seed validation，最终以 8 个 held-out seeds 评估 validation-best 和 last。它只负责发现 shape、梯度、显存、路径死锁、checkpoint 与 evaluator 配置问题。

正式实验使用三个 training seeds、每个条件 1500 episode。每 50 episode 做 32-seed periodic validation；每个 job 锁定 validation-best 后，对 validation-best 和 last 各做 128-seed held-out test。训练、periodic validation 和 final test 均由新版 `scripts.sweep` 管理。

正式阶段共 21 个训练 job。v3.6 已删除 v3.5 的稠密成员张量，每个 job 申报 6.5 GiB，调度器在每张 24 GiB GPU 上最多并行三个训练任务，并为 evaluator 保留显存准入控制。

## 判定规则

环境工程正确性要求类型数量、参数范围、共享危险发现、UGV 绕行和 terrain reset 单元测试全部通过；smoke 中五个训练 job 都必须完成一次 PPO 更新、保存 actor，并完成受管评估。

环境可训练性主要看 v20-full-hetero。三个 training seeds 都应正常结束且无 NaN；periodic validation 的后段任务完成率应高于训练初段；validation-best held-out 应在多数 training seeds 中产生非零 success。若失败，先根据 type-only 对照判断困难来自类型资源分布，还是地形与危险路径执行。

AA 优化成功需要同时满足三个证据：dual 的 AA head 获得非零更新，关系分数在成员构成变化时发生变化，dual 相对配对 at-only 的 held-out success 或 task completion 在多数 training seeds 中同向改善。平均值提高而三个 seed 方向混合，将延续 v3.5 的“不稳定候选”判断。

论文级 AA 优势还需要训练后的特殊评估。固定环境状态后执行成员替换、关键重载 UGV 退出和高优先级任务被发现三类干预，比较 AT-only 与 dual 的动作排序及实际任务后果。该评估在 checkpoint 锁定后生成独立 sweep manifest，避免提前写死模型路径。

## 已生成文件

- 当前完整 smoke：`experiments/sweeps/20260915_hatt-v36-heterogeneous-dual-relation-smoke-final.yaml`
- 补充接口检查：`experiments/sweeps/20260915_hatt-v36-heterogeneous-dual-relation-smoke-supplement.yaml`
- 早期 smoke：`experiments/sweeps/20260915_hatt-v36-heterogeneous-dual-relation-smoke.yaml`、`experiments/sweeps/20260915_hatt-v36-heterogeneous-dual-relation-smoke-v2.yaml` 与 `experiments/sweeps/20260915_hatt-v36-heterogeneous-dual-relation-smoke-clean.yaml`（用于发现自身类型缺失、旧寻路无界增长、首版可见图性能及 retry 目录复用问题，仅保留为工程记录）
- formal：`experiments/sweeps/20260915_hatt-v36-heterogeneous-dual-relation-formal.yaml`
- 环境：`envs/delivcoal/env_core.py`
- 方法：`algorithms/algorithm/HATTV36Network.py`
- 环境测试：`tests/test_delivcoal_heterogeneous_dynamics.py`
- 方法测试：`tests/test_hatt_network.py`
