Legacy GAT:从 $o_i$ 到 $\pi_i$ 的完整更新公式

符号约定
---
Step 1:从 Dict 观测到图节点特征
$$o_i = \{\,\text{ego}_i \in \mathbb{R}^{C+7},\; \text{tasks}_i \in \mathbb{R}^{M \times (C+4)},\; \text{others}_i \in \mathbb{R}^{N_a \times (C+7)}\,\}$$ 对时间步 $t$ 的所有 agent 和任务构建节点: $$\mathbf{x}_a^{(t)} = \text{BuildAgentNodes}(\{\text{ego}_i^{(t)}\}_{i=1}^{N_a}, \{\text{others}_i^{(t)}\}_{i=1}^{N_a}) \in \mathbb{R}^{N_a \times 9}$$ $$\mathbf{x}_\tau^{(t)} = \text{BuildTaskNodes}(\{\text{tasks}_i^{(t)}\}_{i=1}^{N_a}) \in \mathbb{R}^{M \times 9}$$ 拼接得到全图节点特征: $$\mathbf{x}^{(t)} = \begin{bmatrix} \mathbf{x}_a^{(t)} \\ \mathbf{x}_\tau^{(t)} \end{bmatrix} \in \mathbb{R}^{(N_a+M) \times 9}$$ 对 batch 中所有时间步拼接: $$\mathbf{x} = \begin{bmatrix} \mathbf{x}^{(1)} \\ \vdots \\ \mathbf{x}^{(B)} \end{bmatrix} \in \mathbb{R}^{B(N_a+M) \times 9}$$
---
Step 2:图构建(边与边特征)
边集合 $\mathcal{E} = \mathcal{E}_{a \to \tau} \cup \mathcal{E}_{\tau \to a} \cup \mathcal{E}_{a \to a}$,其中: $$|\mathcal{E}_{a \to \tau}| = |\mathcal{E}_{\tau \to a}| = N_a M, \quad |\mathcal{E}_{a \to a}| = N_a(N_a-1)$$ 总边数: $$E = 2N_aM + N_a(N_a-1) = 2 \times 12 \times 10 + 12 \times 11 = 372$$ 边特征: $$ \mathbf{e}_{ij} = \begin{cases} \mathbf{x}_{\tau,j} - \mathbf{x}_{a,i}, & (i,j) \in \mathcal{E}_{a \to \tau} \\ \mathbf{x}_{a,i} - \mathbf{x}_{\tau,j}, & (i,j) \in \mathcal{E}_{\tau \to a} \\ -\text{similarity}(i,j) \cdot \mathbf{1}_9, & (i,j) \in \mathcal{E}_{a \to a} \end{cases} $$ 其中: $$\text{similarity}(i,j) = \frac{1}{1 + \frac{1}{9}\sum_{d=1}^{9} |\mathbf{x}_{a,j}^{(d)} - \mathbf{x}_{a,i}^{(d)}|}$$
---
Step 3:第一层 GATConv(1-hop 聚合)
对每个节点 $i$,计算其邻居 $j \in \mathcal{N}(i)$ 的注意力权重: $$\alpha_{ij}^{(0)} = \frac{\exp\left( \text{LeakyReLU}\left( \mathbf{a}^{(0)\top} \left[ W^{(0)}\mathbf{x}_i \;\|\; W^{(0)}\mathbf{x}_j \;\|\; \mathbf{e}_{ij} \right] \right) \right)}{\sum_{k \in \mathcal{N}(i)} \exp\left( \text{LeakyReLU}\left( \mathbf{a}^{(0)\top} \left[ W^{(0)}\mathbf{x}_i \;\|\; W^{(0)}\mathbf{x}_k \;\|\; \mathbf{e}_{ik} \right] \right) \right)}$$ 聚合得到第一层输出: $$\mathbf{h}_i^{(1)} = \text{ReLU}\left( \sum_{j \in \mathcal{N}(i)} \alpha_{ij}^{(0)} W^{(0)} \mathbf{x}_j \right)$$ 其中 $W^{(0)} \in \mathbb{R}^{256 \times 9}$,$\mathbf{h}_i^{(1)} \in \mathbb{R}^{256}$。
对 agent $i$ 而言,$\mathcal{N}(i) = \{\text{所有任务}\} \cup \{\text{所有其他 agent}\}$,因此第一层就聚合了全部任务和全部其他 agent。
---
Step 4:第二层 GATConv(2-hop 聚合)
基于第一层输出再次计算注意力: $$\alpha_{ij}^{(1)} = \frac{\exp\left( \text{LeakyReLU}\left( \mathbf{a}^{(1)\top} \left[ W^{(1)}\mathbf{h}_i^{(1)} \;\|\; W^{(1)}\mathbf{h}_j^{(1)} \;\|\; \mathbf{e}_{ij} \right] \right) \right)}{\sum_{k \in \mathcal{N}(i)} \exp\left( \text{LeakyReLU}\left( \mathbf{a}^{(1)\top} \left[ W^{(1)}\mathbf{h}_i^{(1)} \;\|\; W^{(1)}\mathbf{h}_k^{(1)} \;\|\; \mathbf{e}_{ik} \right] \right) \right)}$$ 聚合得到第二层输出: $$\mathbf{h}_i^{(2)} = \sum_{j \in \mathcal{N}(i)} \alpha_{ij}^{(1)} W^{(1)} \mathbf{h}_j^{(1)}$$ 其中 $W^{(1)} \in \mathbb{R}^{128 \times 256}$,$\mathbf{h}_i^{(2)} \in \mathbb{R}^{128}$。
由于图是全连接的,第二层感受野覆盖全图,$\mathbf{h}_i^{(2)}$ 混合了所有 agent 和 task 的信息。
---
Step 5:全局池化
对所有节点 embedding 做平均池化: $$\mathbf{h}_{\text{pool}} = \frac{1}{N_a+M} \sum_{i=1}^{N_a+M} \mathbf{h}_i^{(2)} \in \mathbb{R}^{128}$$ 提取 agent $i$ 对应的节点 embedding: $$\mathbf{h}_i^{(2)} \in \mathbb{R}^{128}$$ 将 flatten 后的局部观测与图特征拼接(cat 模式): $$\mathbf{z}_i = \begin{bmatrix} \bar{o}_i \\ \mathbf{h}_i^{(2)} \\ \mathbf{h}_{\text{pool}} \end{bmatrix} \in \mathbb{R}^{223 + 128 + 128} = \mathbb{R}^{479}$$
代码实现中通常只用 agent_emb 和 global_pool,但这里把三种信息都列出。具体维度取决于 gat_mode
---
Step 6:Actor MLP 输出 logits
根据三种 gat_mode

