• 一阶多智能体的平均一致性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

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

  • 相关阅读:
    HTML5期末考核大作业,网站——旅游景点。 学生旅行 游玩 主题住宿网页
    实现登陆模块时Cookie,Session,Token的理解
    freeRTOS内部机制——创建任务的内部细节
    KVM报错:Unable to connect to libvirt qemu:///system. 确定 ‘libvirtd’ 守护进程正在运行。
    .NET周刊【10月第3期 2023-10-22】
    基于Java旅游网站管理系统、Java旅游线路和景点网站系统设计与实现 毕业设计开题报告
    动手学习深度学习08----线性模型+基础优化算法
    AM@导数和微分的应用@弧微分和曲率
    Java 面试题:强引用、软引用、弱引用、幻象引用有什么区别?
    SQL 基本命令
  • 原文地址:https://blog.csdn.net/weixin_43903639/article/details/133361372