?? 7.txt
字號:
function [Zp,Y1p,Y2p,Y3p]=COST(X,T,P,plotif)
% JSPGA的內聯子函數,用于求調度方案的Makespan值
% 輸入參數列表
% X 調度方案的編碼矩陣,是一個實數編碼的m×n矩陣
% T m×n的矩陣,存儲m個工件n個工序的加工時間
% P 1×n的向量,n個工序中,每一個工序所具有的機床數目
% plotif 是否繪甘特圖的控制參數
% 輸出參數列表
% Zp 最優的Makespan值
% Y1p 最優方案中,各工件各工序的開始時刻
% Y2p 最優方案中,各工件各工序的結束時刻
% Y3p 最優方案中,各工件各工序使用的機器編號
%第一步:變量初始化
[m,n]=size(X);
Y1p=zeros(m,n);
Y2p=zeros(m,n);
Y3p=zeros(m,n);
%第二步:計算第一道工序的安排
Q1=zeros(m,1);
Q2=zeros(m,1);
R=X(:,1);%取出第一道工序
Q3=floor(R);%向下取整即得到各工件在第一道工序使用的機器的編號
%下面計算各工件第一道工序的開始時刻和結束時刻
for i=1(1)%取出機器編號
pos=find(Q3==i);%取出使用編號為i的機器為其加工的工件的編號
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(k)%取出機器編號
pos=find(Q3==i);%取出使用編號為i的機器為其加工的工件的編號
lenpos=length(pos);
if lenpos>=1
POS=zeros(1,lenpos);%上一個工序完成時間由早到晚的排序
for jj=1:lenpos
MinEndTime=min(EndTime);
ppp=find(EndTime==MinEndTime);
POS(jj)=ppp(1);
EndTime(ppp(1))=Inf;
end
%根據上一個工序完成時刻的早晚,計算各工件第k道工序的開始時刻和結束時刻
if lenpos>=2
for j=2:lenpos
Q1(pos(POS(j)))=Y2p(pos(POS(j)),k-1);%預定的開始時刻為上一個工序的結束時刻
if Q1(pos(POS(j)))
Q1(pos(POS(j)))=Q2(pos(POS(j-1)));
end
end
end
end
end
Y1p(:,k)=Q1;
Y2p(:,k)=Q2;
Y3p(:,k)=Q3;
end
%第四步:計算最優的Makespan值
Y2m=Y2p(:,n);
Zp=max(Y2m);
%第五步:繪甘特圖
if plotif
for i=1:m
for j=1:n
mPoint1=Y1p(i,j);
mPoint2=Y2p(i,j);
mText=m+1-i;
PlotRec(mPoint1,mPoint2,mText);
Word=num2str(Y3p(i,j));
%text(0.5*mPoint1+0.5*mPoint2,mText-0.5,Word);
hold on
x1=mPoint1;y1=mText-1;
x2=mPoint2;y2=mText-1;
x3=mPoint2;y3=mText;
x4=mPoint1;y4=mText;
%fill([x1,x2,x3,x4],[y1,y2,y3,y4],'r');
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,0.5,1]);
text(0.5*mPoint1+0.5*mPoint2,mText-0.5,Word);
end
end
end
function PlotRec(mPoint1,mPoint2,mText)
% 此函數畫出小矩形
% 輸入:
% mPoint1 輸入點1,較小,橫坐標
% mPoint2 輸入點2,較大,橫坐標
% mText 輸入的文本,序號,縱坐標
vPoint = zeros(4,2) ;
vPoint(1, = [mPoint1,mText-1];
vPoint(2, = [mPoint2,mText-1];
vPoint(3, = [mPoint1,mText];
vPoint(4,:) = [mPoint2,mText];
plot([vPoint(1,1),vPoint(2,1)],[vPoint(1,2),vPoint(2,2)]);
hold on ;
plot([vPoint(1,1),vPoint(3,1)],[vPoint(1,2),vPoint(3,2)]);
plot([vPoint(2,1),vPoint(4,1)],[vPoint(2,2),vPoint(4,2)]);
plot([vPoint(3,1),vPoint(4,1)],[vPoint(3,2),vPoint(4,2)]);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -