基于PSO算法优化PID参数的一些问题

news2024/9/21 16:43:45

目录

前言

Q1:惯性权重ω如何设置比较好?学习因子C1和C2如何设置?

Q2:迭代速度边界设定一定能够遍历(/覆盖)整个PID参数二维空间范围吗?还是说需要与迭代次数相关?迭代次数越高,范围越大?

Q3:PID位置边界是一致比较方便寻优吗?如果我设置Kp范围为[0,100],而Ki和Kd的范围为[0,1],这样子的设置对寻优有很大影响吗?

Q4:如果PID位置边界我都设置为[0,10],速度边界怎么设置更好?[-1,1],[-5,5],[-10,10],速度边界的设置与迭代找到最优解的计算机求解速度有关联吗?

尾声


前言

当我再一次想要认认真真研究一下PSO粒子群算法优化PID参数的时候,准备去matlab中文论坛发帖子讨论,没想到这个论坛已经停止运营了...

下面我将提出四个非常重要的问题,并对这四个问题做出回答。这是我在做研究的时候想找寻“所以然”的一个结果。

在开始之前首先非常推荐一本书,有条件的可以去图书馆借来看看:《粒子群优化算法》李丽、牛奔,相信这本书可以解决你绝大部分疑惑。


PSO粒子群算法两个分常重要的公式:

 速度公式:

位置公式:


Q1:惯性权重ω如何设置比较好?学习因子C1和C2如何设置?

A1:在我的那篇呈现线性递减惯性权重的PSO-PID代码的文章中(🚪👉线性递减权重的PSO-PID算法),可以知道设置的惯性权重ω是从0.9随着迭代此时而线性递减到0.4的,而个人学习因子C1和社会学习因子C2设置的为一个定值,等于2。

其实,为了让粒子前期尽可能地搜索整个空间,后期更好地收敛到某一个点,加快仿真时间,我们可以设置惯性权重前期大后期小,这样前期惯性大主要还是靠自己的飞行速度,而后期惯性小就利于收敛;同理,对于个人学习因子C1,前期要大,后期要小;对于社会学习因子则反之。ω范围0.4~0.9(不一定是这个数),C1和C2的范围0.1~2

下面我分别给出常见的惯性权重和学习因子设置的公式:

惯性权重:

以下的ωstart都为0.9,ωend都为0.4

固定惯性权重

(C在0.4~0.9区间,这里取0.68比较好)

典型线性递减惯性权重

线性微分递减惯性权重

随机变化惯性权重

非线性动态惯性权重

(k取3比较好)

基于正切函数的惯性权重

(k取0.6比较好)

基于反切函数的惯性权重

(k取0.4比较好)


学习因子:

固定学习因子

(C1和C2在1~2.5区间)

线性变换学习因子

C_1start=2.5,C_1end=0.5

C_2start=0.5,C_2end=2.5

对称反余弦学习因子

C_1start=2.5,C_1end=0.5

C_2start=0.5,C_2end=2.5

非对称反余弦学习因子

C_1start=2.75,C_1end=1.25

)

C_2start=0.5,C_2end=2.25


以及不用惯性权重而用收缩因子,收缩因子K比起惯性权重,更能有效地控制约束粒子飞行速度,增强了算法局部搜索能力。

那么原来速度公式要变为:

其中

Q2:迭代速度边界设定一定能够遍历(/覆盖)整个PID参数二维空间范围吗?还是说需要与迭代次数相关?迭代次数越高,范围越大?

A2:

首先,速度边界的设定,VmaxVmin大小相等的相反数

其次,速度边界的设定没有固定就是某一个值的说法,速度边界设定与位置边界设定有关,如果Vmax过大,粒子可能飞过较好解;反之,如果Vmax过小,则粒子可能无法探测完整个解空间,所以要设置一个合适的速度边界

最后,迭代次数肯定和覆盖整个二维空间有关,迭代次数越高,覆盖完整的几率更高,但是你得考虑自己电脑的算力和计算时间的问题。

Q3:PID位置边界是一致比较方便寻优吗?如果我设置Kp范围为[0,100],而Ki和Kd的范围为[0,1],这样子的设置对寻优有很大影响吗?

A3:

我认为按照实际情况来设置不同的寻优范围就可以了,Kp、Ki和Kd可以设置不同的寻优范围,没有必要三个范围一致。比如本来实际Kd的数值就比较小,你让PSO算法在10~100的范围里面去寻找Kd的最优解,是无效的。

Q4:如果PID位置边界我都设置为[0,10],速度边界怎么设置更好?[-1,1],[-5,5],[-10,10],速度边界的设置与迭代找到最优解的计算机求解速度有关联吗?

A4:

