基于遗传算的pid参数优化及matlab实现内容摘要:

PID 控制器 .2020 [7] 侯宏霞 ,王涛杨 ,国清 ,王德意 .影响 PID 算法 PID 参数优化性能的主要因素 . 西北水利发电 . [8] 许春华 ,皮道映 .基于遗传算法的模糊及不对称优化自校正 PID 控制 .杭州 :浙江大学工业控制技术研究所 . 附录 程序清单: 基于实数编码遗传算法的 PID 整定 二阶传递函数 2 400() 50Gs ss  采样时间为 1ms,输入指令为一阶跃信号。 仿真程序: 主程序: %GA(Generic Algorithm) Program to optimize PID Parameters clear all。 close all。 global rin yout timef Size=30。 ClodeL=3。 MinX(1)=zeros(1)。 MaxX(1)=20*ones(1)。 MinX(2)=zeros(1)。 MaxX(2)=*ones(1)。 MinX(3)=zeros(1)。 MaxX(3)=*ones(1)。 Kpid(:,1)= MinX(1)+( MaxX(1)MinX(1))*rand(Size,1)。 Kpid(:,2)= MinX(2)+( MaxX(2)MinX(2))*rand(Size,1)。 Kpid(:,3)= MinX(3)+( MaxX(3)MinX(3))*rand(Size,1)。 G=100。 BsJ=0。 %*******************Start Running************** for kg=1:1:Size time(kg)=kg。 %****************** Step 1:Evaluate BestJ ********* for I=1:1:Size Kpidi=Kpid(i,:)。 [Kpidi, BsJ]=chap5_2f(Kpidi,BsJ)。 BsJi(i)=BsJ。 End [OderJi,IndexJi]=sort(BsJi)。 BestJ(kg)=OderJi(1)。 BJ=BestJ(kg)。 Ji=BsJi+1e10。 %Avoiding deviding zero Fi=1./Ji。 % Cm=max(Ji)。 % fi=CmJi。 [OderJi,IndexJi]=sort(fi)。 %Arranging fi small to bigger Bestfi=Oderfi(Size)。 BestfS=Kpid(Indexfi(size),:)。 %Let BestS=E(m),mis the Indexfi belong to max(fi) Kg BJ Bests %************* step 2: select and Reproduct Operation ***** fi_sum=sum(fi)。 fi_Size=(Oderfi/fi_sum)*Size。 fi_S=floor(fi_Size)。 r=Size_sum(fi_S)。 Rest=fi_Size_fi_S。 [RestValue, Index]=sort(Rest)。 for i=Size:1:Sizer+1 fi_S(Index(i))=fi_S(Index(i))+1。 %Adding rest to equal Size end K=1。 for i=Size:1:1 % Select the Sizeth and Reproduce firstly for j=1:1:fi_S(i) TempE(k.:)=Kpid(Indexfi(i),:)。 % Select and Reproduce k=k+1。 end end %************* Step 3 : Crossover Operation ********* Pc=。 Fro i=1:2:(Size1) temp=rand。 if Pctemp % Crossover Condition alfa=rand。 TempE(i,:)=alfa*Kpid(i+1,:)+(1alfa)*Kpid(i,1)。 TempE(i+1,:)=alfa*Kpid(i,:)+(1alfa)*Kpid(i+1,1)。 end end TempE(Size.:) =BestS。 Kpid=TempE。 %***************** Step 4: Mutation Operation ********** Pm=[1:1:Size]*()/Size。 %Bigger fi, smaller Pm Pm_rand=rand()。 Mean=(MaxX + MinX) /2。 Dif=(MaxXMinX)。 For i=1:1:Size For j=1:1:Codel If Pm(i)Pm_rand(i, j) % Mutation Condition TempE(i, j)=Mean(j)+Dif(j)*()。 end end end %************ Guarantee TempE(Size,:) belong to the best individual TempE(Size,:) =BestS。 Kpid =TempE。 End Bestfi BestS Best_J=BestJ(G) Figure(1)。 Plot(time, BestJ)。 Xlabel(‘times’)。 ylabel (‘Best J’)。 figure(2)。 plot(time , rin , ‘r’ ,timef , yout , ‘b’ )。 xlabel (‘ Time(s) ’)。 ylabel( ‘rin , yout’ )。 子程序: function [Kpidi , BsJ]=pid_gaf(Kpidi , BsJ) global rin yout timef ts=。 sys =tf(400, [1, 50, 0] )。 days=c2d(sys, ts , ‘z’)。 [num , den] =tfdata(days , ‘v’)。 rin=。 u_1=。 u_2=。 y_1=。 y_2=。 x=[0 , 0 , 0]。 B=0。 P=100。 for k=1:1:P time(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_1den(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)。 x(2)=(error(k)error_1)/ts。 x(3)=x(3)+error(k)*ts。 error_2=error_1。 error_1=error(k)。 if s==0 if yout(k)amp。 yout(k) tu=time(k)。 s=1。 end end end for i=1:1:P Ji(i)=*abs(error(i)) +*u(i)^2*。 B=B+Ji(i)。 if i1 erry(i) =yout(i)yout(i1)。 if erry(i)0 B=B+100*abs(erry(i))。 end end end BsJ=B+*tu*10。 基于二进制编码遗传算法的 PID 的整定 主程序: %GA(Generic Algorithm) Program to optimize PID Parameters clear all。 close all。 global rin yout timef G=100。 Size=30。 ClodeL=3。 MinX(1)=zeros(1)。 MaxX(1)=20*ones(1)。 MinX(2)=zeros(1)。 MaxX(2)=*ones(1)。 MinX(3)=zeros(1)。 MaxX(3)=*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^(i1)。 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^(。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。