基于遗传算法的PID参数整定研究(九)

基于遗传算法的PID参数整定研究

下面对二进制编码下遗传算法的PID参数整定代码进行详细讲解,并附上程序。

1.3.3基于遗传算法的PID参数整定代码

采用二进制编码方式,用长度为10位的二进制编码出分别表示三个决策变量kP,ki,kD。
最优指标的选取同十进制编码遗传算法的PID整定。遗传算法中使用的样本个数为Size=30,交叉概率和变异概率分别为:Pc =0.60,Mu =0.001-[1:1:Size]×0.001/Size。参数kP的取值范围为[0,20],ki,kD的取值范围为[0,1],w1,w2,w3,w4的取值同十进制编码遗传算法的PID整定。经过100代进化,获得的优化参数如下:

最优个体为BestS=[000011111100010111000000000000]。PID优化参数为:kP=19.7067,ki =0.2268,kD=0,性能指标J=24.6931,整定过程中代价函数J的变化如图12所示。采用整定后的二进制遗传算法优化PID阶跃响应如图13所示。

主函数 main.m

%GA(Generic Algorithm) Program to optimize Parameters of PID
clear all;
close all;
global rin yout timef

G=100;
Size=30;
CodeL=10;

MinX(1)=zeros(1);
MaxX(1)=20*ones(1);
MinX(2)=zeros(1);
MaxX(2)=1.0*ones(1);
MinX(3)=zeros(1);
MaxX(3)=1.0*ones(1);

E=round(rand(Size,3*CodeL));    %Initial Code!
BsJ=0;                          %指标值

for kg=1:1:G
time(kg)=kg;
    
for s=1:1:Size
m=E(s,:);
y1=0;y2=0;y3=0;

m1=m(1:1:CodeL);
for i=1:1:CodeL
   y1=y1+m1(i)*2^(i-1);
end
Kpid(s,1)=(MaxX(1)-MinX(1))*y1/1023+MinX(1);

m2=m(CodeL+1:1:2*CodeL);
for i=1:1:CodeL
   y2=y2+m2(i)*2^(i-1);
end
Kpid(s,2)=(MaxX(2)-MinX(2))*y2/1023+MinX(2);

m3=m(2*CodeL+1:1:3*CodeL);
for i=1:1:CodeL
   y3=y3+m3(i)*2^(i-1);
end
Kpid(s,3)=(MaxX(3)-MinX(3))*y3/1023+MinX(3);

%****** Step 1 : Evaluate BestJ ******
Kpidi=Kpid(s,:);

[Kpidi,BsJ]=chap5_3f(Kpidi,BsJ);

BsJi(s)=BsJ;  
 
end

[OderJi,IndexJi]=sort(BsJi);
BestJ(kg)=OderJi(1);
BJ=BestJ(kg);
Ji=BsJi+1e-10;

   fi=1./Ji;
%  Cm=max(Ji);
%  fi=Cm-Ji;        %Avoiding deviding zero
   
    [Oderfi,Indexfi]=sort(fi);         %Arranging fi small to bigger
    %   Bestfi=Oderfi(Size);               %Let Bestfi=max(fi)
    %   BestS=Kpid(Indexfi(Size),:);     %Let BestS=E(m), m is the Indexfi belong to max(fi)
    Bestfi=Oderfi(Size);         % Let Bestfi=max(fi)
    BestS=E(Indexfi(Size),:);   % Let BestS=E(m), m is the Indexfi belong to max(fi)
    bfi(kg)=Bestfi;                 %每次中所选取最优的解

kg   
BJ
BestS;

%****** Step 2 : Select and Reproduct Operation******
   fi_sum=sum(fi);
   fi_Size=(Oderfi/fi_sum)*Size; 
   fi_S=floor(fi_Size);        %Selecting Bigger fi value
   kk=1;
   for i=1:1:Size
      for j=1:1:fi_S(i)        %Select and Reproduce 
       TempE(kk,:)=E(Indexfi(i),:);  
         kk=kk+1;              %kk is used to reproduce
      end
   end
   
