|
基于花授粉算法的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
复制代码
|
|