multi agent replication
论文《Event-triggered Design for Optimal Output Consensus of High-order Multi-agent Systems》复现
1. 论文信息
- 论文标题: Event-triggered Design for Optimal Output Consensus of
High-order Multi-agent Systems
- 论文链接: Event-triggered
Design for Optimal Output Consensus of High-order Multi-agent
Systems
- 作者: Yutao Tang, Huaihui Liu, Ruonan Li, Kui Zhu
- Abstract: This paper studies the optimal output consensus problem for a group of heterogeneous linear multi-agent systems. Different from existing results, we aim at effective controllers for these high-order agents under both event-triggered control and event-triggered communication settings. We conduct an embedded design for the problem and constructively propose a multi-rate event-triggered controller with a set of applicable parameters. The proposed event-triggered rules are shown to be free of Zeno behaviors and can achieve the optimal output consensus goal for these high-order agents. A simulation example is given to verify the efficacy of our designs.
代码复现
依赖Eigen库进行矩阵计算, clion编译运行.
绘图使用matplotlib, 编译器为pycharm.
1. 代码结构
1 |
|
核心部分就是UpdateController, UpdateSignalGenerator, UpdateDynamics三个函数. UpdateSignalGenerator实现upper lawer, 核心部分就是UpdateController实现lower lawer. 首先调用ShouldTrigger函数判断是否满足ETC条件, 如果满足, 则更新输入. UpdateDynamics三个函数实现agent的动力学更新.
状态的更新采用Runge-Kutta方法, 实现方法如下:
1 |
|
plot目录下为python绘图代码.
1 |
|
2. 仿真结果

效果不好, 但是可以看出, 一致性是达到了的, 收敛到0.5附近.
3. 期间遇到的问题
3.1 Event-triggered-control(ETC)设计死锁
起初在实现ETC逻辑时, 采用的方法是先判断是否满足ETC条件, 再判断是否需要更新输入. 这种情况会导致agent的状态不更新, 造成死锁. 也就是说, ETC条件是永远不满足的, 因为依赖agent的状态更新. 而agent状态更新的前提是ETC条件满足. 解决方法是, 引入state_new变量, 先更新状态, 再判断event-trigger条件, 如果满足条件, 则更新状态. 这样就可以避免死锁问题.
代码中的实现如下:
1 |
|
然而, 笔者在完成此逻辑后, 不由产生了一个疑问, ETC的设计是为了减少资源消耗, 但是如果每次都更新状态, 那么不就失去了ETC的意义吗? 后面找了找资料, 仔细想了想, 大概可以这样理解: ETC节省的是执行, 而不是观测和预测. 观测不可避免, 获取系统状态是必需的, 但是执行是可以避免的. ETC的设计主要是为了减少执行的频率, 减少通信/执行开销.
3.2 z的更新问题
在实现z更新的逻辑时, ShouldTriggerCommunication是写错了的, 所以跑出来的结果很奇怪. 当时是判断ETC条件满足后, 更新z. 实际上应该是更新z_dot才对, 也就是z的导数. 而z的更新是整个过程都要进行的. z的更新也是采用了Runge-Kutta方法. 这个问题已经修复了.
1 |
|
3.3 参数疑问
最后得到的结果很不好, 可能是参数设置的问题, 更有可能是笔者对论文理解的不够深入, 所以部分逻辑实现错误.
Agent-3
仿真结果得到z是满足一致性要求的, 但是agent-3的状态输出y却没办法收敛到z3. 暂时没有找到原因.
理论分析
1. 理论基础
对于多智能体系统, 考虑高阶线性系统:$$
$$ 每个智能体具有不同的动态特性(异构).
考虑最优一致性问题, 目标是设计控制器使得所有智能体的输出一致,
设计分布式控制器使得:
总的来说, 论文的目标是设计一个分布式控制器, 使得所有智能体的输出一致, 并且最小化每个智能体的局部目标函数.
2. 信号生成器设计
我们期望每个agent i生成一个状态
梯度下降
对优化问题:
上式可以看作是一个分布式的梯度下降算法, 其中第一项是agent
i的局部目标函数的梯度, 驱动
辅助变量
上述算法对于高阶系统或复杂网络不够稳定,
在事件触发控制环境下收敛精度不高或速度慢. 于是引入辅助变量
github仓库:multi_agent
博客:multi-agent-replication