粒子群算法(PSO)整定/优化PID参数

        摘要:PID参数整定,这玩意没什么特别好的方法,按工程方法将模型化为典型I系统,II系统,实际中也不太好用,要依赖模型的精确参数。计算得到PI参数,也会因为建模的过程的简化,带来误差。而且超调量,响应时间,抗扰能力这些指标用公式表示出来也麻烦。
   最最重要的是,TMD,各种性能指标是耦合的,例如超调量小,响应时间往往会长,有点拆了东墙补西墙,来回调,很麻烦。所以一般情况是,先计算个大概,再试凑调参。PID控制器参数的工程整定方法,主要有临界比例法、反应曲线法和衰减法。三种方法各有其特点,其共同点都是通过试验,然后按照工程经验公式对控制器参数进行整定。但无论采用哪一种方法所得到的控制器参数,都需要在实际运行中进行最后调整与完善。

       碎嘴:看论文看的想睡觉,更一个粒子群参数优化。(知识面较窄,不对的地方轻喷)与其他的算法一样这只是一个优化算法而已,本文实现的是最原始的粒子群进行PI整定.有容易陷入局部最优等确定。更牛逼的!改进PSO,多目标PSO(MPSO)有时间再折腾。(这些不是我的主要研究方向,仅锻炼代码能力,实现一些小的研究,更多是兴趣爱好,以及搞钱哈哈哈)
       代码自己逐段研究过,检查每次种群有没有跟新,位置是不是在限定范围内等,我都检验过一遍。注释写的详细,怕自己用的时候看不懂。
       先来给同学们看一波结果。

         

图1 代码、结果展示

粒子群流程图、伪代码如下

算法流程图
粒子群算法伪代码

Step0 序章

       PID参数整定,这玩意没什么特别好的方法,按工程方法将模型化为典型I系统,II系统,实际中也不太好用,要依赖模型的精确参数。计算得到PI参数,也会因为建模的过程的简化,带来误差。而且超调量,响应时间,抗扰能力这些指标用公式表示出来也麻烦。

       最最重要的是,TMD,各种性能指标是耦合的,例如超调量小,响应时间往往会长,有点拆了东墙补西墙,来回调,很麻烦。所以一般情况是,先计算个大概,再试凑调参。PID控制器参数的工程整定方法,主要有临界比例法、反应曲线法和衰减法。三种方法各有其特点,其共同点都是通过试验,然后按照工程经验公式对控制器参数进行整定。但无论采用哪一种方法所得到的控制器参数,都需要在实际运行中进行最后调整与完善。

Step 1 测试案例

       这里以被控对象的传递函数为1/(s^2+10s+1)为例(随便选的一个),利用离散控制器(更符合实际系统)控制被控对象,检验其对阶跃函数的跟踪性能(研究者均统一使用阶跃函数检验)。目标函数使用ITAE,绝对时间误差乘积,以该误差为目标函数优化出来的超调量和误差较小。

        由于这个被控模型我随便捏造的,不知道选择合适的参数去控制,于是一来我就直接,上代码!!!结果给我整蒙了,超调量虽然很小,响应时间到了4秒,一度让我怀疑哪个步骤不对。冷静下来思考后,觉得应该是,先手动调参,看看结果,确定一个大概的搜索范围。原来就是之前的搜索范围太小了,所以怎么也得不到好结果。

        正如某个伟人说的(不是鲁迅),一天都在做实验,那你什么时候思考呢!(原理本质,永远是第一位的。)

图2 测试模型

       完成10次迭代,结果如下:(可以自己根据需求,运行10次代码,每次迭代50次,取每次运行结果的平均值,一般来说会更好,这部分代码也已写好,因为仅作演示,为了节省时间,注释掉该部分。这里只搜索了PI参数,要D参数也很简单,各位同学可以自己根据需要修改)                   

         

图3 (a)运行历时 (b)适应度曲线

图4 响应曲线

   响应时间和超调量,感官上看着还行,无静差。

   Step2 接入自己的模型

      测试成功后,接下来优化自己的转速、电流双闭环电机模型,下面参数是书上和论文上计算出来的。

   表1 优化电流环前后PI控制参数

