7-PSO_PID--粒子群算法的PID参数整定(微分抗饱和调节)
7-PSO_PID--粒子群算法的PID参数整定(微分抗饱和调节)百度网盘链接:https://pan.baidu.com/s/1LfRMuEDkmz9mKrNP3eZBsw 提取码:8mi4
具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,并提交给我,我来设置视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1
程序如下:
%% 清空环境
clc,clear,close all
warning off
format longG
addpath(genpath('./PID_funtion'))
% addpath(genpath('./test_function'))
%% 参数设置
w = 0.6; % 惯性因子
c1 = 2; % 加速常数
c2 = 2; % 加速常数
Dim = 3; % 维数
sizepop = 50; % 粒子群规模
maxiter= 50; % 最大迭代次数
MinFit = 0.1; % 最小适应值
Vmax = 1;
Vmin = -1;
Ub = ;
Lb = ;
%% 适应度函数
choosed = 2;
if choosed==1
fun = @(x)PID_Fun_1(x);
elseif(choosed==2)
fun = @(x)PID_Fun_2(x);
elseif(choosed==3)
fun = @(x)PID_Fun_3(x);
elseif(choosed==4)
fun = @(x)PID_Fun_4(x);
end
%% 粒子群初始化
Range = ones(sizepop,1)*(Ub-Lb);
pop = rand(sizepop,Dim).*Range + ones(sizepop,1)*Lb; % 初始化粒子群
V = rand(sizepop,Dim)*(Vmax-Vmin) + Vmin; % 初始化速度
fitness = zeros(sizepop,1);
for i=1:sizepop
fitness(i,:) = fun(pop(i,:)); % 粒子群的适应值
end
%% 个体极值和群体极值
=min(fitness);
zbest=pop(bestindex,:); % 全局最佳
gbest=pop; % 个体最佳
fitnessgbest=fitness; % 个体最佳适应值
fitnesszbest=bestf; % 全局最佳适应值
%% 迭代寻优
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 ) && (fitnesszbest > MinFit) )
for j=1:sizepop
% 速度更新
V(j,:) = w*V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
if V(j,:)>Vmax,
V(j,:)=Vmax;
end
if V(j,:)<Vmin,
V(j,:)=Vmin;
end
% 位置更新
pop(j,:)=pop(j,:)+V(j,:);
for k=1:Dim
if pop(j,k)>Ub(k),
pop(j,k)=Ub(k);
end
if pop(j,k)<Lb(k),
pop(j,k)=Lb(k);
end
end
% 适应值
fitness(j,:) =fun(pop(j,:));
% 个体最优更新
if fitness(j) < fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end
% 群体最优更新
if fitness(j) < fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
end
end
iter = iter+1; % 迭代次数更新
y_fitness(1,iter) = fitnesszbest; % 为绘图做准备
K_p(1,iter) = zbest(1);
K_i(1,iter) = zbest(2);
K_d(1,iter) = zbest(3);
end
%% 绘图
disp(['PSO最优解', num2str(zbest)])
disp(['PSO最优解对应的目标值', num2str(fitnesszbest)])
fprintf('\n')
figure(1) % 绘制性能指标ITAE的变化曲线
plot(y_fitness,'LineWidth',3)
title('最优个体适应值','fontsize',10);
xlabel('迭代次数','fontsize',10);ylabel('适应值','fontsize',10);
set(gca,'Fontsize',10);
grid on
figure(2) % 绘制PID控制器参数变化曲线
plot(K_p,'b-','LineWidth',2); hold on
plot(K_i,'k-.','LineWidth',2)
plot(K_d,'r--','LineWidth',2)
title('Kp、Ki、Kd 优化曲线','fontsize',10);
xlabel('迭代次数','fontsize',10); ylabel('参数值','fontsize',10);
set(gca,'Fontsize',10);
legend('Kp','Ki','Kd',1);
grid on;hold off;
% PID响应
if choosed==1
=PID_Fun_1_response(zbest);
elseif(choosed==2)
=PID_Fun_2_response(zbest);
elseif(choosed==3)
=PID_Fun_3_response(zbest);
elseif(choosed==4)
=PID_Fun_4_response(zbest);
end
figure('color',)
plot(rint,'b-','linewidth',2);hold on;
plot(yout,'r.-','linewidth',2);
axis tight;grid on;
hold off;
rmpath(genpath('./PID_funtion'))
% rmpath(genpath('./test_function'))微分抗饱和调节:**** Hidden Message *****
很好哒分享 很好,谢谢
认真学习粒子群算法的PID参数整定 1111111111111111 66666666666666 顶顶顶顶顶顶顶顶顶顶 支持,很好的分享,支持
页:
[1]