在我另外一篇文章里面(🚪👉:PSO-PID算法迭代的PID值为什么变化范围那么小?)我也尝试过,只改变速度边界的大小进行对照试验,发现对于求解的结果是没有什么影响的,计算机求解速度的话每一次都会有些许差别,这个我当时仿真的时候没有进行计算。

其实速度边界和位置边界是有相关对于关系的:

根据这篇文章,Optimal choice of parameters for particle swarm optimization浙江大学学报,γ最佳范围在0.01~1,对于寻优目标函数为多峰函数(multimodel function),γ取0.5最好,对于单峰函数(unimodel function),γ取0.05最好。也就是说若取γ=0.1,当Xmax=10时,则Vmax=1。

同样是在这一篇文章中,也指出粒子群的粒子个数,最大不要超过50个粒子,不管是对于多峰函数问题还是单峰函数问题。

"While when it is larger than 50, PSO is not sensitive to the population size."

“当PSO大于50时,PSO对种群大小不敏感。”

这是原文,就算你超过了50个粒子,也对其不敏感,只是增加你matlab程序的时间。


尾声

希望我这些天的困惑解答会对同为研究相关问题的你有帮助!!!👍

不明白清楚的也可以在评论区积极探讨呀!😊

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

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

相关文章

阵列信号处理学习笔记(一)--阵列信号处理定义

阵列信号 阵列信号处理学习笔记(一)–阵列信号处理定义 阵列信号处理学习笔记(二)–空域滤波基本原理 文章目录 阵列信号前言一、阵列信号处理定义1.1 信号1.2 阵列 二、雷达数据中哪些属于空间采样总结 前言 MOOC 阵列信号处理…

Bubbliiiing 的 Retinaface rknn python推理分析

Bubbliiiing 的 Retinaface rknn python推理分析 项目说明 使用的是Bubbliiiing的深度学习教程-Pytorch 搭建自己的Retinaface人脸检测平台的模型,下面是项目的Bubbliiiing视频讲解地址以及源码地址和博客地址; 作者的项目讲解视频:https:…

数据结构排序合集(笔记)

目录 一.插入排序与希尔排序 二.选择排序与堆排序 三.冒泡排序和快速排序 四.归并排序 五.计数排序 一.插入排序与希尔排序 时间复杂度空间复杂度稳定性插入排序O(N^2)O(1)稳定希尔排序O(N^1.3)O(1)不稳定 插入排序: 希尔排序&#xff…

css-01-如何实现“文本过长(文本在一行排),超出部分被省略号代替”

目录 需求代码代码解释 需求 最近写一个项目&#xff0c;遇到了一个问题&#xff0c;就是希望实现下面这种文字效果&#xff1a;文字在一行排&#xff0c;超出的部分用省略号代替 代码 <!DOCTYPE html> <html lang"en"><head><meta charset…

OCC 创建点线面体

目录 一、利用封装已有算法实现 1、盒子建模算法封装 2、可视化 二、利用OCC 点线面实现 1、实现过程 2、实现一个面 3、拉伸面生成体 4、旋转面生成体 三、总结 一、利用封装已有算法实现 1、盒子建模算法封装 BRepPrimAPI_MakeBox box(2, 2, 2); 2、可视化 void VTK…

Gateway源码分析:路由Route、断言Predicate、Filter

文章目录 源码总流程图说明GateWayAutoConfigurationDispatcherHandlergetHandler()handleRequestWith()RouteToRequestUrlFilterReactiveLoadBalancerClientFilterNettyRoutingFilter 补充知识适配器模式 详细流程图 源码总流程图 在线总流程图 说明 Gateway的版本使用的是…

在线 PDF 制作者泄露用户上传的文档

两家在线 PDF 制作者泄露了数万份用户文档&#xff0c;包括护照、驾驶执照、证书以及用户上传的其他个人信息。 我们都经历过这样的情况&#xff1a;非常匆忙&#xff0c;努力快速制作 PDF 并提交表单。许多人向在线 PDF 制作者寻求帮助&#xff0c;许多人的祈祷得到了回应。 …

Python学习笔记—100页Opencv详细讲解教程

目录 1 创建和显示窗口... - 4 - 2 加载显示图片... - 6 - 3 保存图片... - 7 - 4 视频采集... - 8 - 5视频录制... - 11 - 6 控制鼠标... - 12 - 7 TrackBar 控件... - 14 - 8.RGB和BGR颜色空间... - 16 - 9.HSV和HSL和YUV.. - 17 - 10 颜色空间的转化... - 18 - …

分页查询与分页条件查询

