%基于SOA算法的PID参数优化
clc % 清屏
clear all; % 删除workplace变量
close all; % 关掉显示图形窗口
%%参数设置
Umax=0.9500;%最大隶属度值
Umin=0.0111;%最小隶属度值
Wmax=0.9;%权重最大值
Wmin=0.1;%权重最小值
Dim = 3; % 维数
SwarmSize =30; % 粒子群规模
MaxIter = 100; % 最大迭代次数
MinFit = 10; % 最小适应值
Ub = [100 100 100];
Lb = [0 0 0];
%%种群初始化
Range = ones(SwarmSize,1)*(Ub-Lb);
Swarm = rand(SwarmSize,Dim).*Range + ones(SwarmSize,1)*Lb; % 初始化粒子群
fSwarm = zeros(SwarmSize,1);
for i=1:SwarmSize
fSwarm(i,:) = PID_SOA(Swarm(i,:)); % 粒子群的适应值
end
%%个体极值和群体极值
[bestf bestindex]=min(fSwarm);
zbest=Swarm(bestindex,:); % 全局最佳
gbest=Swarm; % 个体最佳
fgbest=fSwarm; % 个体最佳适应值
fzbest=bestf; % 全局最佳适应值
%迭代寻优
Di=0*rand(SwarmSize,Dim);
Buchang=0*rand(SwarmSize,Dim);
C=0*rand(SwarmSize,Dim);
Diego=0*rand(SwarmSize,Dim);
Dialt=0*rand(SwarmSize,Dim);
Dipro=0*rand(SwarmSize,Dim);
iter = 0;
y_fitness = zeros(1,MaxIter); % 预先产生4个空矩阵
K_p = zeros(1,MaxIter);
K_i = zeros(1,MaxIter);
K_d = zeros(1,MaxIter);
while( (iter < MaxIter) && (fzbest > MinFit) )
for i=1:SwarmSize
W=Wmax-iter*(Wmax-Wmin)/MaxIter;
Diego(i,:)=sign(gbest(i,:) -Swarm(i,:));%确定利己方向
Dialt(i,:)=sign(zbest -Swarm(i,:));%确定利他方向
if PID_SOA(gbest(i,:))>=PID_SOA(Swarm(i,:))%确定预动方向
Dipro(i,:)=-Di(i,:);
else
Dipro(i,:)=Di(i,:);
end
Di(i,:)=sign(W* Dipro(i,:)+0.5*Diego(i,:)+0.5*Dialt(i,:));%确定经验梯度方向
[Orderfgbest,Indexfgbest]=sort(fgbest,'descend');
u=Umax-(SwarmSize-Indexfgbest(i))*(Umax-Umin)/(SwarmSize-1);
U=u+(1-u)*rand;
H=(MaxIter-iter)/MaxIter;%迭代过程中权重的变化
C(i,:)=H*abs(zbest-10*rand(1,3));%确定高斯函数的参数
T=sqrt(-log(U));
Buchang(i,:)=C(i,:)*T;%确定搜索不长的大
Buchang(i,find(Buchang(i,:)>3*max(C(i,:))))=3*max(C(i,:));
%更新位置
Swarm(i,:)=Swarm(i,:)+Di(i,:).*Buchang(i,:);
Swarm(i,find(Swarm(i,:)>100))=100;
Swarm(i,find(Swarm(i,:)<0))=0;
% 适应值
fSwarm(i,:) =PID_SOA(Swarm(i,:));
% 个体最优更新
if fSwarm(i) < fgbest(i)
gbest(i,:) = Swarm(i,:);
fgbest(i) = fSwarm(i);
end
% 群体最优更新
if fSwarm(i) < fzbest
zbest = Swarm(i,:);
fzbest = fSwarm(i);
end
end
iter = iter+1; % 迭代次数更新
y_fitness(1,iter) = fzbest; % 为绘图做准备
K_p(1,iter) = zbest(1);
K_i(1,iter) = zbest(2);
K_d(1,iter) = zbest(3);
end
%%绘图
figure(1) % 绘制性能指标ITAE的变化曲线
plot(y_fitness,'LineWidth',4)
title('最优个体适应值','fontsize',10);
xlabel('迭代次数','fontsize',10);ylabel('适应值','fontsize',10);
set(gca,'Fontsize',10);
grid on
figure(2) % 绘制PID控制器参数变化曲线
plot(K_p,'LineWidth',4)
hold on
plot(K_i,'k','LineWidth',4)
plot(K_d,'--r','LineWidth',4)
title('Kp、Ki、Kd 优化曲线','fontsize',10);
xlabel('迭代次数','fontsize',10);ylabel('参数值','fontsize',10);
set(gca,'Fontsize',10);
legend('Kp','Ki','Kd',1);
grid on
没有合适的资源?快使用搜索试试~ 我知道了~
基于Matlab实现人群搜索算法的PID参数整定(源码).rar
共6个文件
m:6个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 69 浏览量
2023-05-20
17:34:18
上传
评论 1
收藏 7KB RAR 举报
温馨提示
1、资源内容:基于Matlab实现人群搜索算法的PID参数整定(源码).rar 2、适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计,作为“参考资料”使用。 3、解压说明:本资源需要电脑端使用WinRAR、7zip等解压工具进行解压,没有解压工具的自行百度下载即可。 4、免责声明:本资源作为“参考资料”而不是“定制需求”不一定能够满足所有人的需求,需要有一定的基础能够看懂代码,能够自行调试代码并解决报错,能够自行添加功能修改代码。由于作者大厂工作较忙,不提供答疑服务,如不存在资源缺失问题概不负责,谢谢理解。
资源推荐
资源详情
资源评论
收起资源包目录
基于Matlab实现人群搜索算法的PID参数整定(源码).rar (6个子文件)
基于Matlab实现人群搜索算法的PID参数整定(源码)
二阶时滞系统
时滞对象
SOA
shuchuquxianSOA.m 1KB
PID_SOA.m 1KB
SOA.m 3KB
基于数控机床进给系统PID参数优化程序
SOA
shuchuquxianSOA.m 984B
PID_SOA.m 1KB
SOA.m 3KB
共 6 条
- 1
资源评论
- 2401_836002742024-05-22非常有用的资源,有一定的参考价值,受益匪浅,值得下载。
- AI@FlyingDog2023-06-23发现一个宝藏资源,赶紧冲冲冲!支持大佬~
Matlab仿真实验室
- 粉丝: 3w+
- 资源: 2404
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 技术资料分享Zigbee协议栈OSAL层API函数(译)非常好的技术资料.zip
- 技术资料分享zigbee无信标网络设备的加入非常好的技术资料.zip
- 技术资料分享ZigBee问答之“KVP”、“MSG”非常好的技术资料.zip
- 技术资料分享ZigBee网络管理实验例程手册非常好的技术资料.zip
- 技术资料分享Zigbee技术规范与协议栈分析非常好的技术资料.zip
- 技术资料分享zigbee各版本规范比较非常好的技术资料.zip
- 技术资料分享ZigBee-Specification-2006非常好的技术资料.zip
- 技术资料分享ZigBee-Specification(2007)非常好的技术资料.zip
- 技术资料分享XC9216非常好的技术资料.zip
- 技术资料分享VESA标准RV1非常好的技术资料.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功