一阶多智能体的平均一致性

数学表达

一阶多智能体的运动学方程可以描述为
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 t→Tlim∣xi(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,∀t≥T

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

将一阶多智能体的一致性算法表示为
u i ( t ) = − ∑ j = 1 N a i j ( x i ( t ) − x j ( t ) ) u_i(t) = - \sum_{j=1}^{N}a_{ij}(x_i(t) - x_j(t)) ui(t)=−j=1∑Naij(xi(t)−xj(t))

这里有一个小技巧,如果用矩阵的形式表示的话,那么直接使用拉普拉斯矩阵表示
u ( t ) = − x ( t ) ⋅ L u(t) = - x(t) \cdot L u(t)=−x(t)⋅L

仿真

设置智能体的初始状态为
x = [ 1 2 3 4 ] x = \begin{bmatrix} 1& 2& 3& 4 \end{bmatrix} x=[1234]

智能体的连接为

复制代码
智能体1 --- 智能体2
  |          |
  |          | 
智能体4 --- 智能体3

那么拉普拉斯矩阵为
L = [ 2 − 1 0 − 1 − 1 2 − 1 0 0 − 1 2 − 1 − 1 0 − 1 2 ] L = \begin{bmatrix} 2 & -1 & 0 & -1\\ -1 & 2 & -1 & 0\\ 0 & -1 & 2 & -1\\ -1 & 0 & -1 & 2\\ \end{bmatrix} L= 2−10−1−12−100−12−1−10−12

仿真代码为(matlab)

matlab 复制代码
clc;clear;close

x = [1 2 3 4];
u = [];
A = [0 1 0 1;
     1 0 1 0;
     0 1 0 1;
     1 0 1 0;];
B = [2 0 0 0;
     0 2 0 0;
     0 0 2 0;
     0 0 0 2;];
L = B - A;
dt = 0.001;
k = 3;
lambda = 2;
mu = 0.1;

for i = 1:4000
    u1 = -x(end,:) * L;
    x1 = x(end,:) + u1 * dt;

    u = [u;u1];
    x = [x;x1];
end

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

matlab 复制代码
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')

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

控制量随时间变化图为

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

相关推荐
点云SLAM4 小时前
PyTorch 中.backward() 详解使用
人工智能·pytorch·python·深度学习·算法·机器学习·机器人
only-qi4 小时前
146. LRU 缓存
java·算法·缓存
梁辰兴6 小时前
数据结构:排序
数据结构·算法·排序算法·c·插入排序·排序·交换排序
野犬寒鸦6 小时前
力扣hot100:搜索二维矩阵 II(常见误区与高效解法详解)(240)
java·数据结构·算法·leetcode·面试
菜鸟得菜6 小时前
leecode kadane算法 解决数组中子数组的最大和,以及环形数组连续子数组的最大和问题
数据结构·算法·leetcode
楼田莉子7 小时前
C++算法专题学习——分治
数据结构·c++·学习·算法·leetcode·排序算法
一支鱼7 小时前
leetcode常用解题方案总结
前端·算法·leetcode
ulias2127 小时前
各种背包问题简述
数据结构·c++·算法·动态规划
m0_570466418 小时前
代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
java·开发语言·算法
吃着火锅x唱着歌8 小时前
LeetCode 1537.最大得分
算法·leetcode·职场和发展