一阶多智能体一致性仿真:连续时间、离散时间、切换拓扑及时延与领导跟随一致性学习指南

张开发
2026/4/15 8:54:20 15 分钟阅读

分享文章

一阶多智能体一致性仿真:连续时间、离散时间、切换拓扑及时延与领导跟随一致性学习指南
多智能体一致性仿真 包括 1.一阶多智能体连续时间一致性 2.一阶多智能体离散时间一致性 3.一阶多智能体切换拓扑一致性按照周期性由La切换至Lb至Lc至Ld实现拓扑切换下的一致性。 4.一阶多智能体时延一致性包括了没有时延的一致性为最大时延百分之80时的一致性最大时延时的一致性。 5.一阶多智能体领导跟随一致性包括静态的领航一致性和动态的一致性。 适合新手学习。多智能体系统的一致性就像一群鸟在空中突然转向——每个个体不需要知道全局信息只需要跟着邻居调整状态。今天咱们用代码把这几种常见的一致性场景拆开揉碎从连续到离散从时延到领导跟随手把手看这群数字鸟怎么飞。一阶连续时间一致性先上硬菜。连续系统下的智能体动态可以用微分方程描述function dx continuous_consensus(t, x, L) dx -L * x; end这里的L是拉普拉斯矩阵反映了节点连接关系。假设有4个智能体初始位置随机% 生成环状拓扑 L [2 -1 0 -1; -1 2 -1 0; 0 -1 2 -1; -1 0 -1 2]; x0 [3; -1; 5; 0]; [t, x] ode45((t,x) continuous_consensus(t,x,L), [0 10], x0); plot(t, x); % 会看到四条曲线收敛到同一值核心在于拉普拉斯矩阵的零特征值对应的特征向量是全体1向量这保证了系统最终收敛到平均值。代码里的负号让系统能量不断衰减就像给每个智能体装了个弹簧阻尼器。离散时间版本更接地气实际系统多是离散采样的迭代方程变成x_next (I - ε*L) * x_current步长ε必须满足0 ε 2/λmaxλmax是L的最大特征值。举个步长过大的反例epsilon 0.5; % 当λ_max3时这个步长会导致震荡 for k 1:50 x (eye(4) - epsilon*L) * x; plot(x, o-); pause(0.1); end如果看到数值像蹦床一样上下跳说明步长选大了。合适的步长会让状态量平滑地挤到一起就像咖啡里的奶泡慢慢融合。切换拓扑像在玩俄罗斯方块多智能体一致性仿真 包括 1.一阶多智能体连续时间一致性 2.一阶多智能体离散时间一致性 3.一阶多智能体切换拓扑一致性按照周期性由La切换至Lb至Lc至Ld实现拓扑切换下的一致性。 4.一阶多智能体时延一致性包括了没有时延的一致性为最大时延百分之80时的一致性最大时延时的一致性。 5.一阶多智能体领导跟随一致性包括静态的领航一致性和动态的一致性。 适合新手学习。现实中的通信链路可能时断时续。我们设计四个拓扑结构周期性切换topologies {La, Lb, Lc, Ld}; % 预定义的四个拉普拉斯矩阵 current_topology 1; for t 1:100 if mod(t, 10) 0 % 每10步切换一次 current_topology mod(current_topology,4)1; end x x 0.1*(-topologies{current_topology}*x); end关键在于证明联合连通性——即便单个拓扑不连通只要在周期内所有边都被覆盖过系统仍能收敛。这就像团队里总有人临时掉线但只要轮流有人牵线搭桥最终还能达成共识。时延是把双刃剑时延超过临界值会让系统失稳。仿真时在更新量里加入延迟项tau_max 2; % 最大时延 buffer zeros(4, tau_max); % 存储历史状态 for k 1:200 delayed_x buffer(:, max(1, k-tau_max)); % 取延迟后的状态 x_new x 0.1*(-L*delayed_x); buffer [x, buffer(:,1:end-1)]; % 更新缓冲区 end当tau_max超过临界值时系统会出现类似回声的震荡。有趣的是适度的时延反而可能提高收敛速度就像老司机开车时的预判动作。领导跟随的两种玩法静态领导者的协议需要修改拉普拉斯矩阵L(1,:) [0 0 0 0]; % 第一个节点是领导者 L(1,1) 1; % 领导者自身权重 dx -L*(x - [5; zeros(3,1)]); % 领导者固定在5动态领导者则需要在更新时额外跟踪leader_pos sin(0.1*k); % 领导者运动轨迹 followers x(2:end) 0.1*(-L(2:end,:)*x (x(2:end)-leader_pos));这种结构下跟随者既要协调彼此又要追逐移动目标像极了足球比赛中的包抄配合。最后给新手的建议先拿连续系统练手理解收敛性的本质后再逐步增加复杂度。仿真时多调整参数观察相变点这比死记公式更能培养直觉。代码里的数值实验就像在虚拟世界养鱼——调好水温酸碱度看鱼群如何自组织游动。

更多文章