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

📄 ga_paichan.m

📁 按照能耗最优原则对机器生产时间用遗传算法解决
💻 M
字号:

clear all;
close all;
clc;

Size=30;
CodeL=9;
w1=230;%单产能耗
w2=240;
w3=235;
w4=245;
w5=234;
w6=254;
w7=223;
w8=246;
w9=256;
w10=266;
w=[w1,w2,w3,w4,w5,w6,w7,w8,w9,w10];
ww=min(w);

N=30000;   %生产任务
tt=N/CodeL*ww;

P1=1200;%单产能力
P2=1400;
P3=1600;
P4=1450;
P5=1360;
P6=1220;
P7=1120;
P8=1280;
P9=1560;
P10=1470;


MinX(1)=zeros(1);
MaxX(1)=tt*ones(1);
MinX(2)=zeros(1);
MaxX(2)=tt*ones(1);
MinX(3)=zeros(1);
MaxX(3)=tt*ones(1);
MinX(4)=zeros(1);
MaxX(4)=tt*ones(1);
MinX(5)=zeros(1);
MaxX(5)=tt*ones(1);
MinX(6)=zeros(1);
MaxX(6)=tt*ones(1);
MinX(7)=zeros(1);
MaxX(7)=tt*ones(1);
MinX(8)=zeros(1);
MaxX(8)=tt*ones(1);
MinX(9)=zeros(1);
MaxX(9)=tt*ones(1);
% MinX(10)=zeros(1);
% MaxX(10)=tt*ones(1);

lemda(:,1)=MinX(1)+(MaxX(1)-MinX(1))*rand(Size,1);
lemda(:,2)=MinX(2)+(MaxX(2)-MinX(2))*rand(Size,1);
lemda(:,3)=MinX(3)+(MaxX(3)-MinX(3))*rand(Size,1);
lemda(:,4)=MinX(4)+(MaxX(4)-MinX(4))*rand(Size,1);
lemda(:,5)=MinX(5)+(MaxX(5)-MinX(5))*rand(Size,1);
lemda(:,6)=MinX(6)+(MaxX(6)-MinX(6))*rand(Size,1);
lemda(:,7)=MinX(7)+(MaxX(7)-MinX(7))*rand(Size,1);
lemda(:,8)=MinX(8)+(MaxX(8)-MinX(8))*rand(Size,1);
lemda(:,9)=MinX(9)+(MaxX(9)-MinX(9))*rand(Size,1);
%lemda(:,10)=MinX(10)+(MaxX(10)-MinX(10))*rand(Size,1);


lemda ;    


G=200;
BsJ=0;
%*************** Start Running ***************
for kg=1:1:G
    time(kg)=kg;

%****** Step 1 : Evaluate BestJ ******
for i=1:1:Size
    lemdai=lemda(i,:);   
%***********main program**************
nn=N-(P1*lemdai(1)+P2*lemdai(2)+P3*lemdai(3)+P4*lemdai(4)+P5*lemdai(5)+P6*lemdai(6)+P7*lemdai(7)+P8*lemdai(8)+P9*lemdai(9));
t_n=nn/P10;
while t_n>tt
lemdai=MinX(1)+(MaxX(1)-MinX(1))*rand(1,CodeL);
end
Ji=w1*lemdai(1)+w2*lemdai(2)+w3*lemdai(3)+w4*lemdai(4)+w5*lemdai(5)+w6*lemdai(6)+w7*lemdai(7)+w8*lemdai(8)+w9*lemdai(9)+w10*nn/P10;
 
BsJ=Ji; 
BsJi(i)=BsJ; 
lemda(i,:)=lemdai;  

% Mlemda0=[lemdai(1) 0;0 lemdai(2)];                    
% Mlemda1=[lemdai(3) lemdai(4) 0 0;0 0 lemdai(5) lemdai(6)];       
% P0=H22-H21*inv(Mlemda0*H11+Mlemda1*H21)*(Mlemda0*H12+Mlemda1*H22);
% A=[zeros(4,4) eye(4);-P0*K -P0*E2];
% R=eig([zeros(4,4) eye(4);-P0*K -P0*E2]);
% JJi=max(real(R));
% while JJi>=0
%     lemdai=MinX(1)+(MaxX(1)-MinX(1))*rand(1,6);
%     Mlemda0=[lemdai(1) 0;0 lemdai(2)];                    
% Mlemda1=[lemdai(3) lemdai(4) 0 0;0 0 lemdai(5) lemdai(6)];       
% P0=H22-H21*inv(Mlemda0*H11+Mlemda1*H21)*(Mlemda0*H12+Mlemda1*H22);
% A=[zeros(4,4) eye(4);-P0*K -P0*E2];
% R=eig([zeros(4,4) eye(4);-P0*K -P0*E2]);
% JJi=max(real(R));
% end
% JJJ(i)=JJi;
%lemda(i,:)=lemdai;   




%  figure(2)
%  plot(i,Ji,'o');
%      hold on
end
   
 BsJ;
 BsJi;                     

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

   fi=1./Ji;     

   [Oderfi,Indexfi]=sort(fi);    
   Bestfi=Oderfi(Size);          
   BestS=lemda(Indexfi(Size),:);  
   
   kg   
   BJ
   Indexfi;
   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:Size-r+1
      fi_S(Index(i))=fi_S(Index(i))+1;     
   end

   k=1;
   for i=Size:-1:1         
      for j=1:1:fi_S(i)  
       TempE(k,:)=lemda(Indexfi(i),:);       
         k=k+1;                            
      end
   end
   
%************ Step 3 : Crossover Operation ************
    %Pc=0.90;
    k1=1;
    k3=1;
    k2=0.5;
    k4=0.5;
    
    for i=1:2:(Size-1)
        fday=fi(i);
        if fday>=fi_sum/30,            
        Pc=k1*(Bestfi-fday)/(Bestfi-fi_sum/30);
        else Pc=k2;
        end
          temp=rand;
      if Pc>temp                      
          alfa=rand;
          TempE(i,:)=alfa*lemda(i+1,:)+(1-alfa)*lemda(i,:);  
          TempE(i+1,:)=alfa*lemda(i,:)+(1-alfa)*lemda(i+1,:);
      end
    end
    TempE(Size,:)=BestS;
    lemda=TempE;
    
%************ Step 4: Mutation Operation **************

Pm_rand=rand(Size,CodeL);
Mean=(MaxX + MinX)/2; 
Dif=(MaxX-MinX);

   for i=1:1:Size
      Pmm=0.05*Pc;
        Pm(i)=Pmm;
      for j=1:1:CodeL
         if Pm(i)>Pm_rand(i,j)        
            TempE(i,j)=Mean(j)+Dif(j)*(rand-0.5);
         end
      end
   end
%Guarantee TempE(Size,:) belong to the best individual
   TempE(Size,:)=BestS;   
  %%% 
%   figure(1)
%    x1=BestS(1,1);
%   x2=BestS(1,2);
%   x3=BestS(1,3);
%   x4=BestS(1,4);
%   x5=BestS(1,5);
%   x6=BestS(1,6);
%   figure(1);
%      plot(kg,x1,'*',kg,x2,'-',kg,x3,'o',kg,x4,'x',kg,x5,'+',kg,x6,'-.');
%       hold on   
      %%%%%
   lemda=TempE;
   
end

Bestfi;
BestS;
Best_J=BestJ(G)
figure(2);
plot(time,BestJ);
xlabel('Time(s)');ylabel('Best J');
% figure(3);
% plot(time,JA);
% xlabel('Time(s)');ylabel('min(real(eig(A)))');

⌨️ 快捷键说明

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