Code covered by the BSD License  

Highlights from
Alghorithm of Karge Thompson

from Alghorithm of Karge Thompson by katysusyrico Schenone
Calcolate the best combination of N-jobs for minimize the time setup.

KargThompson(A)
% Calcolate the best combination of N-jobs for minimize the
% time setup
%To implement algorithm insert your time setup matrix 
%A=[setup(job1,job1) setup(job1,job2)...setup(job1,jobN);setup(job2,job1) setup(job2,job2)...setup(job2,jobN);...;setup(jobN,job1)...setup(jobN,jobN)]
%KargThompson(A)


function []= KargThompson(A)
dimension=size(A,1);
[m,n]=size(A);

%control to negative elements, min dimension and matrix square
if dimension<3;
    disp ('Sorry, Matrix A must have min dimension=3;remember, Matrix A must be square!');
    else
           if m==n;
               ContNegativeNumber=0;
                for k=1:dimension;
                    for z=1:dimension;
                        
                        if A(k,z)<0
                        ContNegativeNumber=ContNegativeNumber+1;
                                    
                        end
                    end
                end
           if ContNegativeNumber>0;
              
                disp('ERROR: there are some time setup in matrix A negative!!');
                
           else

%first combination [job1 job2...job-dimension]
Vector=1:1:dimension;

times=[0];
TempCombination=[0];
j=1;
%insertion from third job to dimension in TempCombination
for insert=3:dimension;
	for i=0:(insert-1);
		if i==0;
			TempCombination=[insert Vector(i+1:insert-1)];
		else
			TempCombination=[Vector(1:i) insert Vector(i+1:insert-1)];
		end
		times(j)=setup(A,TempCombination);
		c=length(times);
		%compare setup of TempCombination and find the OptimalCombination
		%with min setup
		if c==1; 
			OptimalCombination=TempCombination;
		elseif setup(A,TempCombination)<times(1,j-1);
			OptimalCombination=TempCombination;
		elseif setup(A,TempCombination)>times(1,j-1);
			j=j-1;
		end
		j=j+1;  
	end
	times=0;
	insert=insert +1;
	j=1;
	setup1=setup(A,OptimalCombination);
end

%second combination [job2 job1...job-dimension]
Vector2=[Vector(2) Vector(1) Vector(3:dimension)];
times=[0];
TempCombination=[0];
j=1;
for insert=3:dimension;
	for i=0:(insert-1);
		if i==0;
			TempCombination=[insert Vector2(i+1:insert-1)];
		else
			TempCombination=[Vector2(1:i) insert Vector2(i+1:insert-1)];
		end
		times(j)=setup(A,TempCombination);
		c=length(times);
		if c==1; 
			OptimalCombination2=TempCombination;
		elseif setup(A,TempCombination)<times(1,j-1);
			OptimalCombination2=TempCombination;
		elseif setup(A,TempCombination)>times(1,j-1);
			j=j-1;
		end
		j=j+1;  
	end
	times=0;
	insert=insert +1;
	j=1;
	setup2=setup(A,OptimalCombination2);
end

%compare setup1 and setup2 and find min to print OptimalCombination
setup= min(setup1,setup2);
if setup==setup1
	setup
	OptimalCombination
    
else 
	OptimalCombination=OptimalCombination2;
	setup
	OptimalCombination 
end  
end

else disp ('Sorry, Matrix A must be square; remember, Matrix A must have min dimension=3');

end

end

end

Contact us at files@mathworks.com