资源简介
Matlab源码:遗传算法求混合流水车间调度最优问题(JSPGA),附带matlab源码程序,采用双重种群,可以绘制出每次迭代的最优值和平均值的变化,以及最后绘制最优解的车间调度甘特图
代码片段和文件信息
function [ZpY1pY2pY3p]=COST(XTPplotif)
%----------------------------------------------------------------
% JSPGA的内联子函数,用于求解调度方案的Makespan值
%----------------------------------------------------------------
% 输入参数列表
% X 调度方案的编码矩阵,是一个实数编码的m*n矩阵
% T m*n的矩阵,存储m个工件n个工序的加工时间
% P 1*n的向量,n个工序中,每一个工序所具有的机床数目
% plotif 是否绘制甘特图的控制参数
%----------------------------------------------------------------
% 输出参数列表
% Zp 最优的Makespan值
% Y1p 最优方案中,各工件各工序的开始时刻,可用来绘制甘特图
% Y2p 最优方案中,各工件各工序的结束时刻
% Y3p 最优方案中,各工件各工序使用的机器编号
% Xp 最优决策变量的值,决策变量是一个实数编码的m*n矩阵
%----------------------------------------------------------------
% 第一步:变量初始化
[mn]=size(X);
Y1p=zeros(mn);
Y2p=zeros(mn);
Y3p=zeros(mn);
%----------------------------------------------------------------
% 第二步:计算第一道工序的安排
Q1=zeros(m1);
Q2=zeros(m1);
R=X(:1); %取出第一道工序
Q3=floor(R); %向下取整即得到各工件在第一道工序使用的机器编号
% 下面计算各工件第一道工序的开始时刻和结束时刻
for i=1:P(1) %取出机器编号
pos=find(Q3==i);%取出使用编号为i的机器为其加工的工件编号 find返回向量/矩阵中的位置
lenpos=length(pos);
if lenpos>=1
Q1(pos(1))=0;
Q2(pos(1))=T(pos(1)1);
if lenpos>=2
for j=2:lenpos
Q1(pos(j))=Q2(pos(j-1));
Q2(pos(j))=Q2(pos(j-1))+T(pos(j)1);
end
end
end
end
Y1p(:1)=Q1;
Y2p(:1)=Q2;
Y3p(:1)=Q3;
%----------------------------------------------------------------
% 第三步:计算剩余工序的安排
for k=2:n
R=X(:k); %取出第k道工序
Q3=floor(R); %向下取整即得到各工件在第k道工序使用的机器编号
%下面计算各工件第k道工序的开始时刻和结束时刻
for i=1:P(k) %取出机器编号
pos=find(Q3==i); %取出使用编号为i的机器为其加工的工件编号
lenpos=length(pos);
if lenpos>=1
EndTime=Y2p(posk-1); %取出这些机器在上一个工序中的结束时刻
POS=zeros(1lenpos); %上一个工序完成时间由早到晚的排序
for jj=1:lenpos
MinEndTime=min(EndTime);
ppp=find(EndTime==MinEndTime);
POS(jj)=ppp(1);
EndTime(ppp(1))=Inf;
end
%根据上一个工序完成时刻的早晚,计算各工件第k道工序的开始时刻和结束时刻
Q1(pos(POS(1)))=Y2p(pos(POS(1))k-1);
Q2(pos(POS(1)))=Q1(pos(POS(1)))+T(pos(POS(1))k);%前一个工件的结束时刻
if lenpos>=2
for j=2:lenpos
Q1(pos(POS(j)))=Y2p(pos(POS(j))k-1); %预定的开始时刻为上一个工序的结束时刻
Q2(pos(POS(j)))=Q1(pos(POS(j)))+T(pos(POS(j))k);%前一个工件的结束时刻
if Q1(pos(POS(j))) Q1(pos(POS(j)))=Q2(pos(POS(j-1)));
Q2(pos(POS(j)))=Q1(pos(POS(j)))+T(pos(POS(j))k);%前一个工件的结束时刻
end
end
end
end
end
Y1p(:k)=Q1;
Y2p(:k)=Q2;
Y3p(:k)=Q3;
end
%----------------------------------------------------------------
% 第四步:计算最优的Makespan值
Y2m=Y2p(:n);
Zp=max(Y2m);
%----------------------------------------------------------------
% 第五步:绘制甘特图
c
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4245 2018-11-14 14:12 JPSGA\COST.m
文件 4016 2018-11-29 19:33 JPSGA\JSPGA.m
文件 563 2018-11-14 14:12 JPSGA\PlotRec.m
文件 164 2018-11-29 19:33 JPSGA\TimeFun.m
文件 0 2018-11-29 19:34 JPSGA\运行TimeFun.txt
- 上一篇:人机拿火柴游戏java代码
- 下一篇:导出Excel,将页面的内容通过excel导出
评论
共有 条评论