Halcom 发表于 2019-8-7 22:19:53

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 *****





lantian 发表于 2020-3-31 01:01:45

很好哒分享

小土豆 发表于 2020-6-14 19:22:27

很好,谢谢

dukewd 发表于 2020-8-27 15:30:42

认真学习粒子群算法的PID参数整定

wwmwwmwwm 发表于 2021-1-10 13:39:35

1111111111111111

tjs666 发表于 2021-5-15 17:33:56

66666666666666

jiangshanma 发表于 2021-5-16 22:02:55

顶顶顶顶顶顶顶顶顶顶

爱学习的树懒 发表于 2023-4-27 21:06:43

支持,很好的分享,支持
页: [1]
查看完整版本: 7-PSO_PID--粒子群算法的PID参数整定(微分抗饱和调节)