1. 项目概述当多智能体强化学习遇上线性函数逼近在现实世界的复杂系统中从自动驾驶车队的协同到分布式电网的调度再到多机器人协作我们面对的核心挑战往往不是单个智能体的“单打独斗”而是多个智能体在动态、不确定环境下的交互与博弈。多智能体强化学习Multi-Agent Reinforcement Learning, MARL正是为解决这类问题而生。然而当我们将MARL的理论框架推向更具现实意义的场景——例如智能体需要处理高维甚至连续的状态空间或者其策略需要具备一定的鲁棒性以应对其他智能体的非理性或对抗性行为时问题就变得异常棘手。“Strategically Robust Multi-Agent Reinforcement Learning with Linear Function Approximation”这个标题精准地指向了MARL领域两个最核心也最富挑战性的前沿交叉点策略鲁棒性与可扩展性。策略鲁棒性要求智能体在博弈中其策略不仅对自身模型误差稳健更要对其他智能体的策略不确定性比如偏离均衡的行为具备抵抗力。而线性函数逼近则是解决“维度灾难”、让算法能够处理大规模状态空间的经典且重要的技术手段。将两者结合意味着我们希望设计出既能在理论上保证均衡解的稳健性又能在计算上高效处理复杂问题的MARL算法。这不仅是理论上的优美探索更是迈向实用化、工程化MARL系统的关键一步。最近像“actor-attention-critic”这类结合注意力机制的网络架构为处理智能体间的复杂关系提供了新思路但如何在其底层保证策略的稳健理论性质仍是一个开放问题。本文将从一个一线研究与实践者的视角深入拆解这个标题背后的技术脉络。我们将探讨为何鲁棒性在多智能体博弈中如此重要线性函数逼近如何成为连接理论与实践的桥梁并重点剖析一种名为RQRE-OVIRobust Quantal Response Equilibrium - Optimistic Value Iteration的核心算法思想。我会分享在实现这类算法时从理论公式到可运行代码之间那些“教科书上不会写”的工程细节、调参经验以及常见的“坑”。无论你是刚踏入MARL领域的新手还是正在寻找将稳健理论落地到实际项目的从业者这篇文章都将为你提供一份从原理到实操的详细路线图。2. 核心概念与问题定义从纳什均衡到鲁棒量化响应2.1 多智能体强化学习的核心挑战均衡与不确定性在单智能体强化学习中目标是找到一个最大化累积奖励的最优策略。而在MARL中由于其他智能体的策略同时也在变化单个智能体的“最优”策略依赖于他人的策略。因此我们通常寻求的是某种均衡Equilibrium其中最著名的就是纳什均衡Nash Equilibrium。在纳什均衡下没有智能体可以通过单方面改变自己的策略而获得更高的收益。然而经典纳什均衡的假设非常强它要求所有智能体都是完全理性的并且拥有关于博弈结构的共同知识。现实中智能体可能由于模型不准确、学习不充分或存在探索行为而表现出“非理性”。如果你的策略严格建立在对手会精确执行纳什均衡策略的假设上那么一旦对手稍有偏离你的性能就可能急剧下降。这就是缺乏策略鲁棒性Strategic Robustness的问题。2.2 引入鲁棒性从纳什均衡到鲁棒量化响应均衡为了建模这种策略不确定性学术界引入了更丰富的均衡概念。标题中提到的RQRERobust Quantal Response Equilibrium就是一个重要的代表。我们来拆解一下量化响应Quantal Response 它放松了“完全理性”的假设认为智能体在选择动作时并非总是选择绝对最优而是以一定的概率偏好更优的动作。这通常通过一个“softmax”函数来实现其中动作的价值越高被选中的概率越大但价值低的动作也有非零概率。这很好地模拟了智能体的探索行为或有限理性。鲁棒Robust 这是关键所在。鲁棒性在这里意味着智能体在评估其策略价值时并非假设对手会遵循某个特定的均衡策略而是考虑对手策略在一个不确定集Uncertainty Set内的最坏可能情况。智能体寻求的是在最坏情况下的最优策略即最大化最小收益这被称为鲁棒优化Robust Optimization思想。因此RQRE可以理解为在量化响应选择模型下每个智能体都采取一种针对对手策略不确定性的、鲁棒的最优响应最终达到一个稳态。这个均衡解天然地对对手的小范围策略扰动具有免疫力。2.3 可扩展性挑战为何需要线性函数逼近理论上的均衡概念再优美如果不能有效计算也是空中楼阁。在MARL中状态和动作空间常常是高维或连续的例如自动驾驶中车辆的位置、速度、传感器数据。我们无法为每一个可能的状态-动作对存储一个价值估计即查表法。线性函数逼近Linear Function Approximation是解决这一问题的基石性技术。其核心思想是用一个参数化的线性函数来近似真实的价值函数或策略。具体来说我们假设状态或状态-动作对的价值可以表示为V(s) ≈ θ^T φ(s)其中φ(s)是状态s的特征向量可以是手工设计的特征也可以是来自神经网络某一层的特征θ是需要学习的权重参数。通过这种方式我们需要学习的参数数量从状态空间大小减少到特征维度极大地提升了算法的可扩展性。将线性函数逼近与鲁棒均衡求解结合就构成了标题的核心设计高效的算法能够在具有线性函数逼近的MARL框架下收敛到鲁棒量化响应均衡RQRE或其近似解。3. 算法核心RQRE-OVI 的设计与原理剖析基于上述概念一种典型的算法设计思路是鲁棒量化响应均衡-乐观值迭代RQRE-OVI。让我们深入其核心设计。3.1 算法框架概览RQRE-OVI通常是一个基于值迭代Value Iteration框架的算法。在每一轮迭代中每个智能体i会执行以下核心步骤鲁棒值函数更新基于当前对所有智能体策略的估计计算在考虑对手策略不确定性在最坏情况假设下时自身每个状态的价值函数。量化响应策略更新根据更新后的鲁棒值函数通过一个softmax响应函数更新自身的策略。策略更新的概率与“指数化”的优势函数成正比。乐观初始化或偏差修正为了鼓励探索或加速收敛可能会采用乐观的初始值或在更新中加入一定的偏向bias。在函数逼近设定下步骤1中的值函数V(s)和步骤2中策略计算依赖的Q(s,a)函数都不再是具体的表而是由线性参数θ决定的函数V(s; θ)和Q(s, a; θ)。3.2 线性函数逼近的集成这是将理论算法工程化的关键。我们需要用可学习的线性权重θ来参数化值函数。例如状态-动作值函数可以近似为Q(s, a; θ) θ^T φ(s, a)其中φ(s, a)是状态-动作对的特征。那么算法的学习目标就从更新一个巨大的Q表转变为更新参数向量θ。这通常通过梯度下降类的方法来实现。例如在每次从环境中获得一个转移样本(s, a, r, s‘)后我们可以构造一个鲁棒贝尔曼误差Robust Bellman Error作为损失函数然后对参数θ进行梯度更新。注意特征设计是成败关键。线性函数逼近的性能极度依赖于特征φ(·)的表达能力。如果特征不能有效捕捉状态中与决策相关的信息算法性能将大打折扣。在实践中常常使用神经网络来自动提取特征即φ(s) f_神经网络(s)然后将最后一层特征作为线性逼近的输入。这时整个架构可以看作是一个神经网络但最后一层是线性的并且我们可能对这部分采用特定的理论分析。3.3 鲁棒性是如何实现的鲁棒性的核心体现在鲁棒贝尔曼算子Robust Bellman Operator中。与标准贝尔曼算子直接计算期望值不同鲁棒贝尔曼算子在计算下一个状态的价值时不是对对手的策略分布取平均而是取最小值对于最大化奖励的智能体而言是最坏情况。具体来说在更新Q_i(s, a_i)智能体i在状态s下采取动作a_i的值时我们需要考虑其他智能体联合动作a_-i的影响。在标准设定下我们假设对手遵循某个固定策略π_-i然后求期望。在鲁棒设定下我们假设对手的策略来自一个不确定集Π_-i然后计算最坏情况下的值[鲁棒贝尔曼更新] Q_i(s, a_i) R_i(s, a_i) γ * min_{π_-i ∈ Π_-i} E_{a_-i ~ π_-i, s‘ ~ P(·|s, a)} [ V_i(s‘) ]其中V_i(s‘)是下一状态的鲁棒值。这个min操作就是鲁棒性的来源。在实际算法中精确求解这个min操作通常很困难。不确定集Π_-i需要被精心定义例如可以是对手策略围绕某个名义策略的邻域用KL散度或总变分距离度量。求解这个极小化问题可能涉及内部的双层优化。4. 从理论到实践实现细节与工程挑战理论算法描述起来可能很简洁但将其转化为高效、稳定的代码中间有大量的工程细节需要处理。以下是我在尝试实现这类算法时积累的一些关键经验。4.1 不确定集的构建与求解不确定集的定义直接决定了鲁棒性的“强度”和计算复杂度。常见选择KL散度球{ π_-i: KL(π_-i || π̄_-i) ≤ ρ }其中π̄_-i是名义策略如上一轮迭代的策略ρ是半径。这要求对手策略与名义策略的差异不超过ρ。这种集合在理论上性质良好但求解内部的min问题可能涉及拉格朗日对偶和迭代求解。总变分距离球{ π_-i: TV(π_-i, π̄_-i) ≤ ρ }。计算上有时比KL散度更简单。策略参数扰动直接对对手的策略参数θ_-i施加扰动定义Π_-i { π(·; θ_-iδ) : ||δ|| ≤ ε }。这种方法更易于与神经网络策略结合。实操心得对于初学者我建议从总变分距离或简单的参数扰动开始。你可以先实现一个非鲁棒的基础MARL算法如Independent Q-Learning with Linear FA然后在此基础上在计算目标Q值时不是简单使用对手的当前策略而是有意识地采样几个对手策略的扰动版本例如给对手的策略网络参数添加小噪声并取这些扰动版本下得到的最小Q值作为目标。这是一种非常直观且易于实现的“工程化鲁棒性”方法虽然理论保证可能减弱但往往能带来实际的性能提升。4.2 线性函数逼近的实现技巧特征标准化Feature Normalization这是稳定训练的生命线。线性模型的输入特征φ(s)如果尺度差异巨大会导致梯度不稳定。务必对特征进行标准化使其均值为0标准差为1。如果使用神经网络提取特征可以在网络最后一层激活函数后加入批标准化BatchNorm层。目标网络Target Network与DQN一样使用一个延迟更新的目标网络来计算鲁棒贝尔曼更新中的目标值y r γ * min_{opponent} V_target(s‘)可以极大地提高训练的稳定性。目标网络的更新频率是一个关键超参数。经验回放Experience Replay存储转移样本(s, a, r, s‘, done)到缓冲池中并随机采样进行训练。这能打破数据间的相关性提高数据效率。在MARL中需要存储所有智能体的联合动作a。梯度裁剪Gradient Clipping在反向传播更新θ时对梯度向量的范数进行裁剪例如设定一个最大值如10.0防止梯度爆炸。4.3 处理智能体间交互集中式训练与分布式执行RQRE-OVI在理论分析时可能需要知道对手的策略或特征这暗示了一种集中式训练Centralized Training的范式。即在训练时我们可以访问所有智能体的信息状态、动作、策略参数来计算鲁棒更新。但训练好的策略在部署时每个智能体只依赖自身的局部观测进行决策即分布式执行Decentralized Execution。在实现时我们通常会构建一个“中心化”的批评家Critic网络它接收所有智能体的联合状态和联合动作作为输入输出每个智能体的Q值。而每个智能体有自己的“去中心化”执行者Actor网络只接收自身局部观测输出自身动作。这就是所谓的集中式批评家分布式执行者架构也是当前许多先进MARL算法如MADDPG的基础。RQRE-OVI可以与这种架构自然结合其“鲁棒性”计算在中心化批评家内部完成。5. 实战模拟一个简化版的鲁棒线性MARL示例为了让大家有更直观的感受我们设想一个简单的网格世界博弈两个智能体在一个小网格中移动目标都是到达各自指定的目标点但如果相撞则会受到惩罚。这是一个既有合作避免相撞又存在竞争路径可能交叉的混合博弈。我们将使用线性函数逼近的独立Q学习Independent Q-Learning作为基线并为其注入我们之前讨论的“工程化鲁棒性”。步骤1定义特征φ(s, a)对于每个智能体i其特征可以手工设计为到自身目标点的曼哈顿距离归一化。到另一个智能体的曼哈顿距离归一化。一个指示特征表示动作a_i是否会导致与对方智能体下一位置重叠。动作a_i的独热编码one-hot encoding。 将这些特征拼接起来就得到了特征向量φ_i(s, a_i)。注意这里我们做了一种简化Q函数只依赖于自身动作a_i和全局状态s这是一种“部分中心化”的视角在实践中状态s可能需要由每个智能体根据自己的观测来构建。步骤2定义鲁棒更新目标在标准独立Q学习中智能体i的更新目标是y_i r_i γ * max_{a_i‘} Q_i(s‘, a_i‘; θ_i_target)其中Q_i只依赖于自身的参数θ_i。为了引入鲁棒性我们修改这个目标。我们假设对手智能体j的策略会有小的随机扰动。在计算目标时我们不直接使用对手j的当前策略π_j而是从对手的策略π_j中采样一个动作a_j。对π_j添加一个小的随机噪声例如对动作概率向量添加均匀噪声并重新归一化得到扰动策略π_j_perturbed再从中采样一个动作a_j_perturbed。对于智能体i的每个可能的下一个动作a_i‘计算在两个不同对手动作下的下一状态价值v1 Q_i(s‘_with_a_j, a_i‘; θ_i_target)v2 Q_i(s‘_with_a_j_perturbed, a_i‘; θ_i_target)取两者中的较小值作为对该a_i‘的悲观估计v_pessimistic min(v1, v2)目标值变为y_i_robust r_i γ * max_{a_i‘} v_pessimistic这个min操作模拟了智能体i对对手j行为不确定性的防范。这就是一个非常具体的“鲁棒性”实现。步骤3训练循环import numpy as np import torch import torch.nn as nn import torch.optim as optim class LinearQAgent: def __init__(self, feature_dim, action_dim, lr0.01, gamma0.95): self.feature_dim feature_dim self.action_dim action_dim self.gamma gamma # 线性网络: 输入特征输出每个动作的Q值 self.net nn.Linear(feature_dim, action_dim) self.target_net nn.Linear(feature_dim, action_dim) self.target_net.load_state_dict(self.net.state_dict()) self.optimizer optim.Adam(self.net.parameters(), lrlr) self.loss_fn nn.MSELoss() def get_q_values(self, state_features): # state_features: [batch_size, feature_dim] return self.net(state_features) # [batch_size, action_dim] def update(self, batch, opponent_agent, perturb_prob0.2): # batch: (s, a_i, r_i, s‘, done) s_feat, a_i, r_i, s_next_feat, done batch # 1. 获取对手在状态s下的策略例如epsilon-greedy策略的动作概率 # 假设opponent_agent有一个get_action_probs方法 opp_probs_s opponent_agent.get_action_probs(s_feat) # [batch_size, opp_action_dim] # 2. 生成扰动后的对手策略 noise torch.rand_like(opp_probs_s) * perturb_prob opp_probs_perturbed opp_probs_s noise opp_probs_perturbed opp_probs_perturbed / opp_probs_perturbed.sum(dim-1, keepdimTrue) # 3. 从两个策略中采样对手动作这里为简化使用期望近似实际可采样 # 计算期望的下一状态特征是一个复杂问题这里我们做极度简化 # 假设我们能为每个(s, a_i, a_j)组合预先计算出s_next_feat。 # 在实际环境中这一步通常需要通过环境模型或仿真来获得。 # 此处仅为示意逻辑流程。 # 我们假设有一个函数 get_next_state_feature(s, a_i, a_j) 返回特征。 # 由于无法实现以下为伪代码逻辑注释 # with torch.no_grad(): # q_next self.target_net(s_next_feat) # 标准情况下的下一状态Q值 # # 我们需要计算鲁棒Q目标 # # 对于batch中的每一个样本计算其对应的两个可能的s_next_feat基于对手正常和扰动动作 # # 然后取这两个s_next_feat下max Q值中的较小者。 # # 由于环境交互的限制这一步在在线RL中难以直接实现。 # # 一种替代方案是在环境交互时就同时用正常策略和扰动策略各交互一步存储两条轨迹。 # # 或者在模型基于环境的情况下进行规划。 # 鉴于在线实现的复杂性一个更实际的工程折衷是 # 在计算目标时不修改s_next_feat而是修改目标Q值本身。 # 例如我们可以用当前网络对s_next_feat评估两次一次输入正常特征一次输入一个“扰动”特征比如对特征加噪。 # 然后取两次评估结果的最小值。 with torch.no_grad(): # 标准下一状态Q值 q_next_standard self.target_net(s_next_feat).max(dim1)[0] # [batch_size] # 对下一状态特征加噪模拟状态转移不确定性一种近似 s_next_feat_noisy s_next_feat torch.randn_like(s_next_feat) * 0.1 q_next_noisy self.target_net(s_next_feat_noisy).max(dim1)[0] # [batch_size] # 悲观估计 q_next_pessimistic torch.min(q_next_standard, q_next_noisy) target r_i (1 - done) * self.gamma * q_next_pessimistic # 4. 计算当前Q值 current_q self.get_q_values(s_feat).gather(1, a_i.unsqueeze(1)).squeeze(1) # [batch_size] # 5. 计算损失并更新 loss self.loss_fn(current_q, target) self.optimizer.zero_grad() loss.backward() # 梯度裁剪非常重要 torch.nn.utils.clip_grad_norm_(self.net.parameters(), max_norm10.0) self.optimizer.step() # 6. 软更新目标网络 self.soft_update_target() def soft_update_target(self, tau0.01): for target_param, param in zip(self.target_net.parameters(), self.net.parameters()): target_param.data.copy_(tau * param.data (1.0 - tau) * target_param.data)重要提示上面的代码是一个高度简化的概念性示例重点在于展示鲁棒性思想通过取最小值和线性函数逼近的实现框架。在实际的多智能体环境中精确计算对手策略扰动下的下一状态价值是极其复杂的通常需要模型知道环境动力学或非常精巧的架构设计如生成对抗网络来模拟最坏情况对手。示例中采用的对下一状态特征加噪的方法是一种非常粗糙但有时有效的工程近似它将“对手策略不确定性”和“环境转移不确定性”混合在了一起。真正的RQRE-OVI算法实现要复杂得多涉及嵌套优化。6. 常见陷阱、调试技巧与性能调优实现和训练这类算法时你会遇到很多挑战。以下是一些常见的“坑”和应对策略。6.1 训练不收敛或发散症状损失函数如贝尔曼误差剧烈震荡或持续上升智能体策略无法学到有意义的行为。排查与解决检查特征首先验证你的特征φ(s)是否包含足够信息来区分不同状态的价值。可以尝试用简单的表格法Tabular Method在小问题上测试如果表格法能学而线性逼近不能问题很可能出在特征上。尝试增加特征维度或使用神经网络自动提取特征。降低学习率这是最常用的手段。线性模型对学习率非常敏感。尝试将学习率降低一个数量级例如从0.01降到0.001。强化梯度裁剪检查梯度范数。如果梯度范数经常很大说明优化过程不稳定。将梯度裁剪的最大范数如代码中的max_norm调小。调整目标网络更新频率如果tau值太大软更新或更新频率太高硬更新目标网络变化太快会导致目标值不稳定。尝试减小tau如从0.01降到0.001或延长硬更新的间隔步数。鲁棒性强度鲁棒性参数如不确定集半径ρ或扰动概率perturb_prob设置过大会导致智能体过于悲观认为任何动作的收益都很低从而无法学习。尝试减小这个参数甚至先从0非鲁棒开始训练待收敛后再慢慢增加。6.2 策略过于保守或激进症状智能体表现得畏首畏尾不敢采取任何有风险的行动或者相反完全无视对手行为鲁莽。排查与解决分析鲁棒目标打印或记录在计算目标值时标准目标q_next_standard和悲观目标q_next_pessimistic的差异。如果差异始终很大且悲观目标远低于标准目标说明智能体极度悲观应调低鲁棒性参数。检查奖励函数鲁棒性会放大惩罚。确保你的奖励函数中惩罚项如碰撞惩罚的数值没有设置得过于巨大导致智能体为了避免任何微小的惩罚可能性而完全停滞。量化响应温度参数在量化响应策略更新中有一个温度参数τ在softmax中。τ越大策略越趋于均匀随机探索τ越小策略越趋于贪婪。如果策略过于激进贪婪可能是τ太小如果过于保守随机可能是τ太大。需要仔细调整。6.3 多智能体环境下的非平稳性问题这是MARL特有的经典问题。每个智能体都在学习环境从单个智能体的视角看是不断变化的因为其他智能体的策略在变这违反了传统RL关于环境平稳性的假设。应对策略采用中心化批评家如前所述使用一个能够观测所有智能体信息的中心化批评家来指导学习可以在训练阶段缓解非平稳性。使用策略集成Policy Ensembles在训练时为每个智能体维护多个策略副本。在计算鲁棒目标时考虑对手可能采用这些不同策略中的任何一个。这相当于隐式地扩大了对手策略的不确定集让智能体学会应对更多样的对手。对手建模Opponent Modeling显式地学习一个模型来预测对手的策略。然后将这个预测模型的不确定性如预测概率分布的方差作为不确定集构建的依据。这比固定的扰动半径更自适应。6.4 超参数调优指南没有一套放之四海而皆准的超参数。以下是一个大致的调优优先级和范围参考超参数影响典型初始值/范围调优建议学习率 (lr)模型收敛速度和稳定性[1e-4, 1e-2]首要调优对象。从较小值开始观察损失曲线若不下降则增大若震荡则减小。折扣因子 (gamma)智能体对未来奖励的重视程度[0.9, 0.99]任务越需长远规划值应越高。通常设在0.95-0.99之间。鲁棒性参数 (ρ/perturb_prob)策略的保守程度[0.01, 0.5]从0开始逐步增加观察智能体在对抗性测试中的性能变化。目标网络更新参数 (τ)目标值更新的平滑度[0.001, 0.1]越小越稳定但学习可能变慢。常设为0.01或0.005。批大小 (batch_size)每次参数更新的样本数[32, 512]越大训练越稳定但内存消耗大。通常从128或256开始。经验回放池大小数据多样性和相关性[1e4, 1e6]环境越复杂、探索性越强需要越大的池子。量化响应温度 (τ_qre)策略的探索/利用平衡[0.1, 10.0]影响策略的随机性。需要与学习率配合调整。调优时务必每次只改变一个参数并在固定的评估环境下例如使用一组固定的对手策略进行测试多次运行统计平均性能。使用TensorBoard或WandB等工具可视化训练过程至关重要。7. 进阶方向与扩展思考在掌握了基础实现后你可以沿着以下几个方向深入这也是当前MARL研究的热点。7.1 与深度网络结合超越线性线性函数逼近虽然理论清晰但表达能力有限。现代MARL几乎都深度神经网络。你可以将RQRE-OVI的思想与深度架构结合深度鲁棒Q网络DRQN用深度神经网络代替线性函数作为Q网络。此时鲁棒贝尔曼更新中的min操作需要对一个深度网络进行内部优化计算挑战更大。可能需要使用对抗训练Adversarial Training的技巧即训练一个“对手网络”来生成最坏情况下的状态扰动或动作。Actor-Attention-Critic架构这正是开头提到的网络热词。在这种架构中注意力机制被用来动态地衡量其他智能体对当前智能体决策的重要性。你可以将鲁棒性思想融入注意力权重的计算中。例如让智能体在计算注意力时不仅关注其他智能体的平均行为也考虑其行为可能偏离的“最坏情况”范围从而学习到更稳健的协作策略。7.2 更复杂的不确定集与博弈论基础RQRE只是鲁棒均衡的一种。你可以探索其他博弈论概念来定义不确定集和鲁棒目标鲁棒-斯塔克尔伯格均衡Robust Stackelberg Equilibrium适用于有领导者-跟随者层级的博弈。相关均衡Correlated Equilibrium与鲁棒性考虑智能体之间可以通过某种信号进行协调但信号可能被干扰或误解。 深入研究这些均衡概念并设计相应的学习算法是通向更强大、更通用鲁棒MARL的路径。7.3 从仿真到现实sim-to-real的鲁棒性最终目标是让算法在真实物理世界中运行。仿真环境Sim和现实世界Real之间存在难以避免的差距Sim-to-Reality Gap。鲁棒MARL在这里大有可为。你可以将“仿真模型的不准确性”和“其他智能体可能是人或其他系统行为的不可预测性”统一建模为策略不确定性。通过在仿真中就用鲁棒MARL进行训练让智能体学会在充满模型误差和意外行为的仿真环境中表现出色那么它迁移到现实世界时其鲁棒性可能会带来更好的泛化性能。我个人在尝试将这类算法应用于简单的多机器人编队任务时发现即使是一个经过简化的鲁棒性设计如第5节的工程化近似也能显著提高系统在面对通信延迟或单个机器人传感器短暂失效时的整体稳定性。这让我深信将策略鲁棒性思维嵌入MARL算法的设计哲学中是推动其从实验室走向实际应用不可或缺的一环。