6.1 gat 模式

$$\mathbf{z}_i = \mathbf{h}_i^{(2)} \in \mathbb{R}^{128}$$ $$\text{logits}_i = \text{MLP}_{\text{actor}}(\mathbf{z}_i) \in \mathbb{R}^{M}$$

6.2 cat 模式

$$\mathbf{z}_i = \begin{bmatrix} \bar{o}_i \\ \mathbf{h}_i^{(2)} \end{bmatrix} \in \mathbb{R}^{223 + 128} = \mathbb{R}^{351}$$ $$\text{logits}_i = \text{MLP}_{\text{actor}}(\mathbf{z}_i) \in \mathbb{R}^{M}$$

6.3 gated 模式

$$\mathbf{z}_i = \begin{bmatrix} \bar{o}_i \\ \tanh(\alpha) \cdot \mathbf{h}_i^{(2)} \end{bmatrix} \in \mathbb{R}^{351}$$ $$\text{logits}_i = \text{MLP}_{\text{actor}}(\mathbf{z}_i) \in \mathbb{R}^{M}$$ 其中 $\alpha \in \mathbb{R}$ 是可学习门控参数。
---
Step 7:动作分布
$$\pi_i = \text{softmax}(\text{logits}_i) = \frac{\exp(\text{logits}_i)}{\sum_{m=1}^{M} \exp(\text{logits}_i[m])} \in \mathbb{R}^{M}$$ 其中 $\pi_i[m]$ 表示 agent $i$ 选择任务 $m$ 的概率。
---
完整链路总结
$$ o_i \xrightarrow{\text{flatten}} \bar{o}_i \xrightarrow{\text{build nodes}} \mathbf{x} \xrightarrow{\text{GATConv}_1} \mathbf{h}^{(1)} \xrightarrow{\text{GATConv}_2} \mathbf{h}^{(2)} \xrightarrow{\text{pool}} [\mathbf{h}_i^{(2)}, \mathbf{h}_{\text{pool}}] \xrightarrow{\text{MLP}} \text{logits}_i \xrightarrow{\text{softmax}} \pi_i $$
核心问题:$\text{logits}_i[m]$ 不是 $f(o_i, \text{Task}_m)$ 的显式函数,而是 $f(o_i, \mathbf{h}_i^{(2)}, \mathbf{h}_{\text{pool}})$ 的任意 MLP 输出。由于 $\mathbf{h}_{\text{pool}}$ 对任务排列 invariant,且 MLP 没有结构约束,Legacy GAT 不满足任务索引等变性。
---
Appendix:单个智能体更新公式(渲染版)

