今天的主题是:三种智能算法优化常见传递函数的PID参数,采用MATLAB APP Designer 开发。提供代码源程序,可以自行修改源代码(不是封装软件)
这个软件基本涵盖了所有的传递函数类型,传递函数的参数简单易改。采用了三种不同的算法优化PID参数,包括灰狼,粒子群,麻雀算法,且做了简单的对比。结果也采用表格的方式,一目了然。
画面风格如下:
软件一共分为三部分,接下来对每部分展开细讲:
第一部分: 被控对象模型参数设置
这一部分有一个选项切换卡,点击这个选项切换卡可以切换传递函数,传递函数都是最常见的,基本上包含了所有传递函数的类型。
选择好相应的传递函数后,大家就可以自行修改每一个传递函数对应的参数了。剩余四个传递函数的界面如下:
除此之外,在点击开始运行之前,最好要先手动设置一个P,I,D参数,也就是这里的Kp,Ti,Kd,设置好之后,点击运行按钮,即可开始采用三种优化算法对P,I,D参数进行优化。
点击重置按钮,会将已经设置的参数全部归零。
第二部分: SSA-PSO-GWO优化PID参数---------单位阶跃响应
这一部分是三种算法的优化结果展示。分别为麻雀算法,粒子群算法,灰狼算法,最后一幅图是三个曲线图的综合图。
这里加了一个Running指示灯,当点击运行时,指示灯会变成绿色,当运行结束后,指示灯会变为灰色。
这里说一下三种智能算法采用的目标函数:选择常用的ITAE指标和控制量动作的加权。这么做的目的可避免控制量动作过大,造成控制器损坏。目标函数也很方便修改。
第三部分: 三个算法优化后,阶跃响应曲线的参数表
参数表采用表格的方式呈现,一目了然。参数包括:P,I,D参数,超调量,峰值时间,上升时间,调节时间。
代码:
%Ⅰ型
%if flag~=2 && flag~=3 && flag~=3 && flag~=4 && flag~=5
if flag==1
K=app.KEditField.Value;
assignin("base",'K',K)
T=app.TEditField.Value;
assignin("base",'T',T)
n=app.nEditField.Value;
assignin("base",'n',n)
PI_1
end
%Ⅱ型
if flag==2
K=app.KEditField_2.Value;
assignin("base",'K',K)
Tz=[app.T1EditField.Value app.T2EditField.Value app.T3EditField.Value app.T4EditField.Value app.T5EditField.Value];
assignin("base",'Tz',Tz)
n=app.nEditField_2.Value;
assignin("base",'n',n)
PI_2
end
%Ⅲ型
if flag==3
K=app.KEditField_3.Value;
assignin("base",'K',K)
T=app.TEditField_2.Value;
assignin("base",'T',T)
n=app.nEditField_3.Value;
assignin("base",'n',n)
tt=app.mEditField_2.Value;
assignin("base",'tt',tt)
PI_3
end
%Ⅳ型
if flag==4
K1=app.K1EditField.Value;
assignin("base",'K1',K1)
T1=app.T1EditField_2.Value;
assignin("base",'T1',T1)
n1=app.n1EditField.Value;
assignin("base",'n1',n1)
tt1=app.m1EditField.Value;
assignin("base",'tt1',tt1)
K2=app.K2EditField.Value;
assignin("base",'K2',K2)
T2=app.T2EditField_2.Value;
assignin("base",'T2',T2)
n2=app.n2EditField.Value;
assignin("base",'n2',n2)
tt2=app.m2EditField.Value;
assignin("base",'tt2',tt2)
PI_4
end
%V型
if flag==5
K=app.KEditField_4.Value;
assignin("base",'K',K)
T=app.TEditField_3.Value;
assignin("base",'T',T)
n=app.nEditField_4.Value;
assignin("base",'n',n)
tt=app.mEditField.Value;
assignin("base",'tt',tt)
PI_5
end
获取完整代码方式:后台回复关键词获取。
关键词:PIDAPP