• 流年花无言
    了解作者
  • matlab
    开发工具
  • 3KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 7
    下载次数
  • 2020-06-24 09:47
    上传日期
基于粒子群算法函数优化,主要是在PID控制中的应用,解决PID参数整定的问题
Pso-PID.zip
  • Pso-PID
  • pid_pso.m
    1.4KB
  • mian.m
    2.8KB
  • PID.m
    1.8KB
内容介绍
%% 基于PSO算法的PID参数优化 clc clear all close all % 参数设置 w=0.6; c1=2; c2=2; Dim=3; % 维数 SwarmSize=100; % 粒子群规模 MaxIter=100; % 最大迭代次数 MinFit=0.1; % 最小适应度值 Vmax=1; % 粒子速度最大值 Vmin=-1; % 粒子速度最小值 Ub=[50 50 50]; % 变量上限 Lb=[0 0 0]; % 变量下限 % 粒子群初始化 Range=ones(SwarmSize,1)*(Ub-Lb); Swarm=rand(SwarmSize,Dim).*Range+ones(SwarmSize,1)*Lb; % 初始化种群 VStep=rand(SwarmSize,Dim)*(Vmax-Vmin)+Vmin; % 初始化速度 FSwarm=zeros(SwarmSize,1); % 初始化适应度值 for i=1:SwarmSize FSwarm(i,:)=pid_pso(Swarm(i,:)); end % 个体极值和群体极值 [bestf,bestindex]=min(FSwarm); zbest=Swarm(bestindex,:); % 全局最佳 fzbest=bestf; % 全局最佳适应度值 gbest=Swarm; % 个体最佳 fgbest=FSwarm; % 个体最佳适应度值 % 迭代寻优 iter=0; y_fitness=zeros(1,MaxIter); % 预先产生四个空矩阵 K_p=zeros(1,MaxIter); K_i=zeros(1,MaxIter); K_d=zeros(1,MaxIter); while (iter<MaxIter)&&(fzbest>MinFit) for j=1:SwarmSize % 速度更新 VStep(j,:)=w*VStep(j,:)+c1*rand*(gbest(j,:)-Swarm(j,:))+c2*rand*(zbest-Swarm(j,:)); if VStep(j,:)>Vmax VStep(j,:)=Vmax; end if VStep(j,:)<Vmin VStep(j,:)=Vmin; end % 位置更新 Swarm(j,:)=Swarm(j,:)+VStep(j,:); for k=1:Dim if Swarm(j,k)>Ub(k) Swarm(j,k)=Ub(k); end if Swarm(j,k)<Lb(k) Swarm(j,k)=Lb(k); end end % 适应值 FSwarm(j,:)=pid_pso(Swarm(j,:)); % 个体最优更新 if FSwarm(j)<fgbest(j) gbest(j,:)=Swarm(j,:); fgbest(j)=FSwarm(j); end % 群体最优更新 if FSwarm(j)<fzbest zbest=Swarm(j,:); fzbest=FSwarm(j); end end iter=iter+1; y_fitness(1,iter)=fzbest; K_p(1,iter)=zbest(1); K_i(1,iter)=zbest(2); K_d(1,iter)=zbest(3); end %% 绘图 figure(1) plot(y_fitness,'LineWidth',2) title('最优个体适应度值','fontsize',10); xlabel('迭代次数','fontsize',10); ylabel('适应值','fontsize',10); set(gca,'fontsize',10); grid on figure(2) plot(K_p) hold on plot(K_i,'k','lineWidth',3) plot(K_d,'--r') title('Kp、Ki、Kd 优化曲线','fontsize',10); xlabel('迭代次数','fontsize',10); ylabel('参数值','fontsize',10); set(gca,'Fontsize',10); legend('Kp','Ki','Kd',1); grid on
评论
    相关推荐