资源简介

用天牛须算法优化PID参数,压缩包里有两文件,一个是Simulink画的PID,一个是天牛须算法,这里对天牛须进行了一点改进,用的是群体天牛须.里面传函我设置的比较简单,可以用复杂的传函跑一跑

资源截图

代码片段和文件信息


clear all
close all
clc

Dim = 3;            % 维数
SwarmSize = 10;    % 群规模
MaxIter =100;      % 最大迭代次数
MinFit = 0.1;       % 最小适应值
d=4;
step=15;

Ub = [200 200 200 ];
Lb = [-100 -100 -100];

%% 初始化
for i=1:SwarmSize
    pop(i:)=Ub.*rand(1Dim);
 m(i)= BAS_PID(pop(i:));


%     m(i)= BAS_PID(pop(i:));
end
% %% 个体极值和群体极值
[bestfbestindex]=min(m);
zbest=pop(bestindex:);   % 最佳
fzbest=bestf;               % 全局最佳适应值
iter = 0;
y_fitness = zeros(1MaxIter);   % 预先产生4个空矩阵
K_p1 = zeros(1MaxIter);
K_i1 = zeros(1MaxIter);
K_d1 = zeros(1MaxIter);


% K_p2 = zeros(1MaxIter);
% K_i2 = zeros(1MaxIter);
% K_d2 = zeros(1MaxIter);
for t=1:MaxIter
    t
    for i=1:SwarmSize
        dir=rand(1Dim);
        b=dir./(norm(dir));
        xl(i:)=pop(i:)-d.*b;
        fl(i)= BAS_PID(xl(i:));
        xr(i:)=pop(i:)+d.*b;
        fr(i)= BAS_PID(xr(i:));
        pop(i:)=pop(i:)-step.*b.*sign(fr(i)-fl(i));
        
%         for k=1:Dim
%             if pop(ik)>Ub(k) pop(ik)=Ub(k); end
%             if pop(ik)%         end
        mm(i)= BAS_PID(pop(i:));      
    end
    [aaabbb]=sort(mm);
    zmm=aaa(1);
    ccc=bbb(1);
    bestxx=pop(ccc:);
    step=step*0.98 +0.1;
    d=0.99*d+0.01;
    if  zmm<= fzbest
        fzbest=zmm;
        zbest=bestxx;
    end
    fzbest
    iter = iter+1;                      % 迭代次数更新
    y_fitness(1iter) = fzbest;         % 为绘图做准备
    K_p1(1iter) = bestxx(1);
    K_i1(1iter) = bestxx(2);
    K_d1(1iter) = bestxx(3);  
end
%% 绘图输出%%
figure(1)
hold on
plot(y_fitness‘k-‘‘LineWidth‘1.5)
title(‘The ITAE ‘‘fontsize‘14);
xlabel(‘iterations ‘‘fontsize‘14);
ylabel(‘ITAE‘‘fontsize‘14);
set(gca‘Fontsize‘14);

figure(2)% 绘制PID控制器参数变化曲线
hold on
title(‘Kp1 Ki1 Kd2 variation curve‘‘fontsize‘14);

plot(K_p1‘r‘‘LineWidth‘1.5)
plot(K_d1‘b‘‘LineWidth‘1.5)
plot(K_i1‘k‘‘LineWidth‘1.5)

xlabel(‘iterations‘‘fontsize‘18);
ylabel(‘value‘‘fontsize‘18);
legend(‘Kp1‘‘Ki1‘‘Kd1‘);


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2140  2020-06-24 10:13  BAS-PID\BAS.m

     文件        174  2019-12-01 13:39  BAS-PID\BAS_PID.m

     文件      45797  2020-05-12 16:27  BAS-PID\PID_Model.mdl

     文件       4592  2020-06-24 10:17  BAS-PID\PID_Model.slxc

     文件        392  2020-06-24 10:17  BAS-PID\slprj\sim\varcache\PID_Model\checksumOfCache.mat

     文件        312  2020-06-24 10:17  BAS-PID\slprj\sim\varcache\PID_Model\tmwinternal\simulink_cache.xml

     文件       1352  2020-06-24 10:17  BAS-PID\slprj\sim\varcache\PID_Model\varInfo.mat

     目录          0  2020-06-24 10:17  BAS-PID\slprj\sim\varcache\PID_Model\tmwinternal

     目录          0  2020-06-24 10:17  BAS-PID\slprj\sim\varcache\PID_Model

     目录          0  2020-06-24 10:17  BAS-PID\slprj\sim\varcache

     目录          0  2020-06-24 10:17  BAS-PID\slprj\sim

     目录          0  2020-06-24 10:17  BAS-PID\slprj

     目录          0  2020-06-24 10:17  BAS-PID

----------- ---------  ---------- -----  ----

                54759                    13


评论

共有 条评论