gusucode.com > 车间调度实例的遗传算法实例源代码 > 粒子群算法的源代码/best.m

    function [jobname t_start t_end]=best(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);         %记录工件每个工序的开始时间和结束时间;

jobname=zeros(m,n);        %记录t1_start对应的工件号;

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);
            jobname(js(k,1),1)=k;            %新加;
            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);
            jobname(js(k,1),mp(js(k,1)))=k;       %新加;
            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));
            jobname(js(k,jp(k)),1)=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));
            jobname(js(k,jp(k)),q)=k;
            
            t2_end(k,jp(k))=t1_end(js(k,jp(k)),q);
            
        end
        
    end
    
end

t_start=t1_start;
t_end=t1_end;
jobname=jobname;