【车间调度】遗传算法多目标流水车间调度【Matlab 307期】

一、简介

遗传算法的应用步骤
遗传算法GA是基于进化和遗传理论而提出来的全局寻优方法。
简单遗传算法解决问题的基本步骤如下:
(1)初始化:随机生成N个个体作为初始群体P(0),该种群就是目标函数可行解的一个集合。设置进化代数计数器归零,设置最大进化代数iter_max;
(2)个体评价:将初始种群代入目标函数中,根据适应度函数计算当前群体中各个种群的适应度;
(3)终止条件判断:给出终止条件,判断算法是否满足终止条件,若满足则转到(8);
(4)选择运算:对初始群体执行选择操作,优良的个体被大量复制,劣质的个体复制的少甚至被淘汰;
(5)交叉运算:以交叉概率来进行交叉运算;
(6)变异运算:以变异概率来进行交叉运算;
(7)群体P(t)经过选择运算、交叉运算、变异运算之后,得到由N个新个体构成的下一代群体P(t+1),则转(2),否则转(4);
(8)不断的进化,最终会得到目标函数中,适应度最高的个体,将其作为问题的最优解或满意解输出,终止计算。
在这里插入图片描述
在这里插入图片描述

二、源代码

%%%%遗传算法%%%%
clc;
clear;
close all;
T=[ 46 52 79 45 97 10 44 24 85 75 66 49 95 61 19 47 84 13 11 19 98  2 85 44  7 73 19 69 12 73 85 23 53 16 88  8 26 42 58 63  7  2 44 38 24 76 85 61 32 90
 61 87 51 25 73 93 28 90 94 59 64  2 16 35 53 40 81 26 85  4  4 10 63 96 55 71 66 94  7 15 11 99 37 50 56 69 22 56 67 63 96 74  4 42 40 30 93 36 25 87
  3  1 58 85 33 71 58 56 64 43 48 69 96 35 82 53 64 11 61 36 53 87 88 10 32 38 25 24 90  7 11 49  2 76 17 32 39  9 83 69 67 28 88 23 91 71  3 26 41 96
 51 24 21 57 69 51 50 51 21 19 63 91 11  6 31 63 36 39 57 47 56 65 59  4 10 12 62 43 49 54 87 29  2 18 75 39 77 69 15 78 68 37 22 41 92 67 24 87 91 31
 37 16 42 47 94 14 94 34 72 36 88 51 41 71 94 99 11 97 44 77 69 91 38 25 87  7 66 54 86 49  3 48 44 93 37 82 31 59 78 33 36  3 58 10 98  6 44 62 24 94
 79 93 68 75 37 44 34 39 76 62 74 28 78 43 98 83 91 27  6 82 60 44 43 76 99 66 11 35 52  8 40 62 25 24 30  1 73 27 16 91 33 11 99  2 60 90 36 62 15  3
 83 87 38 38 86 67 23 19 97 78 66 67  7 23 67  8 77 71 85 29 49  3 94 76 95 48  4 37 82 57 61  6 97  5 27 95 46 92 46 52  8 11  7 54 72 57 85 22 87 65
 22 29 99 25 98 55 80 82 33 68 47 74 26 61 95 55 11 42 72 14  8 98 90 36 75 69 26 24 55 98 86 30 92 94 66 47  3 41 41 47 89 28 39 80 47 57 74 38 59  5
 27 92 75 94 18 41 37 58 56 20  2 39 91 81 33 14 88 22 36 65 79 23 66  5 15 51  2 81 12 40 59 32 16 87 78 41 43 94  1 93 22 93 62 53 30 34 27 30 54 77
 24 47 39 66 41 46 24 23 68 50 93 22 64 81 94 97 54 82 11 91 23 32 26 22 12 23 34 87 59  2 38 84 62 10 11 93 57 81 10 40 62 49 90 34 11 81 51 21 39 2];


N=50;%种群大小

PRECI=size(T,1);%个体进制
gmax=100;%最大迭代次数
Ne=50;

trial=1;
paretof=[];

Pc=0.95;
Pm=0.05;
NPOP=ga_InitPop(N,PRECI);
EPOP=[];Epa=[];

it=0;
    while it<gmax
        twoPOP=[NPOP;EPOP];
        [Objv,Total]=ga_caltime(NPOP,T);%compute objective values
        Npa=[Objv,Total];
        twopa=[Npa;Epa];
        [Fit,FASPEA2t]=FASPEA2f(twopa);%fitness assignment
%--------------------------------------------------------------------------
        [EPOP,Epa,APESPEA2t]=APESPEA2f(twoPOP,twopa,Fit,Ne);%enviromental selection
%--------------------------------------------------------------------------
        [EFit,FASPEA2t2]=FASPEA2f(Epa);
        [NPOP,BTSt]=BTSf(EPOP,EFit,N);
        NPOP=LoxRecombin(NPOP,Pc);
        NPOP=ga_Mutate(NPOP,Pm);
        it=it+1;
        disp(sprintf('time: %d   generation: %d ',trial,it));
    end
