天天看點

基于遺傳算法的PID參數整定研究(十)——GA算法聯合Simulink仿真下的參數整定

基于遺傳算法的PID參數整定研究

基于遺傳算法的PID參數整定研究(七-九)是基于精确的傳遞函數進行優化,其本質是将優化對象簡化為一階或者二階的傳遞函數,在.m程式上進行編寫其零極點模型,進而應用遺傳算法對其進行參數整定。

然而,實際情況是大多數的被控對象往往其傳遞函數難以獲得,無法運用經典控制理論進行合理化的模型建立。比如針對含有SVPWM的雙閉環矢量控制系統,含離散元器件的系統,以及非線性的單元等等。是以,有必要建立一種直接聯合Simulink仿真模型的線上參數整定。

1.3.4遺傳算法聯合Simulink仿真下的參數整定

當被控對象為雙閉環矢量PI控制系統,采取實數編碼優化的三個決策變量分别為kP,ki,Ba,使用的樣本個數為5,交叉機率和變異機率分别為:Pc=0.9,Mu=0.033。設定優化區間分别為:參數kP的取值範圍為[0,1],ki的取值範圍為[0,7],Ba的取值範圍為[0,0.02]。經過5代進化,獲得的優化參數如下:

kP=0.1317,ki=1.4187,Ba=0.0035,性能名額J=0.0342,整定過程中代價函數J的變化如圖15所示。優化後空載工況下的轉速響應波形如圖16所示。

基于遺傳算法的PID參數整定研究(十)——GA算法聯合Simulink仿真下的參數整定

圖14 永磁同步電機的雙閉環矢量PI控制系統

主函數 main.m

clc,
clear all; %#ok<CLALL>
tic %計時開始
global w1 w2 yout ycrtl simout1 
%% 電機參數設定
Ts = 1e-5;
Pn = 4;
flux = 0.1827;
R = 0.9585;
Ld = 0.00525;
Lq = 0.00525;
J = 0.0006329;    %0.221515
B = 0.0003035;
Kt = 1.5*Pn*flux;

%% 遺傳算法優化參數
Size=5;  % 種群大小30個 可行解
G=5;    % 種群運作100次
CodeL=3;  % 三個實數編碼 三個決策變量
rin = 1000.0000; %控制輸入
B=0;
% rand('state',sum(clock));
MinX(1)=zeros(1);
MaxX(1)=1*ones(1);

MinX(2)=0*ones(1);
MaxX(2)=7*ones(1);

MinX(3)=0*ones(1);
MaxX(3)=0.02*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);
BsJ=0;

%*************** Start Running ***************
for kg=1:1:G
    time(kg)=kg;
%****** Step 1 : Evaluate BestJ ******
for i=1:1:Size
    Kpidi=Kpid(i,:);               %單個可行解
    Kp = Kpidi(1);                 %回報d-q軸電流
    Ki = Kpidi(2);
    Ba = Kpidi(3); 
    clc,
    simout1 = sim('PMSM_PI_decomposition');       % 時間輸出
    clc,
%目标函數
    P = length(simout1);
    yout  = w1;         %轉速回報值
    ycrtl = w2;         %轉速控制輸入
    error = yout-rin;   %轉速偏差
    A = roundn(yout,-4); %一維數組
    num = round(P*0.618);
    ymax = max(A); %最大值
    Value =roundn(mean(yout(num:P-1,1)),-4);%一個數值
    %% 上升時間
    [row1 col1]=find(ymax==A);
    tu1=simout1(row1);
    %% 調節時間,允許的誤差範圍内
%     [row2 col2]=find(rin==A);
%     tu2=simout1(row2);
    %% 誤差調節
%     B=0.001*sum(abs(error(num)));
    
%     for i=1:1:P
%      if i>1   
%        erry(i)=w1(i)-w1(i-1);
%            if erry(i)<0
%               B=B+100*(abs(erry(i)));
%            end    
%       end   
%     end   
    BsJ=B+(tu1)*10;  
%     [Kpidi,BsJ]=chap_f1(Kpidi,BsJ);
    BsJi(i)=BsJ;  %%BsJi優化參數的數值矩陣
end
 
    [OderJi,IndexJi]=sort(BsJi);
    BestJ(kg)=OderJi(1);
    BJ=BestJ(kg);
    Ji=BsJi+1e-10;    %Avoiding deviding zero

   fi=1./Ji;
%  Cm=max(Ji);
%  fi=Cm-Ji;                     
   
   [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)
   
   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
   r=Size-sum(fi_S);
   
   Rest=fi_Size-fi_S;
   [RestValue,Index]=sort(Rest);
   
   for i=Size:-1:Size-r+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;                            % k is used to reproduce
      end
   end
   
%************ Step 3 : Crossover Operation ************
    Pc=0.90;
    for i=1:2:(Size-1)
          temp=rand;
      if Pc>temp                      %Crossover Condition
          alfa=rand;
          TempE(i,:)=alfa*Kpid(i+1,:)+(1-alfa)*Kpid(i,:);  
          TempE(i+1,:)=alfa*Kpid(i,:)+(1-alfa)*Kpid(i+1,:);
      end
    end
    TempE(Size,:)=BestS;
    Kpid=TempE;
    
%************ Step 4: Mutation Operation **************
Pm=0.10-[1:1:Size]*(0.01)/Size;       %Bigger fi,smaller Pm
Pm_rand=rand(Size,CodeL);
Mean=(MaxX + MinX)/2; 
Dif=(MaxX-MinX);

   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)*(rand-0.5);
         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(timef,rin,'r',timef,yout,'b');
% xlabel('Time(s)');ylabel('rin,yout');
toc %計時結束
           
基于遺傳算法的PID參數整定研究(十)——GA算法聯合Simulink仿真下的參數整定

圖15 優化前空載工況下的轉速響應波形

基于遺傳算法的PID參數整定研究(十)——GA算法聯合Simulink仿真下的參數整定

圖16 優化後空載工況下的轉速響應波形

基于遺傳算法的PID參數整定研究(十)——GA算法聯合Simulink仿真下的參數整定

圖17 代價函數J的變化過程

由圖15和圖16可知,優化後的性能對比,超調明顯減小,但是穩态性能卻變差了,是以對于處于沖突性質的性能名額無法做到二者兼得。是以,可以運用多目标優化算法對其進行改進并進行線上參數整定。