
笔者感兴趣的研究方向主要是分布式优化,现有的分布式优化算法主要包括两大类,一个是基于一致性理论(Consensus based),另一个是扩散理论(Diffusion)。笔者主要学习和研究的是前者。所以,一大部分的分布式优化基于一致性和梯度下降的思想,这里“梯度”的研究的不同,诞生了许多不同的算法,例如 DGD、EXTRA、DGT等,分别使用的是局部梯度、历史的梯度信息、一个渐进的全局梯度跟踪,抑或者是梯度估计(包括确定性还是随机梯度估计),这些考虑涵盖了一些经典的算法设计。据此,一致性理论是分布式优化的基础,所以该专栏会简要回顾一些经典的一致性的结论,并且围绕此谈谈多智能体系统算法复现乃至Control和optimization community相关学术和工程算法的复现问题。当然,不容置疑,笔者的知识和能力相当有限,偏狭之处不可避免,欢迎大佬斧正赐教,个人见解仅作抛砖引玉。
再开始讨论之前,附上题文专栏的相关代码,是用matlab实现的
关于通信拓扑对于一致性和平均一致性的结果早在一篇TAC论文有所定论,并且为以后研究提供了理论框架(没有附上参考文献,不够严谨,请参考上面链接的专栏及其参考文献)。
对于无向图而言,如果无向图是连通的,那么使用经典的一致性协议可以实现一致性和平均一致性。
对于有向图而言,如果有向图包含一个有向生成树,可以实现一致性,如果有向图是强连通的,可以实现平均一致性。
以上的结论作为分布式优化关于通信拓扑的一般假设。
现有的数值算法,尤其是在 control community and optimization community(后者可能有待商榷),大部分都是计算一个微分方程组(ODEs)或者差分方程组,其证明思路一般是构造 Lyapunov 函数或者 Linear System Inequalities。说白了,就是怎么求解一个复杂的微分方程组,而且MATLAB已经封装了ode45,除非是一些刚性的ode,一般都能解决。真正在科学计算上有挑战性的是PDE的求解,这些求解器的优劣可以见诸与商用求解器,可见,科学计算、数值算法的可靠性、高精度,简直就是生产力,不容小觑,言归正传
现有论文里面很多都是一些常微分方程组的仿真,单纯的计算并不复杂,但是论文一般会考虑很多问题,比如通信上,事件触发、量化、压缩等等,还有一些性能上的控制,有限时间、固定时间、预设时间收敛等等,考虑了很多附加的条件,但也并不复杂。甚至在大部分情况下,可以自己手写一个简单的求解器,如前向欧拉法,在步长参数足够小的情况下,计算精度可以媲美ode45。这是一个大的方向,保证自己能够求解一个动态系统,然后还要考虑一些细枝末节的问题,包括初值的选择、参数的选择,建议预分配内存,可以加快仿真速度。特别是在MATLAB环境下,一般而言,python会快于MATLAB数值计算(前提是正确使用numpy)。
对于离散系统,那就更简单,算法都是迭代运行的,而且存储和计算非常直观;反而对于初学者,可能对于ode中的微分相当困惑,计算机无法模拟连续的时间,显然不太可行,实际还是用差分来近似,只是dt足够小,小到可以忽略计算误差。
那么仿真的关键其实在于充分理解文章的一些核心理论,有没有黑箱,有没有trick,如何补齐这些盲区,这时候多参考一些其他论文是有必要的。充分理解论文才是算法复现的关键,无论是introduction和证明,都可以帮助我们去理解,还包括算法描述、仿真的实验设计、参数描述等等,都体现了作者对于自己工作的思考与呈现。更多时候还会遇到复现结果与论文不一致,这时候反而需要谨慎,是有trick,是自己没有弄明白,还是说算法可能有问题。
还有算法复现的逻辑和实验的逻辑,一是来验证自己的idea有没有问题,二是更好地突出自己的工作,还有就是学习和锻炼吧。
如果没有以上考虑,也许大部分算法是不需要复现的。对于工程而言,实用、安全和性价比是不可忽视的因素。而学术,考虑的是对一个新问题或者新方法的构造(建模)和研究,所以创新很重要。
下面笔者以TNNLS上的一篇期刊论文的算法仿真为例《Design and Analysis of a Novel Distributed Gradient Neural Network for Solving Consensus Problems in a Predefined Time
》


这里预设时间控制(PTC)是非线性控制的典型特点,这篇文章提到的梯度神经网络(Gradient Neural Network, GNN)本质还是在利用非线性激活函数的特性,例如有限时间收敛、有限时间逃逸、多频跳变。正如笔者在前面所言,充分理解论文和算法是算法复现的前提,其次是一些trick和practice。这里的算法(12)或(13)本质就是一个ODEs。下面以论文的example为例,提供一些基本的代码和思想,几乎适用于所用的控制论文的算法复现(数据驱动、建模可能除外)。


谈到网络多智能体系统,图论的基础知识必不可少,这里需要根据fig 1正确的给出相关的邻接矩阵、Laplacian Matrix等,再次说明了基础知识和读懂论文的重要性。




仿真结果和论文里面一模一样,完美复现


太简单,不足为外人道矣。附上完整源码
以上是使用了官方的求解器,省时省力,推荐!!!下面介绍一种朴实、普适的Euler法

下面基于此实现 Euler Method


从仿真结果来看,当Euler Method使用的step size足够小时,如上,dt=0.0001,与MATLAB内置的ode45的结果别无二致。而且耗时相差不大,使用了预分配内存


综上所述,现有的大部分控制类算法都是基于动态系统,特别是常微分方程组和离散系统。除了一般的trick和数值分析的理论和方法,关键还是在于对基础知识和论文算法的理解。笔者希望这篇文章能够对读者的科研有所帮助。 谨以此文,献给我的父母和朋友!感谢我的母校和老师的教育。
L. Xiao et al., "Design and Analysis of a Novel Distributed Gradient Neural Network for Solving Consensus Problems in a Predefined Time," in IEEE Transactions on Neural Networks and Learning Systems, vol. 35, no. 3, pp. 3478-3487, March 2024