twoPOP=[NPOP;EPOP];
[Objv,Total]=ga_caltime(NPOP,T);%compute objective values
Npa=[Objv,Total];
twopa=[Npa;Epa];
[Fit,FASPEA2t]=FASPEA2f(twopa);

[er,ec]=size(Epa);
for i=1:er
    pp=Epa(i,:);
    for j=i+1:er
        if pp==Epa(j,:)
            Epa(j,:)=zeros(1,ec);
        end
    end
end
function pa=OVcom(v,NO)
% OVcom: define the test problems,compute the objective values to v
% usage:
%        pa=OVcom(v,NO);
% where
%        NO:  the serial number of test problem
%        v:   the solutions in decision space
%        pa:  the solutions in objective space


switch NO
%%1-3 are MISA's problems    
case 1 %%  MISA's Example 1     %DEB
    x=v(:,1);y=v(:,2);
    f1=x; 
    f2=(1+10*y).*(1-(x./(1+10*y)).^2-(x./(1+10*y)).*sin(2*pi*4*x));
    pa=[f1,f2];
case 2%%  MISA's Example 2     %SCH
    x=v;
    f1=zeros(size(v,1),1);
    f2=(x-5).^2;
    sx1=find(x<=1);x1=x(sx1);f1(sx1)=-x1;
    sx2=find(x>1&x<=3);x2=x(sx2);f1(sx2)=-2+x2;
    sx3=find(x>3&x<=4);x3=x(sx3);f1(sx3)=4-x3;
    sx4=find(x>4);x4=x(sx4);f1(sx4)=x4-4;
    pa=[f1,f2];
case 3 %% MISA's Example 5   %KUR
    x=v(:,1);y=v(:,2);z=v(:,3);
    f1=-10*exp(-0.2*sqrt(x.^2+y.^2))-10*exp(-0.2*sqrt(y.^2+z.^2));
    f2=((abs(x)).^0.8+5*sin((x).^3))+((abs(y)).^0.8+5*sin((y).^3))+((abs(z)).^0.8+5*sin((z).^3));
    pa=[f1,f2];
    
%%4-18 are Veldhuizen's probems
case 4 %%  Binh (1)
    x=v(:,1);y=v(:,2);
    f1=x.^2+y.^2;
    f2=(x-5).^2+(y-5).^2;
    pa=[f1,f2];
case 5 %%  Binh (3)
    x=v(:,1);y=v(:,2);
    f1=x-10.^6;
    f2=y-2*10.^(-6);
    f3=x.*y-2;
    pa=[f1,f2,f3];
case 6 %%  Fonseca
    x=v(:,1);y=v(:,2);
    f1=1-exp(-(x-1).^2-(y+1).^2);
    f2=1-exp(-(x+1).^2-(y-1).^2);
    pa=[f1,f2]; 
case 7 %%  Fonseca (2)
    x=v(:,1);y=v(:,2);z=v(:,3);
    f1=1-exp(-(x-1/sqrt(3)).^2-(y-1/sqrt(3)).^2-(z-1/sqrt(3)).^2);
    f2=1-exp(-(x+1/sqrt(3)).^2-(y+1/sqrt(3)).^2-(z+1/sqrt(3)).^2);
    pa=[f1,f2];
case 8 %%  Laumanns
    x=v(:,1);y=v(:,2);
    f1=x.^2+y.^2; 
    f2=(x+2).^2+y.^2;
    pa=[f1,f2];
case 9 %%  Lis
    x=v(:,1);y=v(:,2);
    f1=(x.^2+y.^2).^(1/8); 
    f2=((x-0.5).^2+(y-0.5).^2).^(1/4);
    pa=[f1,f2];
case 10 %%  Murata
    x=v(:,1);y=v(:,2);
    f1=2* sqrt(x);
    f2=x.*(1-y)+5;
    pa=[f1,f2];
case 11 %%  Poloni
    x=v(:,1);y=v(:,2);
    A1=0.5*sin(1)-2*cos(1)+sin(2)-1.5*cos(2);
    A2=1.5*sin(1)-cos(1)+2*sin(2)-0.5*cos(2);
    B1=0.5*sin(x)-2*cos(x)+sin(y)-1.5*cos(y);
    B2=1.5*sin(x)-cos(x)+2*sin(y)-0.5*cos(y);
    f1=(1+(A1-B1).^2+(A2-B2).^2);
    f2=((x+3).^2+(y+1).^2);
    pa=[f1,f2];
