function [BestSequence,BestTFT]=NEH_ForTFT(JobNumber,MachineNumber,ProcessingTime)
JobN=JobNumber;
MachineN=MachineNumber;
if JobN<1
return;
end
if MachineN<1
return;
end
SumProcessingTime=zeros(1,JobN);
AllDelayTime=zeros(JobN,JobN);
for i=1:JobN
for j=1:JobN
if i==j
continue;
else
AllDelayTime(i,j)=AppendDelay(MachineN,ProcessingTime(i,1:MachineN),ProcessingTime(j,1:MachineN));
end
end
end
DescendS=zeros(1,JobN);
JobSequence=zeros(1,JobN);
DescendS(1)=1;IndexD=1;
SumProcessingTime(1)=sum(ProcessingTime(1,1:MachineN));
for No_Job=2:JobN
SumProcessingTime(No_Job)=sum(ProcessingTime(No_Job,1:MachineN));
IndexD=No_Job;
while SumProcessingTime(No_Job)<SumProcessingTime(DescendS(IndexD-1))
DescendS(IndexD)=DescendS(IndexD-1);
IndexD=IndexD-1;
if IndexD==1
break;
end
end
DescendS(IndexD)=No_Job;
end
[BestSequence,BestTFT]=Chins(DescendS);%call nested functin to finish the search
function [JobSequence,TFT_Sequenced]=Chins(DescendS)
No_Sequenced=zeros(1,JobN);
Num_Sequenced=0;
No_Sequencing=DescendS;%±£´æ´ýÅÅÐòµÄ
Num_Sequencing=JobN;%±£´æ´ýÅÅÐòµÄÊýÄ¿
No_Sequenced(1)=No_Sequencing(1);Num_Sequenced=1;%³õʼ»¯
No_Sequencing(1)=[];Num_Sequencing=Num_Sequencing-1;
TFT_Sequenced=SumProcessingTime(No_Sequenced(1));
while Num_Sequencing>0
for i=1:Num_Sequencing
for j=1:Num_Sequenced+1
if j==1
DeltDelayTime=AllDelayTime(No_Sequencing(i),No_Sequenced(1));
elseif j==Num_Sequenced+1
DeltDelayTime==0;
else
DeltDelayTime=AllDelayTime(No_Sequenced(j-1),No_Sequencing(i))+AllDelayTime(No_Sequencing(i),No_Sequenced(j))-AllDelayTime(No_Sequenced(j-1),No_Sequenced(j));
end
DeltDelayTime=DeltDelayTime*(Num_Sequenced-j+1);%¶ÔºóÃæ(Num_Sequenced-j+1)¸ö¹¤×÷Ôì³ÉÓ°Ïì
if j==1
TempTFT=TFT_Sequenced+DeltDelayTime+SumProcessingTime(No_Sequencing(i));
CandidateMin_TFT_Sequenced=TempTFT;
InsertPos_InSequencd(No_Sequencing(i))=j;
elseif j==2
TempTFT=TFT_Sequenced+DeltDelayTime+AllDelayTime(No_Sequenced(1),No_Sequencing(i))+SumProcessingTime(No_Sequencing(i));
else
jDeltDelayTime=0;
for pos=2:j-1
jDeltDelayTime=jDeltDelayTime+AllDelayTime(No_Sequenced(pos-1),No_Sequenced(pos));
end
jDeltDelayTime=jDeltDelayTime+AllDelayTime(No_Sequenced(j-1),No_Sequencing(i));
TempTFT=TFT_Sequenced+DeltDelayTime+jDeltDelayTime+SumProcessingTime(No_Sequencing(i));
end
ÉÏÃæµÄ³ÌÐòÔÚmatlabÀïÃæÔËÐеÄʱºò±¨´í£º¡°ÊäÈëµÄJobNumberûÓж¨Ò塱£¬matlab³õѧÕߣ¬ÏÖÔÚÓÖ¼±×ÅÓã¬ÏëÇë½ÌÒ»ÏÂÕâ¸öÎÊÌâ¡£·Ç³£¸Ðл£¡£¡ |