PSO、GA与simulink模型联合仿真分析(超详细算法解析)

本文探讨如何利用粒子群算法和遗传算法优化Simulink模型中的PID参数,以实现自动调参。通过assignin和sim函数实现MATLAB与Simulink的联合仿真,从而避免手动调参的繁琐。文中详细介绍了两种算法的实现程序及仿真结果,并以ITAE作为性能指标。总结中指出,尽管这种方法可能导致较长的仿真时间,但能有效寻找全局最优解。
摘要由CSDN通过智能技术生成

目录

前言

1.联和仿真函数介绍

1.1 assignin函数

1.2 sim函数

1.3  feval函数

2.使用粒子群算法优化simulink模型中的PID调节参数 

2.1实现程序

2.2仿真结果

3.使用遗传算法优化simulink模型中的PID调节参数 

3.1实现程序

3.2仿真结果

4.总结


前言

上几篇文章我们介绍了用常规遗传算法以及其工具箱、粒子群算法求多目标或者多元函数的最大值或者最小值问题,这篇文章将介绍如何利用优化算法与simulink联合仿真,优化控制中需要调节的参数问题。

由于手动调参会非常麻烦,而且即使调节效果较好也难以找到全局最优解,所以非常有必要去使用优化算法全局寻优的能力进行自动调参,本篇文章以典型的PID调参为例进行介绍。其关键的地方在于:①如果在simulink建模,如何实现优化算法与simulink的联合仿真②选择适当的性能指标,或者说目标函数。

1.联和仿真函数介绍

与simulink联合仿真,常见的操作是在matlab命令行语句控制simulink的仿真和优化算法的迭代,当然也可以用s函数将优化算法编写到simulink模块,本文采样前一种,所以有必要介绍其中重要的两个函数。

1.1 assignin函数

作用:为指定工作区中的变量赋值

格式:assignin(ws,var,val) 将值 val 赋给工作区 ws 中的变量 var。

例如,assignin('base','x',42) 将值 42 赋予 MATLAB® 基础工作区中的变量 x

1.2 sim函数

  • 批量仿真
    当Simulink模型已经固定下来需要调参或者需要批量仿真的时候,循环语句+sim()函数能够轻松实现这个目标,而且还可以使数据自动导出保存。
  • 参数优化
    这其实已经是以函数的方式调用simulink模型了,这样的话,MATLAB一众的优化函数自然就能够用上了
  • 性能提升
    使用函数调用以后,仿真的时间是能够降下去的,主要是因为图形界面的开销没有了
格式:[T,X,Y1,...,Yn] =sim('model',Timespan, Options, UT)

 更详细的介绍可以官方help文档。

参考链接:

[Matlab] Simulink用得多了,不知道sim()函数你又知多少? - 知乎

对 Simulink 模型进行仿真 - MATLAB sim- MathWorks 中国

1.3  feval函数

[y1,...,yN] = feval(fun,x1,...,xM) 使用函数的名称函数句柄以及输入参数 x1,...,xM 来计算函数的结果。

如:

示例: fun = 'cos'

示例: fun = @sin

再例如以下是等价的:

fh = @eig;
[V,D] = fh(A)

[V,D] = feval(@eig,A)

2.使用粒子群算法优化simulink模型中的PID调节参数 

2.1实现程序

这里假设粒子搜索的P、I、D三个维度/变量上下限不一样(虽然设置的一样),它的初始化方法会于单变量函数不同,读者可以细细体会。

对于同一个程序求同一个目标函数的最大值或者最小值有两种方法,一种是将适应度函数取反或者倒数,这样处理后,最优解=群体最佳适应度的相反数或者倒数;第二种是采用相同的适应度函数,但是位置和速度更新上会有变化,详细可以查看我的上篇文章,详细介绍了如何用同一程序稍加改动即可实现求解同一目标函数的最大值和最小值。

上篇文献链接:

粒子群算法PSO求解最大值和最小值案例(超详细注释)_Mr. 邹的博客-CSDN博客

优化性能(ITAE)指标:

注:对于这种性能指标只是最小化即可,实际上很多优化问题还会有约束条件,后面会慢慢学习并与大家分享。

本篇文章的粒子群优化PID参数程序 

目标函数:

function z=PSO_PID(x)
assignin('base','Kp',x(1));
assignin('base','Ki',x(2));
assignin('base','Kd',x(3));
[t_time,x_state,y_out]=sim('PID_Model',[0,10]);
z=y_out(end,1);

2.2仿真结果

以简单的被动对象为传递函数,跟踪单位阶跃曲线,模型如下:

由于是求最小值,而取目标函数为适应度函数,所以适应度是呈下降的趋势;由于这里PID优化参数中i的变化很小,为了展示其优化的过程,所以将PID3个参数的优化值分别拿出来展示。

3.使用遗传算法优化simulink模型中的PID调节参数 

这里直接使用遗传算法库函数GA进行优化,推荐大家去看我下面这篇文章,有关于库函数GA和工具箱的详细使用案例:

遗传算法、遗传算法库函数ga和gamultiobj、遗传算法工具箱GADS实例介绍_Mr. 邹的博客-CSDN博客

3.1仿真结果

4.总结

①对于这样在matlab界面仿真分析,实际上每次优化simulink模型都会运行一次,如果模型稍复杂些,可能运行时间会很长,所以还有其他的方法,后续会进行学习与大家分享。

②对于粒子群算法而言Kp、Ki、Kd三个变量参数其实就是一个粒子的三个维度,或者说三个搜索的最优位置坐标,而适应度值即为最小化的ITAE性能指标

注:由于本人也是在不断地学习期间,所以如果文章中有什么错误,欢迎大家指正批评,谢谢!

BBO算法GA算法PSO算法和GWO算法都是优化算法,它们都是通过不断迭代寻找最优解,但是它们的实现方式和策略是不同的。 1. BBO算法 BBO算法(Biogeography-Based Optimization Algorithm)是一种模拟生物地理学的自然优化算法,它通过对生物地理分布的模拟来实现优化问题的求解。BBO算法的主要思想是通过将每个解看作一个生物种群,将解的属性看作生物的基因,通过迁移和交换基因来实现优化。BBO算法具有较高的收敛速度和较好的全局搜索性能。 2. GA算法 GA算法(Genetic Algorithm)是一种基于生物进化论的优化算法,它通过模拟生物的自然选择、交叉和变异等过程来实现优化。GA算法的主要思想是通过不断的交叉和变异来生成新的解,并通过适应度函数来评估每个解的优劣程度,从而筛选出更优的解。GA算法具有较好的全局搜索性能,但局部搜索能力稍弱。 3. PSO算法 PSO算法(Particle Swarm Optimization)是一种模拟鸟群捕食行为的优化算法,它通过模拟粒子在解空间中的移动来实现优化。每个粒子都有一个位置和速度向量,通过更新粒子的速度和位置来寻找最优解。PSO算法具有较好的全局搜索性能和局部搜索性能。 4. GWO算法 GWO算法(Grey Wolf Optimization)是一种基于灰狼社会行为的优化算法,它通过模拟灰狼的领袖和跟随者之间的协调行为来实现优化。GWO算法中的每个灰狼都有自己的位置和目标函数值,在每次迭代中,领袖狼会更新自己的位置,并通过协调跟随者的位置来寻找最优解。GWO算法具有较好的全局搜索性能和局部搜索性能。 总体来说,BBO算法GA算法PSO算法和GWO算法都有各自的优缺点,选择哪种算法需要根据实际问题的特点来进行综合考虑。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mr. 邹

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

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

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

打赏作者

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

抵扣说明:

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

余额充值