case 12 %%  Quagliarella
    A1=(v(:,1).^2-10*cos(2*pi*v(:,1))+10)+(v(:,2).^2-10*cos(2*pi*v(:,2))+10)+(v(:,3).^2-10*cos(2*pi*v(:,3))+10);
    A2=((v(:,1)-1.5).^2-10*cos(2*pi*(v(:,1)-1.5))+10)+((v(:,2)-1.5).^2-10*cos(2*pi*(v(:,2)-1.5))+10)+((v(:,3)-1.5).^2-10*cos(2*pi*(v(:,3)-1.5))+10);
    f1=sqrt(A1/3);
    f2=sqrt(A2/3);
    pa=[f1,f2];
case 13 %%  Rendon
    x=v(:,1);y=v(:,2);
    f1=1./(x.^2+y.^2+1); 
    f2=x.^2+3*y.^2+1;
    pa=[f1,f2];
case 14 %%  Rendon (2)
    x=v(:,1);y=v(:,2);
    f1=x+y+1; 
    f2=x.^2+2*y-1;
    pa=[f1,f2];
case 15 %%  Schaffer  
    x=v;
    f1=x.^2;
    f2=(x-2).^2;
    pa=[f1,f2];
case 16 %%  Viennet 
    x=v(:,1);y=v(:,2);
    f1=x.^2+(y-1).^2; 
    f2=x.^2+(y+1).^2+1;
    f3=(x-1).^2+y.^2+2;
    pa=[f1,f2,f3];
case 18 %%  Viennet (3)
    x=v(:,1);y=v(:,2);
    f1=0.5*(x.^2+y.^2)/2+sin(x.^2+y.^2); 
    f2=(3*x-2*y+4).^2/8+(x-y+1).^2/27+15; 
    f3=1./(x.^2+y.^2+1)-1.1*exp(-x.^2-y.^2);
    pa=[f1,f2,f3];
%DTLZ
    case 19 %%DTLZ1
        vg=v(:,3:5);
        gx=100*(3+sum((vg-0.5).^2-cos(20*pi*(vg-0.5)),2));
        f1=0.5*v(:,1).*v(:,2).*(1+gx);
        f2=0.5*v(:,1).*(1-v(:,2)).*(1+gx);
        f3=0.5*(1-v(:,1)).*(1+gx);
        pa=[f1,f2,f3];
    case 20 %%DTLZ2
        vg=v(:,3:12);
        gx=sum((vg-0.5).^2,2);
        f1=(1+gx).*cos(v(:,1)*0.5*pi).*cos(v(:,2)*0.5*pi);
        f2=(1+gx).*cos(v(:,1)*0.5*pi).*sin(v(:,2)*0.5*pi);
        f3=(1+gx).*sin(v(:,1)*0.5*pi);
        pa=[f1,f2,f3];
    case 21%%DTLZ3
        vg=v(:,3:12);
        gx=100*(10+sum((vg-0.5).^2-cos(20*pi*(vg-0.5)),2));
        f1=(1+gx).*cos(v(:,1)*0.5*pi).*cos(v(:,2)*0.5*pi);
        f2=(1+gx).*cos(v(:,1)*0.5*pi).*sin(v(:,2)*0.5*pi);
        f3=(1+gx).*sin(v(:,1)*0.5*pi);
        pa=[f1,f2,f3];
    case 22%%DTLZ4
        vg=v(:,3:12);
        gx=sum((vg-0.5).^2,2);
        f1=(1+gx).*cos((v(:,1).^100)*0.5*pi).*cos((v(:,2).^100)*0.5*pi);
        f2=(1+gx).*cos((v(:,1).^100)*0.5*pi).*sin((v(:,2).^100)*0.5*pi);
        f3=(1+gx).*sin((v(:,1).^100)*0.5*pi);
        pa=[f1,f2,f3];   
%     case 23%DTLZ5
%         vg=v(:,3:12);
%         gx=sum((vg-0.5).^2,2);
%         Q1=(1./(2*(1+gx))).*(1+2*gx.*v(:,1));
%         Q2=(1./(2*(1+gx))).*(1+2*gx.*v(:,2));
%         f1=(1+gx).*cos(Q1*0.5*pi).*cos(Q2*0.5*pi);
%         f2=(1+gx).*cos(Q1*0.5*pi).*sin(Q2*0.5*pi);
%         f3=(1+gx).*sin(Q1*0.5*pi);
%         pa=[f1,f2,f3];

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ 912100926
往期回顾>>>>>>
【车间调度】粒子群优化算法之车间调度【Matlab 001期】
【车间调度】遗传算法之基于GUI的车间调度模型【Matlab 002期】
【车间调度】遗传算法之求解车间调度【Matlab 003期】
【车间调度】nsgaII算法之求解车间调度【Matlab 004期】
【车间调度】改进蛙跳算法之求解车间调度问题【Matlab 071期】
【车间调度】置换流水车间调度【Matalb 210期】
【车间调度】PSO求解6X6的车间调度问题【Matlab 305期】
【车间调度】粒子群的生产调度【Matlab 306期】

猜你喜欢

转载自blog.csdn.net/m0_54742769/article/details/114382387