📄 ga_paichan.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 + -