--------------- 无PageHelper插件分页查询 1.创建PageBean实体类 Data NoArgsConstructor AllArgsConstructor public class PageBean<T> {private Long total;//总条数private List<T> items;//当前页数据集合 }类型安全性 泛型&#xff1a;提供了编译时的类型…

【学长工具库】1.如何快速部署开源框架 | 若依框架保姆级搭建教程

今天学长带来了一款十分适合自学的开源框架-若依框架&#xff0c; 本文会详细的教大家怎么部署这个系统。 文末有所有资料获取方式~ 框架技术栈 前端采用 Vue、Element UI。后端采用 Spring Boot、Spring Security、Redis & Jwt。权限认证使用 Jwt&#xff0c;支持多终端…

【IEEE出版,会议历史良好、论文录用检索快】第四届计算机科学与区块链国际学术会议 (CCSB 2024,9月6-8)

CCSB 2024会议由深圳大学主办&#xff0c;旨在探讨计算机科学的最新发展如何与区块链技术相结合&#xff0c;以及这一结合如何推动金融、供应链管理、数据安全和其他多个行业的革新&#xff0c; 本次会议将提供一个多学科交流的平台&#xff0c;汇集来自相关领域学者的研究和思…

vxe-弹窗初始化激活选中Vxe-Table表格中第一行input输入框

1.实现效果 2.Modal弹窗的渲染过程 一、Vue组件的生命周期 Vue组件从创建到销毁会经历一系列的生命周期钩子&#xff0c;这些钩子为开发者提供了在不同阶段插入自定义逻辑的机会。在Modal弹窗的上下文中&#xff0c;这些生命周期钩子同样适用。 beforeCreate&#xff1a;组件…

解决 Ubuntu 用户登录后的 shell 和功能问题

在使用 Ubuntu 系统管理用户时&#xff0c;可能会遇到一些常见的问题&#xff0c;比如新创建的用户无法使用常见命令&#xff08;如 ll&#xff09;以及输出信息没有颜色。这些问题通常与用户的默认 shell 有关。本文将总结如何解决这些问题&#xff0c;并确保新用户能够正常使…

【linux深入剖析】命名管道 | 匿名管道与命名管道的区别 | system V共享内存

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1. 命名管道2. 创建命名管…

STM32之九:ADC模数转换器

目录 1. 简介 2. ADC 2.1 逐次逼近型寄存器SAR 2.2 ADC转换时间 3 ADC框图 3.1 8 bit ADC0809芯片内部框图 3.2 ADC框图 3.2.1 注入通道和规则通道 3.2.2 单次/连续转换模式 3.2.3 扫描模式 3.2.4 外部触发转换 3.2.5 数据对齐 3.2.6 模拟看门狗 4. 总结和ADC驱…

mac无法清空废纸篓怎么办 mac废纸篓清空了如何找回 cleanmymac误删文件怎么恢复

废纸篓相当于“一颗后悔药”&#xff0c;用于临时存储用户删除的文件。我们从从Mac上删除的文件&#xff0c;一般会进入废纸篓中。如果我们后悔了&#xff0c;可以从废纸篓中找回来。然而&#xff0c;有时我们会发现mac无法清空废纸篓&#xff0c;这是怎么回事?本文将探讨一些…

Unity-URP-SSAO记录

勾选After Opacity Unity-URP管线&#xff0c;本来又一个“bug”, 网上查不到很多关于ssao的资料 以为会不会又是一个极度少人用的东西 而且几乎都是要第三方替代 也完全没有SSAO大概的消耗是多少&#xff0c;完全是黑盒(因为用的人少&#xff0c;研究的人少&#xff0c;优…

JMeter学习笔记:线程组

继续&#xff1a;请求&#xff08;Sampler元件模拟的用户请求&#xff09;出错后继续运行&#xff1b; 启动下一进程&#xff1a;如果出错&#xff0c;则同一脚本中的余下请求将不再执行&#xff0c;直接重新开始执行&#xff1b; 停止线程&#xff1a;如果遇到请求&#xff…

51单片机嵌入式开发:14、STC89C52RC 之HX1838红外解码NEC+数码管+串口打印+LED显示

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 STC89C52RC 之HX1838红外解码NEC数码管串口打印LED显示 STC89C52RC 之HX1838红外解码NEC数码管串口打印LED显示1 概述2 硬件电路2.1 遥控器2.2 红外接收器电路2.3 STC89C52单…

深入理解Linux网络(三):TCP对象创建

深入理解Linux网络&#xff08;三&#xff09;&#xff1a;TCP对象创建 TCP对象创建inet_createsock_init_data TCP对象创建 常见的三句TCP编程&#xff1a; int main() {int sk socket(AF_INET, SOCK_STREAM, 0);connect(sk, ...)recv(sk, ...) }简单的两三⾏代码&#xff…