Anda di halaman 1dari 21

LAMPIRAN

75

Lampiran 1. coding matlab mean tardiness


function [meanT]=meanTardiness(seq,n,m,t,D)
ct=cputime;
n=size(t,2); %jumlah job
m=size(t,1); %jumlah mesin
C=zeros(1,n);%membuat vektor/tempat untuk meletakkan suatu hasil
T=zeros(1,n);%membuat vektor/tempat untuk meletakkan suatu hasil
Cij=zeros(m,n);%membuat vektor/tempat untuk meletakkan suatu hasil
for j=1:n %dimulai job ke-1 sampai n
x=seq(1,j); %inisiasi nama job x sebelum dilakukan komputasi
if j==1 %jika job berada dalam urutan pertama
for i=1:m %untuk setiap mesin, dimulai dari mesin ke-i sampai ke-m
if i==1 %jika job berada dalam mesin pertama
Cij(i,x)=t(i,x);%matriks yg telah dibuat diisi dengan nilai waktu proses
job urutan 1,di mesin 1
else
Cij(i,x)=Cij(i-1,x)+t(i,x);
end
end
else
y=seq(1,j-1); %inisiasi nama job x-1 setelah dilakukan komputasi pertama
for i=1:m %untuk setiap mesin, dimulai dari mesin ke-i sampai ke-m
if i==1%jika job berada dalam mesin pertama
Cij(i,x)=Cij(i,y)+t(i,x);
else
if Cij(i-1,x)>=Cij(i,y);
Cij(i,x)=Cij(i-1,x)+t(i,x);
else
Cij(i,x)=Cij(i,y)+t(i,x);
end
end
end
end
end
for j=1:n
C(j)=max(Cij(:,j));%mencari nilai Completion Time
T(j)=max(C(j)-D(j),0);%mencari nilai Tardiness
end
makespan=max(C);
totalT=sum(T);%Mencari total tardiness
meanT=(totalT)/n;%mencari mean tardiness
waktukomputasi=cputime-ct
76

Lampiran 2. coding matlab NEH-EDD


function [seq]=NEHEDD(t,D,m)
[urutanD seq]=sort(D);%mengurutkan job menggunakan aturan EDD
n=length(seq);
k=1;
a=seq(k);
b=[];
if k<n;
%update sequence
a=[a seq(k+1)];
[totalT_a]=totalT(a,m,t,D);%menghitung lateness
%membangkitkan solusi baru
na=length(a);
c=na-1;
d=na;
b=a;
b(c:d)=fliplr(b(c: (d)));
[totalT_b]=totalT(b,m,t,D);%menghitung lateness
seq1=[a;b];
stotalT=[totalT_a;totalT_b];
[Tmin urutan]=min(stotalT);
y=seq1(urutan,:);
k=k+1;
while k<=n-1;
%if na>2
seq2=[];
sstotalT=[];
for e=1:size(y,1);
seq1=[];
stotalT=[];
a=[y(e,:) seq(k+1)];
%membangkitkan solusi baru
na=length(a);
c=na-1;
d=na;
b=a;
b(c:d)=fliplr(b(c: (d)));
seq1=[a;b];
%[totalT_y]=totalT(y,m,t,D)%menghitung lateness
js=na-2;
while js>0;
%stotalT=[totalT_x;totalT_y]
c=max((c-1),0);
d=max((d-1),0);
b(c:d)=fliplr(b(c: (d)));
%[totalT_b]=totalT(b,m,t,D)%menghitung lateness
77

seq1=[seq1;b];
js=js-1;
end
for f=1:size(seq1,1);
tt=totalT(seq1(f,:),m,t,D);%menghitung lateness
stotalT=[stotalT;tt];
end
seq2=[seq2;seq1];
sstotalT=[sstotalT;stotalT];
end
[Tmin urutan]=min(sstotalT)
yy=find(sstotalT==Tmin)
y=seq2(yy,:);
%end
k=k+1;
end
end
% if totalT_x>=totalT_y %membandingkan lateness
% x=y
% end
seq=y;
78

Lampiran 3. coding matlab Simulated Annealing


function [bestF,siklus,iterasi,waktukomputasi]=flowshopsa(t,iniT,D,maxit,fp)
%t= waktu job ke j diselesaikan oleh mesin i
%Temp = temperatur awal yang digunakan
%fp = faktor pereduksi temperatur setelah iterasi
ct=cputime;
n=size(t,2); %jumlah job
m=size(t,1); %jumlah mesin
iterasi=1;
siklus=1;
%membangkitkan solusi awal
[initSol]=NEHEDD(t,D,m);%NEH-EDD-SA
%menghitung nilai fitness soluai awal
[meanT_is]=meanTardiness(initSol,n,m,t,D);
%alternatif awaln=size(t,2) %jumlah job
while iterasi<maxit
%membangkitkan solusi baru
urut=initSol;
ins_pts=sort(ceil(n*rand(1,2)));
p=ins_pts(1);
q=ins_pts(2);
r=rand;
if r < 0.333
%flip
urut(:,p:q)=fliplr(initSol(:,p:q));
elseif r <0.667>0.333
%swap
urut(:,[p q])=initSol(:,[q p]);
else
%slide
urut(:,p:q)=initSol(:,[p+1:q p]);
end
newSol=urut;
%cari meantardiness alternatif baru
[meanT_ns]=meanTardiness(newSol,n,m,t,D);
%membandingkan meanTardiness baru dengan yg lama
deltaf=meanT_ns-meanT_is;
%makespan baru lebih baik dari mean tardiness lama
if deltaf<0
meanT_is=meanT_ns; %mean tardiness terbaik
initSol=newSol;
%jika mean tardiness baru tidak lebih baik dari mean tardiness lama
else
k=1;
random=rand(1);
prob=exp((-deltaf)/(iniT*k));
79

if random<prob %kriteria metropolis


%menerima mean tardiness baru yg tidak lebih baik dari yg lama
meanT_is=meanT_ns;
initSol=newSol;
else
meanT_is=meanT_is;
initSol=initSol;
end
end
%update iterasi dan siklus
iterasi=iterasi+1;
if iterasi>=maxit
iniT=fp*iniT;
if iniT<1e-8
break
end
siklus=siklus+1;
iterasi=1;
end
end
bestSol=initSol;
bestF=meanT_is;
waktukomputasi=cputime-ct;
80

Lampiran 4. hasil matlab perhitungan mean tardiness NEH-EDD-SA


(maksimum iterasi=5)
T = 100
81

T= 200
82

T=300
83

T= 500
84

T=1000
85

Lampiran 5. hasil matlab perhitungan mean tardiness NEH-EDD-SA


(maksimum iterasi=15)
T=100
86

T=200
87

T=300
88

T= 500
89

T=1000
90

Lampiran 6. hasil matlab perhitungan mean tardiness NEH-EDD-SA


(maksimum iterasi=30)
T=100
91

T= 200
92

T= 300
93

T= 500
94

T =1000

Anda mungkin juga menyukai