【PSO-PID】使用粒子群算法整定PID参数控制起动机入口压力值

news2025/7/13 17:54:21

  最近在学优化算法,接触到了经典寻优算法之粒子群PSO,然后就想使用PSO算法来调节PID参数,在试验成功之后将此控制算法应用到了空气起动系统上,同时与之前的控制器进行对比看看哪种控制效果最好。

0 引言

  PID参数整定主要有两种:① 传统整定方法:幅值-相角裕度法、工程整定法、Z-N频率响应方法等,传统整定方法需要一定的工程经验,且只能获得相对意义上的最佳参数组合。② 新兴智能寻优算法如神经网络法、粒子群优化法等,其能自主的在约束条件的限制下寻找最优的控制参数,智能控制的发展为PID的参数整定提供了新的途径。
  粒子群算法(PSO)属于种群搜索的自适应优化算法,其基本思想是把鸟群中的每个鸟看成一个粒子,鸟群寻找食物的过程中,不确定食物的具体位置,没有具体的飞行目标。只知道自己和食物的位置关系,为了尽快找到食物,它们通过对距食物最近的鸟的附近空间的搜索来达到找到食物的目的。
  PSO优化算法因其结构简单,寻优效率高、精度高的特性常被广泛应用到参数整定中

1 PSO算法原理

  粒子群算法的整个寻优过程是:先对粒子群中的初始粒子的位置和速度进行初始化设置,然后进行粒子群算法的迭代过程,在迭代过程中,计算出每次迭代过程中粒子的适应度值,根据适应度值,粒子进行速度和位置信息的更新,直至迭代过程结束。在迭代结束后,得到全局最优粒子,控制器的参数组合也到达预设条件下的最优,以此来提高控制器的控制能力。粒子群算法中主要包括粒子、极值、适应度函数几个要素
  ① 粒子:算法的每次迭代都是同时对粒子位置和速度进行更新,粒子位置代表的就是所要求的解,速度是每次迭代时位置的调节步长。为了避免算法中粒子盲目搜索,通常要根据实际控制量的具体范围设定位置和步长的上下限 [ − X max ⁡ , X max ⁡ ] \left[ -X_{\max}\text{,}X_{\max} \right] [XmaxXmax] [ − V max ⁡ , V max ⁡ ] \left[ -V_{\max}\text{,}V_{\max} \right] [VmaxVmax]粒子的位置和步长更新方式为:
{ v i d k + 1 = w × v i d k + c 1 × r 1 × ( p i d − x i d k ) + c 2 × r 2 × ( p g d − x i d k ) x i d k + 1 = x i d k + v i d k + 1 \begin{cases} v_{id}^{k+1}=w\times v_{id}^{k}+c_1\times r_1\times \left( p_{id}-x_{id}^{k} \right) +c_2\times r_2\times \left( p_{gd}-x_{id}^{k} \right)\\ x_{id}^{k+1}=x_{id}^{k}+v_{id}^{k+1}\\ \end{cases} {vidk+1=w×vidk+c1×r1×(pidxidk)+c2×r2×(pgdxidk)xidk+1=xidk+vidk+1式中, v i d k + 1 v_{id}^{k+1} vidk+1 表示第 i i i 个粒子在第 k + 1 k+1 k+1 次迭代中第 d d d 维上的速度信息, x i d k + 1 x_{id}^{k+1} xidk+1 表示第 i i i 个粒子在第 k + 1 k+1 k+1 次迭代中第 d d d 维上的位置信息, c 1 c_1 c1 c 2 c_2 c2 为学习因子, w w w 为惯性权重。
  ② 极值:算法的每次迭代都需要参考两个极值,即全局最优值 p g d p_{gd} pgd 和粒子个体的历史最优值 p i d p_{id} pid 。通过不断比较、计算种群中每个粒子的适应度值来得到这两个极值。
  ③ 适应度函数: 粒子群算法中,为了检验所求值的优劣,引入适应度函数,目前为止所有的适应度值函数中考量最为综合、合理的评判指标为 ITEA 方法,即 J = ∫ 0 ∝ t ∣ e ( t ) ∣ d t J=\int_0^{\propto}{t\left| e\left( t \right) \right|dt} J=0te(t)dt
PSO算法粒子迭代示意图为:

2 改进PSO算法

  由于惯性权重 w w w对于算法的寻优过程影响很大,现在的研究也大多集中在惯性权重的改进方面,来解决粒子群算法容易陷入局部最优的问题。
  惯性权重 w w w 的设计方法有:① 线性递减惯性权重策略: w = w max ⁡ − ( w max ⁡ − w min ⁡ ) t T max ⁡ w=w_{\max}-\left( w_{\max}-w_{\min} \right) \frac{t}{T_{\max}} w=wmax(wmaxwmin)Tmaxt② 非线性递减惯性权重策略: w = w max ⁡ − ( w max ⁡ − w min ⁡ ) ( t T max ⁡ ) 2 w = w max ⁡ − ( w max ⁡ − w min ⁡ ) [ 2 t T max ⁡ − ( t T max ⁡ ) 2 ] w=w_{\max}-\left( w_{\max}-w_{\min} \right) \left( \frac{t}{T_{\max}} \right) ^2 \\ w=w_{\max}-\left( w_{\max}-w_{\min} \right) \left[ \frac{2t}{T_{\max}}-\left( \frac{t}{T_{\max}} \right) ^2 \right] w=wmax(wmaxwmin)(Tmaxt)2w=wmax(wmaxwmin)[Tmax2t(Tmaxt)2]  通过对比,在相同的条件下,采用非线性惯性权重的粒子群算法收敛速度更快,陷入局部最优的情况减少,得出的控制器参数更加有效。

3 PSO-PID控制器设计

  利用 PSO 算法的寻优特性对 PID 控制器的三个参数进行调整,将 PSO 算法的维度设定为3,每个粒子的位置信息在这 3 个维度的分解量都对应的表示一组 PID 参数值。粒子群PSO-PID优化流程如下图所示。

4 仿真结果与分析

  将PSO-PID控制方法与PID控制、RBF-PID控制、ADRC控制这三种控制方法进行对比,在相同的参数下进行仿真,仿真模型以及结果如下。

① 搭建模型

② PSO-PID的迭代过程和ITAE变化曲线为

  可以看出,随着迭代次数的增加,群体适应值在不断地减小直至稳定在一个值左右。
③ PID参数变化曲线:

  可以看出比例系数 Ki 随着迭代次数的增加逐渐减小,而积分系数 Ki 和微分系数 Kd 始终保持在一个值,无明显变化。
④ 寻优前后的跟踪对比:

  可以看出寻优前与寻优后存在明显的改进,寻优后的跟踪曲线控制效果更好,能更好的跟踪上参考曲线。
⑤ 四种控制器的控制效果对比:

  可以看出最后的控制效果从好到坏依次为:PID < RBF-PID < PSO-PID < ADRC。但是,ADRC也有它的缺点,即当采样时间不在0.001~0.0001这个区间内时,其控制效果达不到最好。在实际的PLC控制系统中,对于一般优先级的模块来说,PLC的采样时间在100ms或10ms这种量级,达不到1ms甚至0.1ms这种级别,所以当采样时间过大时,可能ADRC的控制效果还不如PID控制。
  另外,我还发现个问题,几乎所有文献中,使用PSO-PID控制器的参考输入都是用的阶跃输入信号或者常值输入信号,在我多次使用其他类型输入仿真试验之后得出结论,使用阶跃信号的PSO优化效果最好,调优效果最明显。

5 参考文献

[1] 曹刚,令狐克均,吴怀超,等. 基于PSO-PID的重型AT主油压调节的研究[J]. 机床与液压,2019,47(16):152-156
[2] 康日晖. 基于改进PSO-PID算法的四轴飞行器飞控系统研究[D]. 山西:太原理工大学,2018.
[3] 高杰. 基于粒子群算法的微电网经济调度优化[D]. 长江大学,2021.
[4] 杜文正,谢政,童国林. 桥式起重机PSO-PID防摆控制器的设计[J]. 机床与液压,2013,41(13):98-100.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谁说程序员不懂了浪费,女神节安排

Python的PyQt框架的使用一、前言二、女神节文案三、浪漫的代码四、官宣文案一、前言 个人主页: ζ小菜鸡大家好&#xff0c;我是ζ小菜鸡&#xff0c;特在这个特殊的日子献上此文&#xff0c;希望小伙伴们能讨自己的女神欢心。 二、女神节文案 1.生活一半是柴米油盐&#xff0c…

优化设计流程的“闭环”问题

7.优化设计流程的“闭环”问题 交互设计师有一项很重要的工作就是定义任务流程。在接到需求之后&#xff0c;设计师需要把抽象的需求设计成具象的流程&#xff0c;然后再把流程分配到不同的界面&#xff0c;最终形成成品。设计流程不难&#xff0c;但是设计好的流程非常难&…

VisualStudio2022制作多项目模板及Vsix插件

一、安装工作负载 在vs2022上安装“visual studio扩展开发 ”工作负载 二、制作多项目模板 导出项目模板这个我就不再多说了&#xff08;项目→导出模板→选择项目模板&#xff0c;选择要导出的项目→填写模板信息→完成&#xff09;。 1.准备模板文件 将解决方案中的多个…

SpringBoot整合ElasticSearch实现模糊查询,排序,分页,高亮

目录 前言 1.框架集成-SpringData-整体介绍 1.1Spring Data Elasticsearch 介绍 2.框架集成Spring Data Elasticsearch 2.1版本说明 2.2.idea创建一个springboot项目 2.3.导入依懒 2.3.增加配置文件 2.4Spring Boot 主程序。 2.5.数据实体类 2.6.配置类 2.7.DAO 数据…

速卖通、亚马逊、ebay打造爆款,借助测评自养号提高转化率

做速卖通、亚马逊、ebay只有打造爆款&#xff0c;才能够挣到钱&#xff0c;如果一年到头&#xff0c;不断测款&#xff0c;不断测试不同的广告打法&#xff0c;那么代表了什么&#xff1f;代表了你的试错成本相当高&#xff0c;一不小心&#xff0c;分分钟就能够把手头上仅有的…

【YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进NO.57】引入可形变卷积

文章目录前言一、解决问题二、基本原理三、​添加方法四、总结前言 作为当前先进的深度学习目标检测算法YOLOv8&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系列…

SRP合批问题

1&#xff09;SRP合批问题 ​2&#xff09;多个Base相机渲染到同一个渲染目标&#xff0c;移动平台花屏的问题 3&#xff09;粒子系统对GPU Instancing的支持 4&#xff09;如何修改URP下场景和UI分辨率分离&#xff08;不需要改颜色空间&#xff09; 这是第327篇UWA技术知识分…

苹果新专利实现无线技术传输睡眠数据,蓝牙在智能家居中的应用

苹果于 2017 年 5 月收购了芬兰科技公司 Beddit&#xff0c;只是在过去 6 年时间里并没有太大的动作。根据美国商标和专利局本周公示的清单&#xff0c;苹果获得了一项 Beddit 相关的技术专利。 根据专利描述&#xff0c;苹果使用一根或者多根天线&#xff0c;利用电磁辐射的…

详解Java8中如何通过方法引用获取属性名/::的使用

在我们开发过程中常常有一个需求&#xff0c;就是要知道实体类中Getter方法对应的属性名称&#xff08;Field Name&#xff09;&#xff0c;例如实体类属性到数据库字段的映射&#xff0c;我们常常是硬编码指定 属性名&#xff0c;这种硬编码有两个缺点。 1、编码效率低&#x…

Simulink 自动代码生成电机控制:在某国产ARM0定点MCU上实现自动代码生成无感电机控制

目录 前言 开发流程 定点化的技巧 代码生成运行演示 总结 前言 这次尝试了在国产arm0内核的MCU上实现Simulink自动代码生成永磁同步电机无传感控制。机缘巧合之下拿到了一块国产MCU的电机控制板和一个5000RPM的小电机。最后实现了无传感控制&#xff0c;在这里总结下一些经…

10.系统级I/O

1.基础所有的I/O设备被模型化为文件&#xff0c;所有的输入和输出被当作相应文件的读和写来执行应用程序在文件结尾检测到EOF(end of file)条件文本文件是只含有ASCII或Unicode字符的普通文件二进制文件是所有的其他文件对于内核&#xff0c;文本文件和二进制文件没有区别目录是…

女神节灯笼祝福【HTML+CSS】

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

STM32F103驱动LD3320语音识别模块

STM32F103驱动LD3320语音识别模块LD3320语音识别模块简介模块引脚定义STM32F103ZET6开发板与模块接线测试代码实验结果LD3320语音识别模块简介 基于 LD3320&#xff0c;可以在任何的电子产品中&#xff0c;甚至包括最简单的 51 作为主控芯片的系统中&#xff0c;轻松实现语音识…

Axure基础:事件和动态面板

这一篇文章我们主要是将如何做系统左侧的导航&#xff0c;并且告诉大家如何动态的切换各个页面。 一、事件 1、事件基础 事件的核心就是什么时候做什么事。其中的什么时候可以是如下&#xff1a; 能做的事情如下&#xff1a; 2、远程监控云中的事件 监控云需要达到这个效果…

React :一、简单概念

目录 1.什么是React&#xff1f; 2.谁开发的 3.为什么要学React&#xff1f; 4.React的特点&#xff1f; 5.React依赖包 6.第一个React程序 7.虚拟DOM的两种创建方法 8.虚拟DOM和真实DOM 1.什么是React&#xff1f; 用于构建用户界面的JavaScript库&#xff0c;是一个将…

Allegro如何用自带的功能将线段变成铜皮操作指导

Allegro如何用自带的功能将线段变成铜皮操作指导 在做PCB设计的时候,有时根据设计需要将线段变成铜皮,可以借助辅助工具来实现这一操作,但是Allegro自身也自带这个功能,如下图 需要把这段走线变成铜皮 具体操作如下 点击File点击Change Editor

【计算机基础】Socket IO

一、I/O 模型 一个输入操作通常包括两个阶段&#xff1a; 等待数据准备好从内核向进程复制数据 对于一个套接字上的输入操作&#xff0c;第一步通常涉及等待数据从网络中到达。当所等待数据到达时&#xff0c;它被复制到内核中的某个缓冲区。第二步就是把数据从内核缓冲区复…

在超算上安装文件树命令tree

超算平台使用的centos系统没有内置tree命令&#xff0c;需要通过源码安装。记录安装流程如下。 1. 下载源码包 下载链接如下&#xff1a; http://mama.indstate.edu/users/ice/tree/ 选择“Download the latest version” 如本文下载了源码包“tree-2.1.0.tgz”. 2. 源码包…

分享一个应急响应web日志:access.log文件分析小工具

有时做应急响应的时候&#xff0c;需要提取web日志如access.log日志文件来分析系统遭受攻击的具体原因&#xff0c;由于开源的工具并不是很好用&#xff0c;所以自己用Python3写了一个简单的日志分析工具。先介绍一下access.log日志access.log日志文件记录了所有目标对Web服务器…

「题解」日常遇到指针面试题

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章 &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下定决心去做” &#x1…