% 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