%************ Step 3 : Crossover Operation ************
pc=0.60;
n=ceil(20*rand);
for i=1:2:(Size-1)
    temp=rand;
    if pc>temp                 %Crossover Condition
    for j=n:1:20
        TempE(i,j)=E(i+1,j);
        TempE(i+1,j)=E(i,j);
    end
    end
end
TempE(Size,:)=BestS;
E=TempE;
   
%************ Step 4: Mutation Operation **************
%pm=0.001;
pm=0.001-[1:1:Size]*(0.001)/Size; %Bigger fi, smaller pm
%pm=0.0;    %No mutation
%pm=0.1;    %Big mutation

   for i=1:1:Size
      for j=1:1:3*CodeL
         temp=rand;
         if pm>temp               %Mutation Condition
            if TempE(i,j)==0
               TempE(i,j)=1;
            else
               TempE(i,j)=0;
            end
        end
      end
   end
%Guarantee TempE(Size,:) belong to the best individual
TempE(Size,:)=BestS;      
E=TempE;
%*******************************************************
 end
 
 Bestfi
 BestS
 Kpidi
 Best_J=BestJ(G)
 figure(1);
 plot(time,BestJ);
 xlabel('Times');ylabel('Best J');
 figure(2);
 plot(timef,rin,'r',timef,yout,'b');
 xlabel('Time(s)');ylabel('rin,yout');

目标函数编写 chap_f.m

function [Kpidi,BsJ]=pid_gaf(Kpidi,BsJ)
global rin yout timef

ts=0.001;
sys=tf(400,[1,50,0]);  
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');

rin=1.0;
u_1=0.0;u_2=0.0;
y_1=0.0;y_2=0.0;
x=[0,0,0]';
B=0;
error_1=0;
tu=1;
s=0;
P=100;

for k=1:1:P
   timef(k)=k*ts;
   r(k)=rin;
   
   u(k)=Kpidi(1)*x(1)+Kpidi(2)*x(2)+Kpidi(3)*x(3); 
   
   if u(k)>=10
      u(k)=10;
   end
   if u(k)<=-10
      u(k)=-10;
   end   
   
   yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
   error(k)=r(k)-yout(k);
%------------ Return of PID parameters -------------
   u_2=u_1;u_1=u(k);
   y_2=y_1;y_1=yout(k);
   
   x(1)=error(k);                % Calculating P
   x(2)=(error(k)-error_1)/ts;   % Calculating D
   x(3)=x(3)+error(k)*ts;        % Calculating I
   error_2=error_1;
   error_1=error(k);
   
if s==0
   if yout(k)>0.95&yout(k)<1.05
      tu=timef(k); % 上升时间
      s=1;
   end 
end
end

for i=1:1:P
   Ji(i)=0.999*abs(error(i))+0.01*u(i)^2*0.1;
   B=B+Ji(i);   
  if i>1   
   erry(i)=yout(i)-yout(i-1);
   if erry(i)<0
      B=B+100*abs(erry(i));
   end    
  end
end
BsJ=B+0.2*tu*10;

程序运行结果:
在这里插入图片描述