输入节点特征

$$x_i \in \mathbb{R}^9$$

若 $i$ 是 agent:$x_i = [\text{position}_2, \text{capabilities}_4, \text{load\_ratio}_1, \text{type}_1, \text{active}_1]$;
若 $i$ 是 task:$x_i = [\text{position}_2, \text{requirements}_4, \text{demand}_1, \text{type}_1, \text{active}_1]$。

邻居集合(全连接):

$$\mathcal{N}(i) = \{\text{Task}_1, \dots, \text{Task}_M\} \cup \{\text{Agent}_1, \dots, \text{Agent}_{i-1}, \text{Agent}_{i+1}, \dots, \text{Agent}_{N_a}\}$$

边特征

$$ \mathbf{e}_{ij} = \begin{cases} \mathbf{x}_{\tau,j} - \mathbf{x}_{a,i}, & j \in \text{Task} \quad (A \to T) \\ \mathbf{x}_{a,i} - \mathbf{x}_{\tau,j}, & j \in \text{Task} \quad (T \to A) \\ -\text{similarity}(i,j) \cdot \mathbf{1}_9, & j \in \text{Agent} \quad (A \to A) \end{cases} $$ $$\text{similarity}(i,j) = \frac{1}{1 + \frac{1}{9}\sum_{d=1}^{9} |\mathbf{x}_{a,j}^{(d)} - \mathbf{x}_{a,i}^{(d)}|}$$

第一层注意力

$$\alpha_{ij}^{(0)} = \text{softmax}_j \left( \text{LeakyReLU}\left( \mathbf{a}^{(0)\top} \left[ W^{(0)}\mathbf{x}_i \;\|\; W^{(0)}\mathbf{x}_j \;\|\; \mathbf{e}_{ij} \right] \right) \right)$$

第一层输出

$$\mathbf{h}_i^{(1)} = \text{ReLU}\left( \sum_{j \in \mathcal{N}(i)} \alpha_{ij}^{(0)} W^{(0)} \mathbf{x}_j \right), \quad W^{(0)} \in \mathbb{R}^{256 \times 9}, \; \mathbf{h}_i^{(1)} \in \mathbb{R}^{256}$$

第二层注意力

$$\alpha_{ij}^{(1)} = \text{softmax}_j \left( \text{LeakyReLU}\left( \mathbf{a}^{(1)\top} \left[ W^{(1)}\mathbf{h}_i^{(1)} \;\|\; W^{(1)}\mathbf{h}_j^{(1)} \;\|\; \mathbf{e}_{ij} \right] \right) \right)$$

第二层输出

$$\mathbf{h}_i^{(2)} = \sum_{j \in \mathcal{N}(i)} \alpha_{ij}^{(1)} W^{(1)} \mathbf{h}_j^{(1)}, \quad W^{(1)} \in \mathbb{R}^{128 \times 256}, \; \mathbf{h}_i^{(2)} \in \mathbb{R}^{128}$$

全局池化

$$\mathbf{h}_{\text{pool}} = \frac{1}{N_a + M} \sum_{k=1}^{N_a+M} \mathbf{h}_k^{(2)}$$

Actor 输入(cat 模式):

$$\mathbf{z}_i = \begin{bmatrix} \bar{o}_i \\ \mathbf{h}_i^{(2)} \end{bmatrix} \in \mathbb{R}^{351}$$

logits

$$\text{logits}_i = \text{MLP}_{\text{actor}}(\mathbf{z}_i) \in \mathbb{R}^{M}$$

动作分布

$$\pi_i = \text{softmax}(\text{logits}_i) \in \mathbb{R}^{M}$$