• 一阶多智能体的平均一致性Leader-follower结构


    模型

    一阶多智能体的运动学方程可以描述为
    x ˙ i ( t ) = u i ( t ) , i ∈ { 1 , 2 , 3 , … , N } \dot x_i(t) = u_i(t),i\in\{1,2,3,\dots,N\} x˙i(t)=ui(t),i{1,2,3,,N}
    其中 x i ( t ) x_i(t) xi(t)为状态, u i ( t ) u_i(t) ui(t)为控制量,最终期望的结果为
    lim ⁡ t → T ∣ x i ( t ) − x j ( t ) ∣ = 0 \lim_{t\to T} |x_i(t) - x_j(t)| = 0 tTlimxi(t)xj(t)=0

    ∣ x i ( t ) − x j ( t ) ∣ = 0 , ∀ t ≥ T |x_i(t)-x_j(t)| = 0, \forall t \ge T xi(t)xj(t)=0,tT

    其中上式中第一个等式表示在时间趋近于 T T T的时候,智能体的状态趋于一致。第二个等式表示在时间超过 T T T的时候智能体的时间已经保持一致。

    算法

    在上一篇文章中我们构建了一个分布式的协同一致性算法,在本节中,我们构建一个leader-follower结构的协同一致性算法。其中leader的状态是leader算法设计的,设leader的编号为1,设leader的控制量为
    u 1 ( t ) = u 1 u_1(t) = u_1 u1(t)=u1
    follower的控制量可以设计为(这里设计了一个最简单的纯p控制):
    u i ( t ) = − k ∑ j = 1 N a i j ( x i ( t ) − x j ( t ) ) u_i(t) = - k\sum_{j=1}^{N}a_{ij}(x_i(t) - x_j(t)) ui(t)=kj=1Naij(xi(t)xj(t))
    在leader-follower结构中有一个假设,leader到每一个follower都是可达的,即leader的信息可以被广播在follower中。

    仿真

    设置智能体的初始状态为
    x = [ 1 2 3 − 3 ] x = [1233]

    x=[1233]
    智能体的连接为

    智能体1 --- 智能体2
      |    \      |
      |      \    | 
    智能体4 --- 智能体3
    
    • 1
    • 2
    • 3
    • 4

    那么拉普拉斯矩阵为
    L = [ 3 − 1 − 1 − 1 − 1 2 − 1 0 − 1 − 1 3 − 1 − 1 0 − 1 2 ] L = [3111121011311012]

    L= 3111121011311012
    leader的控制量为 u 1 = − x 1 u_1 = - x_1 u1=x1

    仿真代码为(matlab)

    clc;clear;close all;
    
    x = [1 2 3 -3];
    u = [];
    A = [0 1 1 1;
         1 0 1 0;
         1 1 0 1;
         1 0 1 0;];
    B = [3 0 0 0;
         0 2 0 0;
         0 0 3 0;
         0 0 0 2;];
    L = B - A;
    dt = 0.001;
    k = 2;
    k_1 = 3;
    
    for i = 1:4000
    	% follower 控制量
        u1 = - k.* (x(end,:) * L);
        % leader控制量
        u1(1) = - k_1 .* x(end,1);
        % 状态更新
        x1 = x(end,:) + u1 * dt;
    
        u = [u;u1];
        x = [x;x1];
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    画出控制量的曲线以及状态量曲线

    Fig1 = figure(1);
    plot(0.001:0.001:4.001,x,'LineWidth', 1.5);
    xlabel('t');
    ylabel('x');
    legend('agent1','agent2','agent3','agent4');
    print(Fig1,'x','-dpng','-r600')
    
    Fig2 = figure(2);
    plot(0.001:0.001:4.000,u,'LineWidth', 1.5);
    xlabel('t');
    ylabel('u');
    legend('agent1','agent2','agent3','agent4');
    print(Fig2,'u','-dpng','-r600')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    状态变量的随时间变化图为
    x

    控制量随时间变化图为
    x

    可以看到,最终四个智能体的状态全部归于一致。

  • 相关阅读:
    快速傅里叶变换(FFT),离散傅里叶变换(DFT)
    估算总体标准差的极差均值估计法sigma = R/d2
    在实施 360 反馈流程之前要考虑的 6 个问题
    Java项目:ssm教材征订与发放管理系统
    天天写SQL,这些神奇的特性你知道吗?
    Java Spring Cloud XV 之 Redis I
    Maven安装配置及注意事项
    5. 最长回文子串
    百度SEO工具,自动更新网站的工具
    6.1-深度学习简介
  • 原文地址:https://blog.csdn.net/weixin_43903639/article/details/133361372