Kpq

Kiq

Kpd

Kid

优化前

13.2000

1053.8

5.7750

1053.8

优化后

100

128.6785

21.70046

128.6785

                    

图5电流环PI参数优化

       别看优化的不多,但是这至少是没有恶化动态抗扰性能,电流环转速环,整个模型有5个参数,这里只选择了其中3个进行优化。

      接下来转速环、电流环5个参数同时优化,代码运行10次,取结果均值。历时24424.804355 秒,6.78个小时,睡一觉起来刚刚好。

表2 转速环、电流环优化前后PI参数

Kp

Ki

Kpq

Kiq

Kpd

Kid

优化前

0.14

0.14*50

13.2000

1053.8

5.7750

1053.8

优化后

2

10

47.1089

1026.5246

61.177

1026.5246

图6 转速环、电流环PI参数优化前后转速曲线

图6 转速环、电流环PI参数优化前后转速曲线

        可以看出,优化后的结果,不论是超调量还是动态抗扰性能均大大提升。性能指标响应时间更慢了(非常细微,放大图形才看的出),值得指出的是,优化后的转速曲线进入稳态更慢,0.1~0.3s可以明显看出正在逐渐逼近设定值1000。(上述性能指标这里不量化计算(麻烦),但做产品,做研究,需要科学的评估系统的性能指标,设计与理论相符。)

       生有涯,知无涯。既要不断学习,也要有所取舍,有些东西仅作了解即可,学不完根本学不完(大哭)!

点赞+评论+留邮箱,发step1的模型和源代码(白送)

技术咨询,定制模型(money)

Step3参考资料

    袁雷——现代永磁同步电机控制原理及MATLAB仿真

    https://zhuanlan.zhihu.com/p/265205643

    粒子群优化算法(Particle Swarm Optimization, PSO)的详细解读 - 知乎 (zhihu.com)

  • 86
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 134
    评论
粒子群算法(Particle Swarm Optimization, PSO)是一种常用的优化算法,可以用于整定一阶系统的PID参数。下面是使用MATLAB实现粒子群算法整定一阶系统PID参数的简要步骤: 1. 定义目标函数:首先要定义一个目标函数,即衡量系统输出与期望输出之间误差的函数。对于一阶系统,常用的目标函数可以是最小二乘法的均方根误差(Root Mean Square Error, RMSE)。目标函数的输入为PID参数,输出为系统输出与期望输出之间的误差。 2. 设定参数范围和粒子个数:需要设定每个PID参数的搜索范围,以及粒子群个数。对于PID参数,一般来说,比例增益Kp、积分时间Ti和微分时间Td的取值范围需要根据具体系统进行整。粒子个数一般建议设置为几十到上百个。 3. 初始化粒子群:对于每个粒子,通过随机数生成对应的PID参数。同时,需要设定每个粒子的速度和最佳位置,并用于记录全局最佳位置和对应的误差。 4. 更新粒子速度和位置:根据粒子群算法的原理,需要根据当前位置和速度,以及全局最佳位置和个体最佳位置的差异,来更新粒子的速度和位置。一般来说,速度更新采用线性加权算法,位置更新采用微分方程求解方法。 5. 计算目标函数值:根据新的粒子位置,计算目标函数的值,并与全局最佳位置对应的误差进行比较。如果粒子的位置得到了改进,更新个体最佳位置和全局最佳位置。 6. 终止条件判断:可以设定一个迭代次数的上限,或者设定目标函数的阈值。当达到设定的终止条件后,终止迭代并输出全局最佳位置和对应的PID参数。 7. PID参数:根据全局最佳位置,得到最优的PID参数。可以将这些参数应用到实际的一阶系统中进行测试。 需要注意的是,整定PID参数是一个复杂的过程,需要根据具体的系统特性进行整和优化。上述步骤仅为粒子群算法整定一阶系统PID参数的一种基本思路。实际应用中,可能需要根据具体问题进行一些整和改进。
评论 134
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Michael Faraday

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值