Halcom 发表于 2018-3-24 18:18:51

基于花授粉算法的PID参数整定

基于花授粉算法的PID参数整定
百度网盘链接:https://pan.baidu.com/s/1A0KDqbQLDpskYdUi3y2kgw 密码:htpk
具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,并提交给我,我来设置视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1

clc,clear,close all;
warning off;
format longG;
% 花授粉算法FPA
maxgen = 200;   % 迭代次数
sizepop = 20;   % 种群数量
nvar = 3;       % 3个未知量,kp, ki, kd
popmin = ;popmax = ; % x
% popmin = 0.*ones(1,nvar);popmax = 10.*ones(1,nvar); % x
beta = 1.5;   % beta控制常数
pFPA = 0.6;   % 0.6-1.0之间
% 初始化种群
for i=1:sizepop
    pop(i,:) = popmin + (popmax-popmin).*rand(1, nvar);
    fitness(i) = PID_FPA(pop(i,:));
end
% 记录一组最优值
=min(fitness);
zbest=pop(bestindex,:);   % 全局最佳
gbest=pop;                % 个体最佳
fitnessgbest=fitness;   % 个体最佳适应度值
fitnesszbest=bestfitness; % 全局最佳适应度值

% 迭代寻优
for iter=1:maxgen
    disp(['当前的迭代次数: ', num2str(iter)])
    for j=1:sizepop
      
      % 种群的更新
      pop(j,:) = pFPA*( pop(j,:)+rand*(gbest(j,:)-pop(j,:)) )+...
            (1-pFPA)*( pop(j,:)+ Levy(beta,nvar).*(zbest - pop(j,:)) );
      
      % x
      for kk=1:nvar
            if pop(j,kk)>popmax(kk)
                pop(j,kk)=popmax(kk);
            end
            if pop(j,kk)<popmin(kk)
                pop(j,kk)=popmin(kk);
            end
      end
      
      % 适应度更新
      fitness(j) = PID_FPA( pop(j,:) );
      
      % 比较个体间比较
      if fitness(j)<fitnessgbest(j)
            fitnessgbest(j) = fitness(j);
            gbest(j,:) = pop(j,:);
      end
      if fitness(j)<bestfitness
            bestfitness = fitness(j);
            zbest =pop(j,:);
      end
    end
    fitness_iter(iter) = bestfitness;
end

disp('最优解')
disp(zbest)
fprintf('\n')

figure('color',)
plot(fitness_iter,'ro-','linewidth',2)
% loglog(fitness_iter,'ro-','linewidth',2)
axis tight
grid on

save zbest.mat zbest



Halcom 发表于 2019-8-6 22:23:16

4个对应的整定传递函数:
>> ts=0.001;
sys=tf(,)

sys =

    1
-----
s + 1

Continuous-time transfer function.

>> sys=tf(,,'ioDelay',0.2)

sys =

                  1
exp(-0.2*s) * -----
                s + 1

Continuous-time transfer function.

>> sys=tf(,)

sys =

          1.6
-------------------
s^2 + 2.584 s + 1.6

Continuous-time transfer function.

>> sys=tf(,,'ioDelay',0.1)

sys =

                        1.6
exp(-0.1*s) * -------------------
                s^2 + 2.584 s + 1.6

Continuous-time transfer function.

是不是冷得很 发表于 2019-12-26 14:38:42

学习学习,楼主辛苦了
页: [1]
查看完整版本: 基于花授粉算法的PID参数整定