www.pudn.com > PSO-algorithm.rar > jp_makespan.m, change:2011-08-04,size:2115b


function makespan=jp_makespan(array)  % 计算每个粒子的makespan; 
                                      %array 表示编码序列; 
 
T=[1 3 6 7 3 6 
  8 5 10 10 10 4 
  5 4 8 9 1 7  
  5 5 5 3 8 9 
  9 3 5 4 3 1  
  3 3 9 10 4 1]; 
js=[3 1 2 4 6 5 
    2 3 5 6 1 4 
    3 4 6 1 2 5 
    2 1 3 4 5 6 
    3 2 5 6 1 4 
    2 4 6 1 5 3];          %js矩阵记录每个工件不同工序的加工机床; 
 
wpn=length(array); 
[m n]=size(T); 
jp=zeros(1,n);             %jp记录工件的工序 
mp=zeros(1,m);             %mp记录机床上的工序 
 
t1_start=zeros(m,n); 
t1_end=zeros(m,n);         %记录机器每个工序的开始和结束的时间; 
 
t2_start=zeros(m,n); 
t2_end=zeros(m,n);         %记录工件每个工序的开始时间和结束时间; 
 
 
for i=1:wpn 
     
    k=array(i);            %k=1,2,3,4,5,6; 代表工件号; 
    jp(k)=jp(k)+1;         %jp记录工件的工序; 
    mp(js(k,jp(k)))=mp(js(k,jp(k)))+1;  %mp记录机床的工序; 
    q=mp(js(k,jp(k))); 
     
     
    if jp(k)==1           
         
        if mp(js(k,1))==1 
             
            t1_start(js(k,1),1)=0; 
            t1_end(js(k,1),1)=T(k,1); 
             
            t2_end(k,1)=t1_end(js(k,1),1); 
             
        else 
             
            t1_start(js(k,1),mp(js(k,1)))=t1_end(js(k,1),mp(js(k,1))-1); 
            t1_end(js(k,1),mp(js(k,1)))= t1_start(js(k,1),mp(js(k,1)))+T(k,1); 
       
            t2_end(k,1)=t1_end(js(k,1),mp(js(k,1))); 
             
        end 
         
    else 
         
        if q==1 
             
            t1_start(js(k,jp(k)),1)=t2_end(k,jp(k)-1); 
            t1_end(js(k,jp(k)),1)=t1_start(js(k,jp(k)),1)+T(k,jp(k)); 
            
            t2_end(k,jp(k))=t1_end(js(k,jp(k))); 
             
        else 
             
            com1=t1_end(js(k,jp(k)),q-1); 
            com2=t2_end(k,jp(k)-1); 
            t1_start(js(k,jp(k)),q)=max(com1,com2); 
            t1_end(js(k,jp(k)),q)=t1_start(js(k,jp(k)),q)+T(k,jp(k)); 
          
            t2_end(k,jp(k))=t1_end(js(k,jp(k)),q); 
             
        end 
         
    end 
     
end 
 
 
makespan=max(max(t1_end));