在这里插入图片描述
图12代价函数J的变化过程
在这里插入图片描述
图13二进制遗传算法优化PID阶跃响应

  • 3
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: 基于麻雀搜索算法调整PID(比例、积分、微分)参数可以通过以下步骤进行: 第一步,初始化参数: 首先,需要通过调试工具将PID参数初始化为一组适当的值,并记录系统性能指标,如超调量、稳态误差和响应时间。 第二步,创建麻雀搜索算法: 麻雀搜索算法基于仿生学中麻雀的觅食行为,其核心思想是利用种群的群体智慧来搜索最优解。在此算法中,可以用三个维度表示PID参数空间,即比例系数、积分系数和微分系数。 第三步,设置搜索范围: 根据具体的调整需求,可以设置PID参数的搜索范围。比例系数和积分系数一般选择在较小的范围内进行搜索,以保证系统的稳定性。而微分系数的搜索范围则可以稍微宽一些。 第四步,创建初始种群: 根据搜索范围,随机生成一定数量的初始种群。每个个体表示一组PID参数。 第五步,评估和选择: 根据性能指标(如超调量和稳态误差),计算每个个体的适应度。根据适应度函数,选择适应度最好的个体。 第六步,更新个体位置: 通过迭代更新个体的位置,模拟麻雀的觅食过程。可以使用迭代方法,比如指数逼近迭代方法或者遗传/粒子算法的迭代过程。 第七步,重复第五步和第六步: 在每一代中,根据性能指标对个体进行评估和选择,再更新位置,直到达到预设迭代次数或者满足停止准则。 第八步,输出最优PID参数: 在迭代过程结束后,选择适应度最好的个体对应的PID参数作为最优解,并应用于实际系统中。 通过以上步骤,基于麻雀搜索算法可以有效地调整PID参数,使得系统稳定性得到改善,响应时间得到优化。 ### 回答2: 麻雀搜索算法(MSSA)是一种基于自然界中麻雀搜索食物的行为而设计的算法。通过观察麻雀在搜索食物时的行为,我们可以应用这种行为规律来实现参数调整。 PID参数是用于控制系统中的比例、积分和微分三个部分的参数。通过调整PID参数,可以实现控制系统的稳定性和性能优化。 基于麻雀搜索算法整定PID参数的过程如下: 1. 初始化参数:根据实际应用需求,设定合适的PID参数的范围和取值精度。 2. 创建一群麻雀:随机生成一组初始的PID参数,并计算其对应的性能指标,例如系统的稳定性和误差值。 3. 模拟麻雀搜索:根据麻雀搜索食物的规律,更新当前群体中每只麻雀的位置和速度。根据更新后的参数,计算其对应的性能指标。 4. 更新最优解:将性能最好的麻雀作为当前群体的最优解。 5. 反复迭代:反复进行第3和第4步,直到满足终止条件(例如达到最大迭代次数或性能指标足够优化)。 6. 输出最优解:返回最优解对应的PID参数,作为优化后的参数。 通过基于麻雀搜索算法整定PID参数,可以自动优化参数选择的过程,提高系统的控制性能和稳定性。同时,该算法也具有较强的全局搜索能力和自适应性,使得调整过程更加灵活和高效。 ### 回答3: 麻雀搜索算法是一种基于自然界麻雀群体的行为规律推导出的优化算法。它模拟了麻雀觅食时的行为,通过麻雀的集群智能和搜索能力,寻找最优解。在实际应用中,麻雀搜索算法可以用于优化问题的解决,也可以应用于PID参数整定PID调节器是一种广泛应用于控制系统的控制器,通过调节比例、积分和微分三个参数,可以对系统的过程进行控制。在整定PID参数时,需要找到最佳的参数组合,使得系统的性能最优。 首先,使用麻雀搜索算法整定PID参数的步骤是: 1. 初始化麻雀群体:设置麻雀的初始位置和速度,并记录适应度函数。 2. 麻雀位置更新:根据速度和位置的变化规律,更新麻雀的位置。 3. 适应度计算:根据位置更新后的麻雀群体,计算适应度函数的值。 4. 选择操作:根据适应度函数的值,选择合适的麻雀作为当前群体。 5. 停止条件判断:判断是否满足停止条件,如果满足,则输出最优的参数组合,否则继续执行步骤2-4。 通过以上步骤,可以不断地更新麻雀群体的位置和速度,根据适应度函数的值选择合适的麻雀,最终得到最优的PID参数组合。 在整定PID参数时,适应度函数可以根据实际控制系统的性能指标设计,例如系统的稳定性、响应速度、超调量等。根据实际情况选择合适的适应度函数,可以更好地评估麻雀搜索算法整定出的PID参数组合。 综上所述,基于麻雀搜索算法整定PID参数的主要步骤是初始化麻雀群体、麻雀位置更新、适应度计算、选择操作和停止条件判断。通过不断迭代更新麻雀群体的位置和速度,并根据适应度函数选择合适的麻雀,最终可以得到最优的PID参数组合,实现对系统的优化控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昔时扬尘处

你的鼓励会让技术更加具有价值!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值