车间调度问题的matlab程序.pdfVIP

  • 89
  • 0
  • 约4.68千字
  • 约 11页
  • 2021-06-03 发布于江苏
  • 举报
clear; clc; % init %种群初始化,种群大小为20 %种群初始化% seed=[1 1 1 2 2 2 3 3 3 ];%种子 Chrom=zeros(20,9);%预定义零矩阵,用于存数20个染色体 for i=1:20 Chrom(i,:)=seed(randperm(numel(seed)));%生成染色体并赋到矩阵各行 end NIND=20;%种群大小20 WNumber=9;%染色体长度为9 XOVR=0.2;%交叉概率=0.6 MUTR=0.03; gongjian_1=[11 3 8;12 2 5;13 1 4]; gongjian_2=[21 2 10;22 1 8;23 3 5]; gongjian_3=[31 1 7;32 3 6;33 2 4]; time_opt=zeros(20,800);% 预定义20*100的矩阵存储100代种群中的各个个体时间 for generation=1:1000 %%以下进行解码、计算适应度、选择———————————— %%解码求适应度 计算最短时间 P=zeros(9,1); M=zeros(9,1); T=zeros(9,1); t_bz=zeros(3,3); T_qunti=zeros(20,1); %该函数用来1 :计算种群中各个染色体的时间,最终结果为20*1的矩阵,代表各个染色体对应的时间 % 2 :通过选择生成新的种群,其中,最优个体直接保留 % 将该时间放到20行100矩阵中,每一列代表一代中的20个个体的时间 for i=1:20 a=1; b=1;c=1;%定义a b c 用于确定工序矩阵、机床矩阵以及时间矩阵 t1=0;t2=0;t3=0;%初始化机床1 机床2 机床3 的值 for j=1:9 if Chrom(i,j)==1 P(j)=10+a; % if a==4 % a=3; % end M(j)=gongjian_1(a,2); T(j)=gongjian_1(a,3); a=a+1; elseif Chrom(i,j)==2 P(j)=20+b; % if b==4 % b=3; % end M(j)=gongjian_2(b,2); T(j)=gongjian_2(b,3); b=b+1; elseif Chrom(i,j)==3 P(j)=30+c; % if c==4 % c=3; % end M(j)=gongjian_3(c,2); T(j)=gongjian_3(c,3); c=c+1; end end %解码完成 求出P M T %% 以下计算每个染色体的时间 for k=1:9 if M(k)==1 x=floor(P(k)/10);% x为工件号 y=rem(P(k),10);% y为工序号 if y==1%显然,如果该工序为第一个工序,则M1机床时间t1直接为当前时间加上该工序的时间 t1=t1+T(k); t_bz(x,y)=t1;%第32行,在程序初始化过程中已经预定义t_bz=zeros(3,3);t_bz即为3*3的零矩阵,用于存储各 个工序在机床上对应的机床时间,行数代表工件号,列数代表工序 else %如果该工序不是第一个工序:temp1为一个中间变量,元素为该机床当前的时间t1、以及该工件上一 工序所在机床的对应机床时间 temp1=[ t1 t_bz(x,y-1)]; t1=max(t emp1)+T(k);%。选择两者之中的较大值,即为该工件在1机床上(2 3机床同理)上对应的机床时间 t_bz(x,y)=t1;%将该时间赋值到时间矩阵 end elseif M(k)==2 x=floor(P(k)/10);% x为工件号 y=rem(P(k),10); % y为工序号 if y==1 % 如果为该工件的第一个工序,则该机床时间为其前一时刻时间+该道工序的时间 t2=t2+T(k); t_bz(x,y)=t2; else %如果该工序不是第一道工序 temp2=[ t2 t_bz(x,y-1)]; t_bz(x,y)=t2; end elseif M(k)==3 x=floor(P(k)/10);% x为工件号 y=rem(P(k),10); % y为工序号 if y==1 t3=t3+T(k); t_bz(x,y)=t3; else temp3=[ t3 t_bz(x,y-1)]; t3=max(temp3)+T(k); t_bz(x,y)=t3; end end end temp=

文档评论(0)

1亿VIP精品文档

相关文档