⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pso_pid.m

📁 用混沌微粒子算法整定PID控制器matlab的代码
💻 M
字号:
% 基于微粒子算法的PID参数整定

for N=1:1
    
max_iterations=40;
no_particles=20;
dimensions=3;
cmax=0.9;
cmin=0.1;
c0=0.9;
c1=2;
c2=2;
Vmax=0.5;
u=4;
KPmax=1;
KPmin=0.7;
KImax=0.5;
KImin=0.2;
KDmax=0.8;
KDmin=0.5;
Xmax=[KPmax,KImax,KDmax];
Xmin=[KPmin,KImin,KDmin];
b=0.2;
global kp ki kd;

%  进行混沌初始化
        
        %particles=rand(no_particles,dimensions)*(Xmax-Xmin);
     
     %particles(1:no_particles,1)=rand(no_particles,1)*(KPmax-KPmin);
      %particles(1:no_particles,2)=rand(no_particles,1)*(KImax-KImin);
       %particles(1:no_particles,3)=rand(no_particles,1)*(KDmax-KDmin);
     
       z=rand(1,3);
      for n=2:no_particles
          z(n,:)=u.*z(n-1,:).*(1-z(n-1,:));
      end
      
      particles(1:no_particles,1)=KPmin+(KPmax-KPmin)*z(1:no_particles,1);
      particles(1:no_particles,2)=KImin+(KImax-KImin)*z(1:no_particles,2);
      particles(1:no_particles,3)=KDmin+(KDmax-KDmin)*z(1:no_particles,3);
       
       
     velocity=rand(no_particles,dimensions);
   %pbest_val(1:no_particles,1)=(particles(1:no_particles,1)-20).^2+particles(1:no_particles,2).^2;

    for i=1:no_particles
        pbest_val(i,1)=itae(particles(i,1),particles(i,2),particles(i,3));  %kp,ki,kd
    end    
    
    pbest_postion=particles;
    [gbest_val,gbest_index]=min(pbest_val);
    gbest_postion=pbest_postion(gbest_index,:);
    
    d=rand(1,dimensions);
%迭代循环
for step=1:max_iterations   
  %c0=cmax-step*(cmax-cmin)/max_iterations;
  c0=cmax-(cmax-cmin)*(1-abs(gbest_val-mean(pbest_val))/max(gbest_val,mean(pbest_val)));
   clc;
    disp('循环次数');
    step
    for i=1:no_particles
            
     pbest_val_new(i,1)=itae(particles(i,1),particles(i,2),particles(i,3));  
      %pbest_val_new(i)=(particles(i,1)-20)^2+particles(i,2)^2;
            if pbest_val_new(i)<pbest_val(i)
                pbest_val(i)=pbest_val_new(i);
                pbest_postion(i,:)=particles(i,:);
            end    
%施加混沌扰动           
            d1=u.*d.*(1-d);
            r=-b+2*b*d1;
            d=d1;
            particles_1(i,:)=particles(i,:)+r;
            temp=itae(particles_1(i,1),particles_1(i,2),particles_1(i,3));
           if temp<pbest_val(i)
             particles(i,:)=particles_1(i,:);
             pbest_postion(i,:)=particles(i,:);
           end   
    end
    
    [gbest_val,gbest_index]=min(pbest_val);
    gbest_postion=pbest_postion(gbest_index,:);
   
    for i=1:no_particles
        for j=1:dimensions
           velocity(i,j)=c0*velocity(i,j)+c1*rand*(pbest_postion(i,j)-particles(i,j))+c2*rand*(gbest_postion(1,j)-particles(i,j));
           
          if velocity(i,j)>Vmax
             velocity(i,j)=Vmax;
         elseif velocity(i,j)<-Vmax
              velocity(i,j)=-Vmax;
          end    
          
            particles(i,j)=particles(i,j)+velocity(i,j);
            
         if particles(i,j)>Xmax(j) | particles(i,j)<Xmin(j) 
              particles(i,j)=rand*gbest_postion(1,j);
          end    
        end       
    end
end

gbest_val
gbest_postion
PID_val(N,1)=gbest_val;
PID_postion(N,:)=gbest_postion;
plot_step(2,PID_postion(N,1),PID_postion(N,2),PID_postion(N,3));
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -