HATT v3.4:从训练框架到任务选择
本章解释本轮 graph_model=hatt_v3_4、hatt_candidate_aa_mode=learned、hatt_aa_task_context=true 的实际路径。网络沿用共享前馈 MAPPO actor 接口,隐空间宽度 128、4 个关系 head。当前 actor 参数数为 362,697;关闭任务上下文的 noctx 为 362,185,相差 512。参数核对
完整计算链
每个机器人的 Dict 观测 + 合法动作掩码
↓
ego / others / tasks 独立实体编码
↓
AA(i,k):我与队友的关系,读取队友当前服务任务摘要
AT(i,j):我与候选任务的关系
AT(k,c_k):队友与其当前任务的关系,复用 AT 参数
↓
全局均值汇总 → 当前机器人上下文
按当前 Deliver 联盟路由 AA 与成员 AT → 候选任务上下文
↓
共享 CandidateEdgeDecoder → 每个任务的 logit → mask → Categorical
↓
event 激活机器人执行新选择,其他机器人保持现有任务
↓
环境交互 → 结构化 buffer → GAE / PPO 更新
全局 state + focal one-hot → 集中式 MLP critic → Vφ(s,i)
入口为 train/train.py,训练循环为 runner/shared/macf_runner.py,策略封装为 gaRMAPPOPolicy.py。图网络接在 actor 路径,critic 使用 R_Critic 的集中式状态特征。策略构造
第一层:MAPPO 与 Actor–Critic
参数共享 actor 对每名机器人输出任务概率;集中式 critic 根据全局任务和队友状态以及 focal 标记预测该机器人的回报。训练使用当前策略与环境交互的 on-policy 数据。第 t 步记录观测、状态、动作、旧 log probability、价值预测、奖励及各类 mask。runner、buffer
GAE 使用 γ=0.99、λ=0.95 聚合时序差分残差。Actor 的 PPO 目标包含
r_t = exp(log πθ(a_t|o_t) − log πold(a_t|o_t))
Lpolicy = −E[min(r_t A_t, clip(r_t,1−ε,1+ε) A_t)]
以及熵项;critic 根据估计回报训练,启用 ValueNorm。更新使用 active mask 选择决策样本,mask/bad_mask 处理死亡和截断。当前 active_masks 来自环境的重决策日程,物理步数据连续进入 buffer。PPO 更新、回报计算
| 本轮训练项 | 数值 |
|---|---|
| 最大训练 environment episodes | 1500 |
| 名义环境步预算 / rollout 长度 | 1,125,000 / 750 |
| rollout 环境数 | 1 |
| PPO epochs / mini-batches | 6 / 1 |
| actor、critic 初始学习率 | 0.0001,线性衰减 |
| PPO clip / entropy coefficient | 0.1 / 0.03 |
| target KL / max clip fraction | 0.03 / 0.35 |
| 最大梯度范数 | 0.5 |
| critic hidden size / layer_N | 64 / 1 |
| recurrent policy | false |
1500 是完成的环境回合数量上限,一个 750 步 rollout 可以包含多个较早结束的回合。因此跨模型学习曲线应使用各自记录的实际 environment steps;本包的 v3.4 曲线保留 training episode 坐标。冻结研究参数
PPO 和 MAPPO 为训练框架依据,引用 PPO 与 MAPPO。工程的研究变量主要位于 actor 的关系表示。
第二层:实体编码与离散归属
FeatureEncoder 分别把 ego、others、tasks 映射到 128 维隐向量。编码器由线性层、ReLU 和 LayerNorm 组成。ego、others 中的 coalition 编号在进入连续编码器前清零,同时保留原始编号用于构造离散关系:当前任务、是否同一配送联盟,以及成员属于哪个候选任务。实体编码、FeatureEncoder
设计目的在于让任意任务编号通过关系索引使用,实体状态通过共享函数编码。实现结果是:任务及其归属同步重排后,解码输出随任务顺序重排。本次执行 tests.test_hatt_network.HATTV34NetworkTest,5 项测试通过,其中包含继承的任务重排检查与 noctx/v3.3AA 对应检查。测试代码
第三层:同形式、独立参数的 AA 与 AT 关系
两类关系使用 TypedRelationEdge。对关系类型 r 的每个 head h,给定 source embedding z_s、target embedding z_t 和边特征 e,计算
q = Wq[r,h] z_s
k = Wk[r,h] z_t
v = Wv[r,h] z_t
g[r,h] = sigmoid(q·k / sqrt(d_head) + edge_bias[r,h](e))
m[r] = Wout[r] concat_h(g[r,h] v)
gate 是逐边 sigmoid 权重。AA 和 AT 使用各自的 Wq、Wk、Wv、edge_bias 和 Wout。无效边的 gate 通过 mask 置零。AA 的对照方式包括 learned、固定 0.5 的 uniform,以及输出清零的 zero。算子实现
AT(i,j) 的三维边特征为任务相对位置两维和“当前是否分配到 j”。AA(i,k) 的基础三维边特征为队友相对位置两维和“是否属于同一配送联盟”。q·k 项同时提供编码后的机器人状态信息。关系特征
这层的设计目的,是让队友关系与任务匹配使用一致的计算接口,各自学习所需参数。v3.3AA 的 learned/uniform-trained 对照为学习关系权重提供了效果记录;冻结权重的 uniform/zero 实验记录了推理期消息变化对策略行为的影响。详见 E04。实验依据
第四层:v3.4 的服务任务条件
对边 (i,k),查找队友 k 当前服务的任务 c_k,追加四个标量:任务剩余需求、优先级、所属联盟的载荷比聚合、成员数比例。只在 c_k 为 Deliver 时保留这四维,其他任务类型将这部分上下文置零。实现
在 compact schema 下,它们精确对应
[D(c_k)/500,
priority(c_k),
Σ_{m≠i, living(m), c_m=c_k} (load_m/init_load_m) / N,
#{m≠i:living(m), c_m=c_k} / N]
聚合从 others 读取,所以包含 k、排除 observer i。四维服务摘要进入 AA 的 edge_bias;AA 的 source/target 编码保持原来的输入。新增参数只来自 edge_bias 第一层新增的四列,4×128=512。上下文聚合
设计目的,是让同一对机器人之间的关系权重随队友服务任务的状态而改变。当前载荷摘要的单位是归一化载荷比例,其含义由上式确定。它适合作为服务资源的学习特征,实际物理载荷与成员退出后的任务后果由环境快照和闭环评估读取。E05
本轮三 seed 留出测试中,taskctx 的 validation-best 成功率 65.10%,noctx 为 62.50%;last 为 61.72% 和 62.50%。这组对照提供“加入任务条件之后整体行为发生了怎样变化”的完整记录。论文关于源联盟可替代性的研究目标与对应评估入口见 研究章。
第五层:把关系消息组织到对应候选
网络计算 AT(k,c_k),使用与 AT(i,j) 相同的 AT 参数,输入为队友 embedding、其当前任务 embedding、任务相对队友的位置与 assigned=1。这个消息描述成员对当前服务任务的关系。成员 AT
对候选配送任务 j,取当前属于 j 的其他存活成员集合 C_j{i},把 AA(i,k) 和 AT(k,j) 分别求和,并除以 sqrt(max(1,成员数))。对应候选表示融合五部分:任务 embedding、AT(i,j)、成员 AT 聚合、AA 聚合、成员数/N,然后与原任务 embedding 作残差连接及 LayerNorm。路由与归一化
同时,所有有效 AA 消息和所有可用 AT 消息分别取均值,结合 ego embedding 形成当前机器人的全局上下文。全局汇总和候选局部汇总复用同一批关系消息。全局融合
设计目的,是让候选 j 的联盟信息对应它实际拥有的成员。任务类型参与路由:Deliver 接收配送成员消息,Explore、Idle、Resupply 保留自身候选特征和 AT 匹配。历史 detached 实验为特殊控制槽的关系语义提供了依据;正式 v2.0 结构消融为按任务聚合联盟信息提供了效果依据。E01、E12
第六层:共享解码与高层动作
沿用的 CandidateEdgeDecoder 对每个候选使用同一评分网络,将机器人上下文、候选上下文和 AT 边特征映射为 logit。非法动作置为极小 logit,形成 Categorical 分布。训练时采样,正式测试时确定性选取最大概率动作。actor 分布构造
在同一决策时刻,各活跃机器人基于自己的 observer 输入给出任务选择;未激活机器人保持现有任务。因此联合策略可以写作活跃个体分类分布的乘积,并为未激活个体附加保持当前动作的确定性项。联盟由执行后的共同任务归属形成。runner 动作处理
设计与证据对应
| 设计 | 在计算流程中的目的 | 创新性定位 | 已有功能/效果依据 |
|---|---|---|---|
| MAPPO、GAE、集中式 critic | 从执行回报学习任务策略 | 通用训练框架 | 六个 v3.4 训练任务完成;来源为 PPO/MAPPO 方法 |
| 独立实体编码与共享候选打分 | 统一处理任务候选,维护重编号对应 | 任务策略的结构基础 | 任务槽重排实验、v3.4 网络测试 |
| AA/AT 独立关系参数 | 分别学习队友关系与任务匹配 | v3.3AA/v3.4 关系表示组成 | learned/uniform-trained 同条件结果 |
| 当前归属驱动的候选成员路由 | 把成员信息送入对应配送候选 | 任务条件化关系策略的组成 | 正式联盟上下文消融、路由代码与测试 |
| 服务任务上下文进入 AA | 让关系权重读取成员已有服务任务 | v3.4 新增设计 | 512 参数扩展、taskctx/noctx 三 seed 结果 |
| sector coverage | 提供可执行探索目标与搜索历史 | 环境观测与任务实现 | coverage/geometry 因子实验 |
| event 日程 | 将任务决策与物理执行连接 | 环境决策协议 | 事件注入实验中的响应提前记录 |
该表用于论文分层:主方法章节围绕候选任务上的关系信息组织,训练设置章节给出 MAPPO,环境章节给出 coverage 与 event。每项效果解释使用对应实验条件。