0
点赞
收藏
分享

微信扫一扫

【PID优化】基于matlab麻雀搜索算法PID优化设计【含Matlab源码 1785期】

雨鸣静声 2022-03-15 阅读 37

一、获取代码方式

获取代码方式1:
完整代码已上传我的资源: 【PID优化】基于matlab麻雀搜索算法PID优化设计【含Matlab源码 1785期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、麻雀搜索算法简介

1 SSA的基本原理
SSA算法是一种模拟麻雀觅食行为和反捕食行为的新型群体智能优化算法,其基本原理如下:
在SSA中,每只麻雀位置对应其中的一个解。麻雀在觅食过程中有3种行为:①作为发现者寻找食物;②作为加入者跟随发现者觅食;③作为警戒者决定种群是否继续觅食。其中,发现者和加入者两者的身份是动态变化的,可相互转换,但两者比例保持恒定。发现者作为种群觅食的引导者,拥有更高的适应度值,可以获得更加广阔的搜索区域。而加入者为获取更高的适应度值跟随发现者进行觅食,同时一些加入者可能会不断地监控发现者并夺取食物资源来提高自身的捕食率。种群会随机选取一部分麻雀作为警戒者进行监视和预警,这些麻雀大概占整个种群的10%~20%,当种群边缘的麻雀在觅食过程中察觉到危险时,会迅速提醒整个种群做出反捕食行为。

三、部分源代码

%_________________________________________________________________________%
% 基于麻雀搜索算法PID参数优化             %
%_________________________________________________________________________%

% 使用方法
%__________________________________________
% fobj = @YourCostFunction        设定适应度函数
% dim = number of your variables   设定维度
% Max_iteration = maximum number of generations 设定最大迭代次数
% SearchAgents_no = number of search agents   种群数量
% lb=[lb1,lb2,...,lbn] where lbn is the lower bound of variable n  变量下边界
% ub=[ub1,ub2,...,ubn] where ubn is the upper bound of variable n   变量上边界
% If all the variables have equal lower bound you can just
% define lb and ub as two single number numbers

% To run SSA: [Best_pos,Best_score,curve]=SSA(pop,Max_iter,lb,ub,dim,fobj)
%__________________________________________

clear all 
clc
rng('default')
SearchAgents_no=50; % Number of search agents 种群数量
Max_iteration=100; % Maximum numbef of iterations 设定最大迭代次数
lb = -5; %下边界
ub = 5;  %上边界
dim = 3; %维度pid3个参数
S = 1;% 1为单位阶跃响应,其他为正弦输入
fobj = @(X) PID_controller(X,S);%适应度函数
[Best_pos,Best_score,SSA_curve]=SSA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj); %开始优化
figure
plot(SSA_curve,'Color','r','linewidth',2)
hold on
title('单位阶跃响应收敛曲线')
xlabel('迭代次数');
ylabel('最优适应度值');

axis tight
grid on
box on
legend('SSA')
[Bsu,rin,yout,error]=PID_controller(Best_pos,1);
figure('color',[1,1,1]),
plot(rin,'r--','Linewidth',2);
hold on;
plot(yout,'b-','Linewidth',2)
legend('rin','SSA-PID')
xlabel('时间');ylabel('PID控制输出量');
grid on;
title('单位阶跃响应')
disp(['PID值为:',num2str(Best_pos)]);

四、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

举报

相关推荐

0 条评论