| 
 | 
 
基于花授粉算法的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 = [0,0,0];  popmax = [1,100,1]; % 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
 
 - % 记录一组最优值
 
 - [bestfitness,bestindex]=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',[1,1,1])
 
 - plot(fitness_iter,'ro-','linewidth',2)
 
 - % loglog(fitness_iter,'ro-','linewidth',2)
 
 - axis tight
 
 - grid on
 
  
- save zbest.mat zbest
 
  
  复制代码 
 
 |   
 
 
 
 |