尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

模糊强化学习下带输入延迟的多智能体指定性能共识控制

发布时间:2026/9/26 9:02:56

资讯中心
01
ARTICLE

模糊强化学习下带输入延迟的多智能体指定性能共识控制

模糊强化学习下带输入延迟的多智能体指定性能共识控制
如果你在控制方向待得够久多半会碰到这样一个场景课题要求里写着一长串名词——多智能体、强化学习、输入延迟、模糊控制、指定性能共识控制最后还要在MATLAB里跑通并附上代码。第一次看到这套组合的时候我的第一反应是“这怕不是把关键词全堆上来了”。但真正动手把一个带输入延迟的非线性多智能体系统用模糊Actor-Critic强化学习实现带指定性能约束的最优共识控制之后我才意识到这五个词并不是生拼硬凑而是一条完整的问题链共识是任务层目标输入延迟是现实约束指定性能是工程指标模糊系统负责消化未知非线性强化学习负责把“最优”两个字落到实处。本文按这条链拆解原理、梳理关键公式并给出我在MATLAB里搭建仿真模型的完整代码结构与调参记录适合正在做多智能体一致性、预设性能控制以及想用强化学习做最优控制的研究生和工程师参考。1. 五个关键词其实是一条问题链共识、延迟、性能、模糊、强化学习各管哪一段1.1 共识控制任务层要解决什么多智能体系统说白了就是一组带通信拓扑的智能体各自只有局部信息通过邻居之间交换状态逐步让所有个体的状态同步到同一个值。如果系统里有一个领导者其余是从者问题就变成跟踪一致性问题每个从者都希望自己的状态最终跟上领导者的轨迹。更形式化一点假设有N个从者和1个领导者通信用图G描述邻接矩阵A [a_ij]智能体i能拿到智能体j的信息时a_ij 1。领导者对从者的连接用b_i表示b_i 1说明从者i能直接收到领导者的状态。定义一个局部邻域误差e_i Σ_{j1}^{N} a_ij (x_i - x_j) b_i (x_i - x_0)这个误差把“我和所有邻居差多少以及我和领导者差多少”揉到了一起。所有e_i同时收敛到0就等价于所有x_i都收敛到x_0。写成向量形式是 E (L B)(x - 1 x_0)其中L是图的Laplacian矩阵。L B这个矩阵的性质很关键只要通信图连通并且领导者至少能通过一条路径影响到每一个从者即领导者根可达L B就是正定矩阵一致性目标就有可能通过合适的控制律达到。很多入门材料会告诉你对一阶线性系统ẋ_i u_i直接取u_i -c e_i就能收敛。但一旦把系统换成非线性动力学再把执行器延迟和性能约束加进来这个简单结论就完全不成立了。这也是为什么后面需要那一堆工具。1.2 输入延迟与指定性能现实层为什么难输入延迟在真实系统里几乎必然存在网络通信需要时间、执行器机械响应有滞后、采样保持也引入等效延迟。最要命的是延迟会破坏相位裕度一个本来稳定的闭环加上0.1s的延迟就可能发散。我第一个仿真实验直接把这个滞后扔进模型结果控制量的符号在关键下降段严重滞后跟踪误差直接冲出了预设边界。比“不稳定”更隐蔽的问题是延迟对最优性的破坏。强化学习的目标是让某个代价泛函最小代价里通常包含当前控制输入u_i(t)但实际作用于系统的却是u_i(t - τ)。如果在设计代价函数和更新律时忽略这个错位你算出来的“最优策略”只是对虚假模型最优放到真实模型上既不最优甚至可能连稳定都保证不了。指定性能控制要解决的是另一类问题不光要收敛还要收敛过程好看。很多工程场景对超调量、收敛速度、稳态误差都有硬性要求比如机械臂关节角度不能突跳编队成员间距不能越过安全边界。PPC的思路是用一个性能函数ρ(t)框出一个时变的误差漏斗只要误差始终落在这个漏斗里暂态和稳态性能就都有了保证。1.3 模糊系统与强化学习算法层怎么补位现在问题清单已经有三项了——非线性不确定、延迟、性能约束。接下来是算法选型。多智能体系统里每个智能体的动力学f_i(x)、g_i(x)大概率是未知的至少是建模不准确的所以需要一种能在线的万能逼近器模糊逻辑系统就是干这个的用一组IF-THEN规则和隶属函数把未知函数在一个紧集内逼近到任意精度。强化学习在这里的角色不是“从零探索环境”那种游戏玩法而是求解最优控制的核心方程——HJB方程。对一个连续时间系统设计最优反馈控制需要求解一个偏微分方程解析解几乎不存在传统数值方法在高维下完全不可行。Actor-Critic结构的好处是把求解转化为两个神经网络的在线迭代Critic网络去逼近代价函数Actor网络去逼近最优控制律两个网络交替更新不断逼近HJB的解。在含延迟的系统里这个框架还能通过状态增广或者李雅普诺夫-克拉索夫斯基泛函的方式把延迟信息嵌进去后面会具体讲。实际写代码时模糊模块和Actor-Critic模块是分开的函数合在一起就是一个典型的事件驱动循环每个采样时刻读状态、算误差、做性能变换、模糊逼近、计算控制量、更新网络权重。下面我就按这个顺序把每个模块的模型和数学过程过一遍。2. 系统模型与控制框架含延迟的非线性多智能体系统怎么建模2.1 智能体动力学与通信拓扑考虑N个从者和1个领导者。第i个从者的动力学ẋ_i f_i(x_i) g_i(x_i) u_i(t - τ_i)这里x_i是状态f_i和g_i是未知的光滑非线性函数u_i是控制输入τ_i是输入通道的延迟。领导者x_0(t)是一条已知参考轨迹实际工程中也可能是时变目标我后面仿真里直接取x_0(t) sin(t)来做跟踪。对动力学模型要做的假设都是教科书级别的但写代码前还是要逐条确认g_i(x_i)需要有已知下界且符号固定这样控制方向不会反转延迟τ_i是有界常数或者时变但有上界仿真里我取τ_i 0.1s固定延迟未知函数在某个紧集内有界模糊逻辑系统的万能逼近性质才成立通信拓扑连通领导者根可达。这些假设在论文里看一眼就过了但仿真时每条都对应一次运行结果是否可信的校验少一条都可能跑出发散或者“假收敛”。2.2 局部邻域误差与同步目标同步目标用局部邻域误差E (L B)(x - 1 x_0)来刻画。工程上更常用的是直接定义每个智能体的分布式误差e_i因为它天然可执行——智能体i只能拿邻居状态拿不到全局信息。前面已经给了公式这里补充一个关键点E收敛到0和智能体状态一致收敛到x_0在“连通图领导者根可达”条件下是等价的。这个等价关系是后面所有误差变换和稳定性分析的前提别嫌它基础很多仿真结果对不上理论根源就是拓扑不满足条件。仿真里我选了一个4从者的环形拓扑每个智能体只跟左右邻居通信领导者只连接1号和4号智能体。矩阵L B的代码是这样A [0 1 0 1; 1 0 1 0; 0 1 0 1; 1 0 1 0]; % 环形邻接矩阵 D diag(sum(A, 2)); L D - A; % Laplacian矩阵 B diag([1 0 0 1]); % 领导者连接矩阵 M L B;如果M的最小特征值明显大于0说明拓扑条件满足。设计图拓扑时最容易犯的错是让某些从者完全收不到领导者信息链此时M奇异部分从者的误差根本压不进预设界内性能约束形同虚设。2.3 整体控制框架的工作流程整套控制器的运行可以拆成五步每步对应一个MATLAB函数读状态计算局部邻域误差e_i用性能函数ρ_i(t)做误差变换得到无约束的辅助误差ε_i模糊逻辑系统在线估计f_i和g_i得到f̂_i、ĝ_iActor-Critic网络根据ε_i给出最优控制u_i控制量经过延迟缓冲后作用于系统同时更新Critic和Actor权重。这样做的好处是模块之间完全解耦想改性能约束就只动第2步想换网络结构就只动第4步。我做对比实验时会把模糊模块关掉看纯RL效果再把RL关掉看纯模糊自适应效果。这种分层结构帮了大忙出问题能定位到到底是哪一环在拖后腿。3. 指定性能控制性能函数设计与误差变换是整套方案的地基3.1 性能函数的数学形式与参数含义预设性能的核心是选一个单调递减的正函数ρ(t)最常用的形式是ρ_i(t) (ρ_0 - ρ_∞) e^{-α t} ρ_∞三个参数各管一件事ρ_0是初始漏斗宽度必须大于初始误差|e_i(0)|否则变换函数在t0处直接无定义α控制了误差收敛的最慢速度α越大收敛越快但控制能量和抖振也越大ρ_∞是稳态误差允许上限工程上就是“最终偏差不能超过多少”。性能约束写为 -δ_min ρ_i(t) e_i(t) δ_max ρ_i(t)两个δ是为了同时刻画不对称暂态边界比如允许正向超调大一点、负向不能越界。我仿真里对称情况直接取δ_min δ_max 1。参数怎么选实战中我总结的规则是ρ_0取初始邻域误差最大值的1.2到2倍ρ_∞按稳态跟踪精度的1.5到2倍留裕量α先取1试跑。如果控制量饱和或者抖振明显就把α降到0.5如果误差在边界附近徘徊就把α升到2。3.2 误差变换的本质把约束化为无约束直接对含约束误差设计控制是麻烦的因为既要保证稳定又要保证不越界Lyapunov函数设计非常别扭。PPC的标准做法是用误差变换把有约束问题转成无约束问题。定义归一化误差z_i e_i / ρ_i然后做一个非线性映射ε_i (1/2) ln((1 z_i) / (1 - z_i))这个映射把z在(-1, 1)区间内的变化映射到整个实数轴反函数是z_i tanh(ε_i)。变换厉害在逻辑上闭环如果能设计控制律让ε_i有界这是无约束系统的标准稳定性问题那么z_i tanh(ε_i) 1立刻推出 -ρ_i e_i ρ_i性能约束自动满足。这个技巧是整个框架里最值得反复体会的一步。它把“不能让误差越界”这样一个硬约束转化成了“让辅助误差有界”这样一个软目标而后者用Lyapunov方法处理起来非常顺手。3.3 变换后的系统动力学与控制器任务对ε_i求导得到ε̇_i q_i(e_i, ρ_i) (ė_i - e_i ρ̇_i / ρ_i)把ė_i带入智能体动力学整理成关于ε_i的等效模型ε̇_i F_i(ε_i, ρ_i) G_i(ε_i, ρ_i) u_i(t - τ_i)其中F_i里包含未知非线性f_i、性能函数导数ρ̇_i以及拓扑耦合项G_i是等效控制增益。到这里整个控制任务变得清爽设计u_i让ε_i系统稳定且最优。模糊系统直接作用在F_i的估计上Actor-Critic输出针对变换后的系统这正是标题里“最优指定性能共识控制”的落点——指定性能由ρ和变换保证最优由强化学习在变换后系统上实现。4. 模糊系统逼近与强化学习最优决策的分工细则4.1 模糊逻辑系统怎么逼近未知动态模糊逻辑系统的输出形式是f̂(x) θ_f^T ψ(x)其中θ_f是可调权重向量ψ(x)是模糊基函数向量。一个模糊基函数ψ_k(x)的构造方式是先给每个状态维度选隶属函数常用高斯型求出每条规则的前件隶属度乘积再做中心平均反模糊化。MATLAB里这段非常省事全是矩阵运算。高斯隶属函数μ_{F_i^k}(x_i) exp( -(x_i - c_{ik})² / σ_{ik}² )基函数ψ_k(x) (∏_i μ_{F_i^k}(x_i)) / (Σ_{j1}^{M} ∏_i μ_{F_i^j}(x_i))M是规则数。万能逼近定理保证只要规则数够多、隶属函数覆盖合理在紧集内逼近误差可以任意小。仿真里我用的是每维5条规则对单状态系统就是5个基函数计算量完全可忽略。模糊系统和神经网络的一个本质区别在于模糊规则的每条规则都有语义解释哪条规则贡献大可以打印出来看神经网络则是一团黑。调试模糊系统遇到问题时我习惯把规则激活强度打出来看是不是某些规则从未被激活——那通常意味着隶属函数中心选得太偏覆盖不到实际状态区域。4.2 性能指标与HJB方程现在考虑变换后系统的最优控制。对第i个智能体定义代价函数J_i ∫_t^∞ [ ε_i(s)^T Q ε_i(s) u_i(s)^T R u_i(s) ] dsQ和R分别是半正定和正定加权矩阵。值函数V_i(ε_i)满足哈密顿-雅可比-贝尔曼方程0 min_{u_i} [ ε_i^T Q ε_i u_i^T R u_i (∂V_i/∂ε_i) (F_i G_i u_i(t - τ)) ]如果延迟能被补偿或者把延迟后的输入作为增广状态最优解u_i*的形式是u_i* - (1/2) R^{-1} G_i^T (∂V_i*/∂ε_i)问题在于我们既不知道F_i、G_i也不知道V_i*的解析形式。两个未知叠在一起这正是模糊加强化学习一起上的理由模糊负责第一层未知RL负责第二层未知。4.3 Actor-Critic更新律与延迟的嵌入方式我用的是标准Actor-Critic在线结构。Critic网络逼近值函数V̂_i w_ci^T σ_ci(ε_i)Actor网络直接输出控制û_i w_ai^T σ_ai(ε_i)Critic的更新用的是HJB残差驱动的归一化梯度。定义残差e_h σ_ci(ε_i)^T w_ci ε_i^T Q ε_i û_i^T R û_i理想情况下如果V̂_i是精确值函数e_h应该为0。于是Critic权重沿e_h下降方向更新ẇ_ci -β_c [ σ_ci / (1 σ_ci^T σ_ci)² ] e_h分母上的归一化项是实战里保命用的不除的话当ε状态变大时σ的范数快速变大导致梯度爆炸权重分分钟飞掉。Actor的更新则基于策略梯度近似ẇ_ai -β_a σ_ai ( σ_ai^T w_ai - u_i* )这里u_i*来自“当前最优猜测”也就是由V̂_i推导出的贪心控制。边界上还需要加一个小的探测噪声n_i(t)来满足持续激励条件没有激励的话Critic权重只能收敛到平凡解这是在线强化学习绕不开的问题。延迟的嵌入方式我采用了状态增广的变体在每个采样时刻把最近一段时间内的控制历史[u_i(t - τ), ..., u_i(t)]拼进Critic的输入向量。严格的学术做法是定义增广状态在泛函空间上做分析但工程代码里就是开一个环形缓冲把延迟后的控制输入读出来跟ε_i拼接后送进网络。配合Lyapunov-Krasovskii泛函的稳定性条件效果等价于在代价函数里隐式加入了延迟鲁棒项。5. MATLAB仿真实现模型搭建、代码结构和关键函数5.1 仿真场景与图拓扑参数下面是我跑通的仿真配置。智能体动力学故意取非线性甚至带状态相关增益的形式ẋ_i sin(x_i) (1 0.2 cos(x_i)) u_i(t - 0.1)领导者轨迹x_0 sin(t)。4个从者环形拓扑矩阵M的设置见第2节。初始状态随机分布在[-0.6, 1.2]故意让部分初始误差略大这样能看到性能函数约束真正起作用的过程。仿真参数如下参数数值说明N4从者数量dt0.001 s仿真步长τ0.1 s输入延迟ρ_02.0性能函数初值ρ_∞0.01稳态误差上界α1.0性能函数衰减率β_c / β_a0.05 / 0.01Critic/Actor学习率Q1.0状态代价权重R1.0控制代价权重主循环骨架dt 0.001; T 20; t 0:dt:T; N 4; delayLen round(0.1/dt); % 延迟对应的缓冲长度 uBuf zeros(N, delayLen); x [0.5; 0.8; -0.3; 1.0]; % 从者初始状态一维状态示例 XL sin(t); % 领导者轨迹5.2 模糊模块与Actor-Critic模块的代码实现模糊基函数用一个独立函数实现function psi fbf(x, centers, widths) % x: 1 x nDim, centers: nRules x nDim, widths: 1 x nDim logPhi -sum(((x - centers).^2) ./ widths, 2); phi exp(logPhi); psi phi / (sum(phi) 1e-6); end注意分母加了一个小常数防止所有隶属度都为零时除零。这一步看着小实际能省掉很多NaN报错。Critic和Actor更新是每个智能体独立计算的% Critic更新 sigma_c fbf(eps_i, centers_c, widths_c); hjb sigma_c * wc_i Q * eps_i^2 R * u_i^2; wc_i wc_i - beta_c * sigma_c / (1 sigma_c*sigma_c)^2 * hjb * dt; % Actor更新 sigma_a fbf(eps_i, centers_a, widths_a); u_star -0.5 * Rinv * g_hat * (2 * wc_i * sigma_c); % 由Critic推出的贪心控制 wa_i wa_i - beta_a * sigma_a * (sigma_a*wa_i - u_star) * dt;Actor实际输出的控制量是û_i wa_i^T σ_a(ε_i)。我还在前5秒叠加了一个衰减探测噪声n_i 0.05 * e^{-0.3t} * sin(5t)用来激发Critic网络各模态避免持续激励不足。5.3 延迟仿真与求解器配置延迟的仿真处理没有捷径就是把控制量排队idx mod(k - 1, delayLen) 1; u_delayed uBuf(:, idx); uBuf(:, idx) u_apply; % 把当前计算出的控制量写入缓冲这里有一个经常被忽略的细节如果dt和延迟τ不成整数倍关系就需要做插值或者找最近采样点实际等效延迟会有dt/2的量化误差。20s仿真、dt 0.001只引入0.0005s偏差无所谓。但如果你用可变步长ODE求解器就要特别小心因为步长会动态变化缓冲索引会乱掉。我为了省事全部用固定步长欧拉法虽然精度低一点但整套逻辑可控出问题容易定位。真要高精度可以改用dde23专门解延迟微分方程代价是需要把Actor-Critic权重更新写成带历史依赖的函数代码复杂度会高一个量级。5.4 结果绘图与收敛性判断结果按四张图来看。第一张是每个从者的跟踪误差e_i和性能边界±ρ_i(t)画在一起只要所有e_i都夹在两条曲线中间指定性能就算达标。第二张是变换后误差ε_i随时间变化理想情况下应该从初始值快速收敛到原点附近的小邻域。第三张是控制输入u_i重点看有没有持续抖振或者瞬时尖峰。第四张是Critic权重w_ci的范数它不要求一定收敛到某个具体值但必须在十几秒内趋于平稳。如果一直大幅震荡说明持续激励不足或者学习率不匹配。判断“最优”是否真的达到我用的办法比较粗暴把最终学到的Actor策略固定下来跑一个完全不更新的测试回合看它的累计代价和训练回合末端Critic预测的值函数是否一致。两者偏差小说明Critic学到的代价函数和系统实际付出的代价对上了这就是“最优”的量化证据。6. 调参经验与踩坑记录从发散到收敛我试出来的实用规则6.1 学习率组合我第一个版本把β_c和β_a都设为0.5结果在5秒内权重爆炸NaN直接灌满了整个数组。原因有两层一是Critic残差没有归一化二是Actor和Critic的更新速率必须拉开差距。仿照多时间尺度随机逼近的标准做法我最后取β_c 0.05、β_a 0.01。经验法则是Critic要比Actor快一个量级因为Actor需要一个相对准确的“老师”来指导方向Critic还没站稳就去更新Actor策略会原地打转。6.2 模糊隶属函数数量与初始化规则数方面一维状态用5条高斯隶属函数中心均匀分布在状态取值范围上宽度取相邻中心距的1.2倍工作得很好。规则数加到9条收益很小但调参难度明显上升。状态维数一高就要小心指数爆炸三维以上建议用稀疏规则或者改RBF网络结构。模糊权重的初始值可以全部设零但一定要保证f̂_i在初始状态附近不能偏差太大。我遇到过这样一个问题f̂初始为零导致等效模型F_i的估计动作过小控制量一开始就饱和。后来我把模糊权重初始化成在初始状态处输出一个与真实单位量级一致的值——说白了就是用一个小偏置让控制器起步时不至于“睁眼瞎”。6.3 性能函数参数与Q、R的影响我把α从1调到2时误差收敛速度确实快了但控制输入的峰值几乎翻倍在延迟存在的情况下甚至激出了高频振荡。原因是性能函数收缩太快误差变换的增益在瞬间变大相当于把高增益比例项强行塞进回路。没有延迟的系统也许能承受有延迟的系统吃不下这种增益冲击。所以α和τ之间存在一个隐性约束ατ的乘积不能太大我试下来ατ大于0.4就明显劣化。这个坑教科书里很少明确写但仿真里非常直观。Q和R的比例决定“性能”和“控制成本”的性价比。Q / R取10时误差收敛得很漂亮但控制量在延迟作用下明显过冲Q / R降到1稳态误差略微变大控制量平顺很多。我的建议是先把RL关掉用固定的高增益反馈保证系统稳定并通过性能约束再以这个控制量的幅值为参照去选R这样RL学出来的控制不会一上来就超出执行器合理范围。6.4 一个典型发散案例的排查链路最后给一次实际踩坑记录。现象所有误差在初始阶段表现良好第8秒左右第2个智能体的误差突然冲出性能边界之后直接发散。排查过程我按顺序走了四步。第一步关掉RL把控制固定成纯模糊自适应加PD看是否还发散——发散消失问题定位到Actor-Critic模块。第二步把Critic残差e_h打印出来发现其数值在第8秒前快速增大说明是值函数估计先崩了。第三步检查σ_ci的范数发现ε_2因为某个瞬间扰动跑到了隶属函数覆盖范围之外所有基函数输出几乎为零归一化后梯度方向被噪声主导。第四步解决方案是把基函数宽度调大30%并对ε_i做软饱和处理在进入网络前把超出边界的部分拉回边界附近。这个案例给我的教训是模糊系统加强化学习这类在线学习结构最怕的不是参数不够准而是“网络进入从未见过的输入区域”后梯度信息失真。处理办法就两个方向要么扩大隶属函数覆盖范围要么在输入端做限幅。两招都上之后仿真从第5次开始再也没有出现过中途发散。这套框架我在本地还扩展过两个方向把固定拓扑换成时变切换拓扑以及在执行器饱和约束下做测试。模糊规则数和网络结构都不用大改主要调性能函数和Q、R就能得到可接受的结果。代码的每个模块我都拆成了独立函数改动起来很快。你如果正在往这个方向做我建议先把无延迟、无约束的版本跑通再逐步往里加模块每一步的仿真曲线都留底稿出问题可以二分定位。控制算法这种东西跑通一次不代表理解跑崩一次才真正理解。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。