• Tidak ada hasil yang ditemukan

BAB IV PEMBAHASAN

4.1 Prosedur Algoritma Genetik Untuk Permasalahan Job Shop

Prosedur Algoritma Genetik yang digunakan dalam menyelesaikan permasalahan Job Shop Scheduling adalah sebagai berikut :

Prosedur GA secara ringkas dapat dilihat pada Gambar 4.1. Misalkan P(t) dan C(t) masing-masing adalah induk dan anak pada generasi ke-t dan max_gen merupakan iterasi maksimum yang ditentukan.

Gambar 4.1 Prosedur untuk Genetic Algorithm Prosedur untuk Genetic Algorithm

begin t ← 0; parameter setting; inisialisasi P(t); evaluasi P(t); while (t β‰  max_gen) do

operasi genetik pada P(t) untuk mendapatkan C(t); pengaktifan schedule C(t);

evaluasi C(t);

pilih P(t+1) dari P(t) dan C(t);

t ← t + 1;

end end

ADLN Perpustakaan Universitas Airlangga

Terdapat beberapa parameter yang digunakan dalam GA untuk menyelesaikan JSSP. Parameter tersebut antara lain jumlah job (n), jumlah mesin (m), urutan operasi mesin untuk tiap-tiap job (seqMachine), waktu proses untuk setiap operasi (processTime), duedate untuk setiap job (duedate), ukuran populasi (pop_size), batas derajat kesamaan kromosom awal (degree), probabilitas crossover (Pc), probabilitas mutasi (Pm), ukuran individu yang akan diturnamenkan (tour), dan maksimum generasi (max_gen). Prosedur penentuan parameter dapat dilihat pada Gambar 4.2.

Gambar 4.2 Prosedur untuk Parameter Setting

Flowchart penyelesaian dengan menggunakan GA dapat dilihat pada Lampiran 1.

Langkah I : Generate Populasi Awal

Populasi awal merupakan kumpulan dari individu atau kromosom yang dibangkitkan secara random. Kromosom tersebut merupakan solusi urutan scheduling dari permasalahan job shop.

Generate populasi awal merupakan proses pembangkitan sejumlah kromosom secara random dalam suatu ruang pencarian yaitu berupa kode urutan

Prosedur untuk Parameter Setting begin

jumlah job : n;

jumlah mesin : m;

urutan operasi mesin : seqMachine;

waktu proses : processTime;

duedate : duedate;

ukuran populasi : pop_size;

degree of similarity : degree; probabilitas crossover : Pc; probabilitas mutasi : Pm;

ukuran turnamen : tour;

maksimum iterasi : max_gen;

39

job yang merupakan himpunan solusi feasible. Sejumlah kromosom yang dibangkitkan akan dibentuk menjadi sebuah populasi pada masing-masing iterasi atau generasi dan diproses hingga mencapai max_gen yang ditentukan.

Pengkodean kromosom diberikan dalam bentuk permutasi dengan pengulangan (permutation with repetition) dari job-job sebanyak perkalian jumlah job yang dikerjakan dengan banyak mesin. Prosedur yang digunakan untuk melakukan generate populasi awal dapat dilihat pada Gambar 4.3. Misal ind adalah banyak kromosom yang telah dibangkitkan pada saat i dan degij

merupakan derajat kesamaan dari kromosom ke-i yang baru dibangkitkan dengan kromosom ke-j yang sudah dibangkitkan terlebih dahulu.

Gambar 4.3 Prosedur untuk Inisialisasi

Pada prosedur generate populasi awal terdapat langkah untuk generate sebuah kromosom. Prosedur generate kromosom dapat dilihat pada Gambar 4.4.

Gambar 4.4 Prosedur untuk Generate Kromosom

Prosedur untuk Inisialisasi 𝐏 𝐭

begin

i ← 0;

while (i <pop_size ) do

j ← 0;

membangkitkan sebuah kromosom(); pengaktifan schedule ();

if (i β‰  1) then ind = i; while ( j <ind) do

menghitung derajat kesamaan antar individu; if ( degij >degree) then i = i βˆ’ 1; end

end i ← i + 1;

end end

Prosedur untuk Generate Kromosom begin

generate urutan job (); menentukan operasi job (); menentukan urutan mesin (); end

ADLN Perpustakaan Universitas Airlangga

Prosedur generate kromosom dilakukan dengan cara membangkitkan kode urutan job secara random dengan menggunakan pengkodean permutasi yang mewakili gen-gen pembentuk kromosom. Gambar 4.5 menunjukkan prosedur pembentukan kode urutan job. Misalkan untuk jumlah gen disimbolkan dengan genes, jobk merupakan kode job ke-k, random (n-1) merupakan proses random bilangan integer antara 0 sampai (n-1), dan num, a, temp adalah variabel bantuan.

Gambar 4.5 Prosedur untuk Generate Urutan Job

Setelah didapatkan urutan dari job, langkah selanjutnya yang dilakukan adalah menentukan urutan operasi dari masing-masing job. Prosedur yang digunakan untuk menentukan urutan operasi dapat dilihat pada Gambar 4.6. Misalkan operationk menunjukkan operasi pada urutan job atau gen ke-k, jobOperjobk merupakan variable bantuan untuk menentukan jumlah operasi.

Gambar 4.6 Prosedur untuk Menentukan Operasi Job Prosedur untuk Generate Urutan Job

begin k ← 0; genes← n Γ— m; num() ← 0: n ; while (k<genes) do temp = random (n-1); a = numtemp +1; if ( a ≀ m ) then jobk = temp;

numtemp = a; k ← k + 1; end end

end

Prosedur untuk Menentukan Operasi Job begin k ← 0; jobOper() ← 0: m ; while (k <genes ) do operationk = π‘—π‘œπ‘π‘‚π‘π‘’π‘Ÿπ‘—π‘œπ‘π‘˜; π‘—π‘œπ‘π‘‚π‘π‘’π‘Ÿπ‘—π‘œπ‘π‘˜=π‘—π‘œπ‘π‘‚π‘π‘’π‘Ÿπ‘—π‘œπ‘π‘˜+ 1; k ← k+ 1; end end

41

Setelah didapatkan urutan opebbrasi masing-masing job, selanjutnya ditentukan mesin yang digunakan dan waktu proses (Processing Time) untuk masing-masing job. Prosedur tersebut dapat dilihat pada Gambar 4.7. Misalkan machinek menunjukkan mesin yang digunakan untuk gen ke-k, dan karena waktu pemrosesan menggunakan tiga bilangan fuzzy maka processingTkl menunjukkan bilangan fuzzy ke-l untuk waktu pemrosesan gen ke-k, processTime menunjukkan waktu pemrosesan .

Gambar 4.7 Prosedur untuk Menentukan Urutan Mesin

Setelah pembangkitan kromosom selesai maka kromosom-kromosom yang mewakili sebuah schedule tersebut akan diaktifkan menggunakan algoritma Giffler-Thompson. Prosedur pengaktifan schedule dapat dilihat pada Gambar 4.8.

Gambar 4.8 Prosedur untuk Pengaktifan Schedule

Langkah awal yang dilakukan untuk mengaktifkan schedule adalah dengan menghitung waktu penyelesaian job pada masing-masing kromosom. Misalkan timeJobij dan timeMachineij masing-masing adalah waktu penyelesaian ke-j untuk

Prosedur untuk Pengaktifan Schedule begin

menghitung completion time dan delay time(); pengaktifan();

end

Prosedur untuk Menetukan Urutan Mesin begin k ← 0; while (k < genes ) do π‘šπ‘Žπ‘β„Žπ‘–π‘›π‘’π‘˜=π‘ π‘’π‘žπ‘€π‘Žπ‘β„Žπ‘–π‘›π‘’π‘—π‘œπ‘π‘˜π‘œπ‘π‘’π‘Ÿπ‘Žπ‘‘π‘–π‘œπ‘›π‘˜; for l ← 0to l < 3do π‘π‘Ÿπ‘œπ‘π‘’π‘ π‘ π‘–π‘›π‘”π‘‡π‘˜π‘™=π‘π‘Ÿπ‘œπ‘π‘’π‘ π‘ π‘‡π‘–π‘šπ‘’π‘—π‘œπ‘π‘˜π‘œπ‘π‘’π‘Ÿπ‘Žπ‘‘π‘–π‘œπ‘›π‘˜π‘™; end k ← k + 1; end end

ADLN Perpustakaan Universitas Airlangga

job dan mesin pada gen ke-i, startingij merupakan waktu mulai ke-j untuk job pada gen ke-i dan delayij merupakan waktu luang ke-j pada gen ke-i. Prosedur untuk menghitung waktu penyelesaian dan waktu luang dapat dilihat pada Gambar 4.9.

Gambar 4.9 Prosedur untuk Menghitung Completion Time dan Delay Time Setelah terbentuk schedule untuk penghitungan waktu penyelesaian, selanjutnya adalah melakukan pengaktifan schedule dengan menggunakan informasi waktu luang yang telah didapat sebelumnya. Misalkan genes adalah jumlah gen, machinei dan jobi merupakan mesin dan job yang berproses pada gen ke-i, startingij dan completeij merupakan waktu mulai dan selesai ke-j untuk job pada gen ke-i, dan delayij merupakan waktu luang ke-j pada gen ke-i. Prosedur untuk mengaktifkan schedule dapat dilihat pada Gambar 4.10.

Prosedur untuk Menghitung Completion Time dan Delay Time begin i ← 0; j ← 0; timeJob ← 0,𝑛, 3 ; timeMachine ← 0:π‘š, 3 ; delay← (0: genes, 3); while (i < genes ) do for j ← 0to j < 3 do if (π‘‘π‘–π‘šπ‘’π½π‘œπ‘π‘—π‘œπ‘π‘–π‘—<π‘‘π‘–π‘šπ‘’π‘€π‘Žπ‘β„Žπ‘–π‘›π‘’π‘šπ‘Žπ‘β„Žπ‘–π‘›π‘’π‘–π‘—) then π‘ π‘‘π‘Žπ‘Ÿπ‘‘π‘–π‘›π‘”π‘–π‘— =π‘‘π‘–π‘šπ‘’π‘€π‘Žπ‘β„Žπ‘–π‘›π‘’π‘šπ‘Žπ‘β„Žπ‘–π‘›π‘’π‘–π‘—; else π‘ π‘‘π‘Žπ‘Ÿπ‘‘π‘–π‘›π‘”π‘–π‘— =π‘‘π‘–π‘šπ‘’π½π‘œπ‘π‘—π‘œπ‘π‘–π‘—; π‘‘π‘’π‘™π‘Žπ‘¦π‘–π‘— =π‘‘π‘–π‘šπ‘’π½π‘œπ‘π‘—π‘œπ‘π‘–π‘—βˆ’π‘‘π‘–π‘šπ‘’π‘€π‘Žπ‘β„Žπ‘–π‘›π‘’π‘šπ‘Žπ‘β„Žπ‘–π‘›π‘’π‘–π‘—; end π‘‘π‘–π‘šπ‘’π‘€π‘Žπ‘β„Žπ‘–π‘›π‘’π‘šπ‘Žπ‘β„Žπ‘–π‘›π‘’π‘–π‘— = π‘ π‘‘π‘Žπ‘Ÿπ‘‘π‘–π‘›π‘”π‘–π‘—+π‘π‘Ÿπ‘œπ‘π‘’π‘ π‘ π‘–π‘›π‘”π‘‡π‘–π‘— π‘‘π‘–π‘šπ‘’π½π‘œπ‘π‘—π‘œπ‘π‘–π‘—=π‘‘π‘–π‘šπ‘’π‘€π‘Žπ‘β„Žπ‘–π‘›π‘’π‘šπ‘Žπ‘β„Žπ‘–π‘›π‘’π‘–π‘—; end i ← i + 1; end end

43

Gambar 4.10 Prosedur untuk Pengaktifan

Setelah individu yang dibangkitkan sesuai dengan pop_size maka langkah selanjutnya yang dilakukan yaitu mengevaluasi setiap individu.

Langkah II : Evaluasi

Proses evaluasi merupakan proses penghitungan nilai fungsi tujuan yang terdiri dari tiga fungsi yang masing-masing dinyatakan dengan z1, z2, z3 untuk masing-masing kromosom. Fungsi-fungsi tersebut kemudian dinyatakan dengan fungsi fitness (F).

Prosedur untuk Pengaktifan begin

a = (0:genes); c = (0: genes);

for i←0 to i <genes do for j←0 to j< 3 do if ( delayij β‰  0) then ai = ai+1; end if (ai= 3) then delayM = machinei; b = i; break end end for k← (b+1) to k <genes do

if ( machinek= delayM) then if ( operationk= 0) then

for l←0 to l< 3 do

if (delaybl β‰₯ processingTkl) then ck = ck +1; end

if (ck=3) then d = k; break end

end

else if ( operationk > 0) then for ii← 0 to ii <genes do

if ( jobii= jobk && operationii= ( operationkβˆ’1)) then for jj←0 to jj< 3 do

if ( startingbjj - completeiij β‰₯ processingTkjj) thenck=ck +1; end

if (ck =3) then d=k; break end

end end

end reschedule jobd;

end

ADLN Perpustakaan Universitas Airlangga

Prosedur untuk Evaluasi z1

begin

i ← 0; j ← 0; k ← 0; sum ← 0;

for i←0 to i<pop_sizedo

for j←0 to j<n do

menentukan grafik completion time masing-masing job; menentukan grafik duedate masing-masing job;

menentukan daerah pertemuan antara completion time dan duedate; menghitung area pertemuan, misalkan dengan πΆπ‘–π‘—βˆ©π·π‘–π‘—;

menghitung area completion time, misalkan dengan 𝐢𝑖𝑗;

agreementIndexij =C ij∩D ij C ij ;

sum = sum + agreementIndexij ;end

𝑧1𝑖 =sumn ;end end

Misalkan pop_size adalah banyaknya populasi, n adalah banyaknya job, completion time adalah waktu penyelesaian untuk masing-masing job, duedate adalah waktu tenggat untuk masing-masing job, ∩ merupakan irisan dari completion time dengan duedate, agreementIndexij menyatakan nilai agreement indexjob j (j = 0, 1, …., n) dari kromosom ke-i (i = 0, 1, …., pop_size), dan 1 merupakan nilai fungsi tujuan pertama yaitu rata-rata dari agreement index kromosom ke-i. Prosedur evaluasi fungsi z1 dapat dilihat pada Gambar 4.11.

Gambar 4.11 Prosedur untuk Evaluasiz1

Misalkan merupakan nilai fungsi tujuan kedua yaitu minimal dari agreement index kromosom ke-i. Prosedur untuk menentukan nilai fungsi tujuan kedua dapat dilihat pada Gambar 4.12.

Gambar 4.12 Prosedur untuk Evaluasiz

Prosedur untuk Evaluasi z2

begin

for i=0 to i<pop_size do for j=0 to j<ndo

𝑧 𝑖=min( agreementIndexij); end

end end

45

Misalkan completionTimeij menyatakan nilai waktu penyelesaian job j (j = 0, 1, …., n) pada keseluruhan mesin dari kromosom ke-i (i = 0, 1, …., pop_size), dan merupakan nilai fungsi tujuan ketiga yaitu waktu penyelesaian maksimal job-job pada kromosom ke-i. Prosedur untuk menentukan nilai fungsi tujuan ketiga dapat dilihat pada Gambar 4.13.

Gambar 4.13 Prosedur untuk Evaluasi z3

Setelah didapatkan nilai dari ketiga fungsi tujuan untuk masing-masing kromosom, maka selanjutnya ditentukan nilai fitness setiap kromosom. Misalkan dan 1 masing-masing menyatakan nilai fungsi tujuan ke-i (i = 0, 1, 2) yang terendah dan tertingi, degreeMemberkl merupakan derajat kenggotaan fuzzy untuk fungsi tujuan ke-l (l = 0, 1, 2) pada kromosom ke-k (k = 0, 1, .., pop_size), dan fa

merupakan nilai fitness dari kromosom ke-a (a = 0, 1, .., pop_size). Prosedur untuk menentukan nilai fitness dapat dilihat pada Gambar 4.14.

Gambar 4.14 Prosedur untuk Menghitung Fitness

Prosedur untuk Evaluasi z3

begin

for i = 0 to i < pop_size do

for j=0 to j<n do 𝑧 𝑖=max(completionTimeij); end

end end

Prosedur untuk Menghitung Fitness begin

for i=0 to i<3 do

for j=0 to j< pop_size do 𝑧𝑖=min (𝑧𝑖𝑗); 𝑧𝑖1=max (𝑧𝑖𝑗); end end

for k=0 to k< pop_size do

for l=0 to l<3 do calculate degreeMemberkl ; end

end

for a=0 to a< pop_size do

for b=0 to b<3 do fa = min(degreeMemberab); end

end end

ADLN Perpustakaan Universitas Airlangga

Langkah selanjutnya yaitu operasi genetik untuk memperoleh keturunan atau anak. Prosedur yang dilakukan untuk melakukan operasi genetik dapat dilihat pada Gambar 4.15. Misalkan P(t) dan C(t) masing-masing merupakan induk dan anak pada proses operasi genetik pada generasi ke-t.

Gambar 4.15 Prosedur Operasi Genetik untuk Mendapatkan

Langkah III : Seleksi

Tahapan seleksi merupakan tahapan untuk menyeleksi atau menentukan calon induk pada proses crossover dan mutasi pada kromosom-kromosom dalam satu populasi. Seleksi yang digunakan adalah seleksi tournament. Prosedur seleksi dapat dilihat pada Gambar 4.16.

Misalkan tour menyatakan banyanknya kromosom random yang akan diturnamenkan, rij (i = 0, 1, .., pop_size dan j = 0, 1, .., tour) merupakan angka random yang membangkitkan kromosom ke-rij untuk diturnamenkan, adalah nilai fitness dari kromosom ke-ril (l = 0, 1, .., tour), candidatei adalah calon induk ke-i , dan merupakan kromosom ke-ai atau kromosom terpilih.

Prosedur Operasi Genetik P(t) untuk Mendapatkan C(t)

begin

seleksi turnamen();

partial schedule exchange crossover(); swap mutation ();

47

Gambar 4.16 Prosedur untuk Seleksi Turnamen

Proses tournament diatas dilakukan sebanyak dua kali untuk memperoleh calon induk pada proses crossover dan mutasi. Setelah proses tersebut selesai maka langkah selanjutnya yang dilakukan yaitu seleksi induk untuk proses crossover dan mutasi.

1. Seleksi Crossover

Tahapan ini dilakukan untuk mendapatkan induk yang akan di crossover dari calon induk yang telah didapat dari hasil seleksi. Proses ini dilakukan dengan cara mengenerate bilangan random dengan interval [0,1] yang dinyatakan dengan rc dan c = 1, 2, …, pop_size. Pemilihan induk yang akan di crossover harus memenuhi ketentuan sebagai berikut :

Jika rc < pc, maka kromosom ke-c tersebut akan terpilih menjadi induk yang akan mengalami crossover. Prosedur untuk seleksi crossover dapat dilihat pada Gambar 4.17. Misalkan rc adalah bilangan random ke-c, Pc adalah probabilitas crossover, dan vc adalah kromosom ke-c.

Prosedur untuk Seleksi Turnamen begin

maks = (0: pop_size);

a = (0: pop_size); for i=0 to i< pop_size do

for j=0 to j< tourdo rij = random (pop_size-1); end for l=0 to l < tour do if (maksl<π‘“π‘Ÿπ‘–π‘™)then maksl=π‘“π‘Ÿπ‘–π‘™; ai= rij ; end candidatei = π‘£π‘Žπ‘–; end end

ADLN Perpustakaan Universitas Airlangga

Gambar 4.17 Prosedur untuk SeleksiCrossover 2. Seleksi Mutasi

Seleksi induk mutasi dilakukan seperti pada seleksi crossover. Misalkan bilangan random yang digenerate dinyatakan dengan rq dan q = 1, 2, …, pop_size. Pemilihan induk yang akan di mutasi harus memenuhi ketentuan sebagai berikut :

Jika rq < pm, maka kromosom ke-q tersebut akan terpilih menjadi induk yang akan mengalami mutasi. Prosedur untuk seleksi mutasidapat dilihat pada Gambar 4.18. Misal rq adalah random ke-q, Pm adalah probabilitas mutasi, dan vq adalah kromosom ke-q.

Gambar 4.18 Prosedur untuk SeleksiMutasi

Dari proses diatas telah diperoleh induk yang akan mengalami crossover dan langkah selanjutnya yang dilakukan yaitu mengcrossover induk tersebut.

Prosedur untuk Seleksi Crossover begin

c ← 0; crossover ← 0;

while (c<pop_size) do rcοƒŸ random [0,1];

if (rc<Pc) then

pilih vcsebagai induk crossover;

crossover ← crossover + 1;

end c ← c + 1;

end end

Prosedur untuk Seleksi Mutasi begin

q ← 0; mutation ← 0;

while (q < pop_size) do

rqοƒŸ random [0,1]; if (rq<Pm) then

pilih vqsebagai induk mutation;

mutation ← mutation + 1;

end q ← q + 1;

end end

49

Langkah IV : Crossover

Setelah diperoleh induk yang akan di crossover, proses selanjutnya yang dilakukan adalah mengcrossover induk-induk tersebut menggunakan partial schedule exchange crossover. Jika dari seleksi crossover dihasilkan induk crossover yang jumlahnya gasal, maka induk pada urutan terakhir dibuang sehingga jumlah induk crossover menjadi genap. Selanjutnya induk tersebut akan mengalami crossover dengan cara mengambil dua induk yang akan dicrossover untuk menghasilkan dua anak. Proses tersebut dilakukan sampai semua induk mengalami crossover.

Jika pada proses seleksi crossover tidak diperoleh induk crossover maka proses crossover tidak dilakukan. Prosedur crossover menggunakan partial schedule exchange crossover dapat dilihat pada Gambar 4.19.

Gambar 4.19 Prosedur untuk Partial Schedule Exchange Crossover

Prosedur untuk menentukan partial schedule dari induk ke-0 dapat dilihat pada Gambar 4.20. Misalkan genes menyatakan jumlah gen pada satu kromosom, pos1 adalah posisi gen yang dibangkitkan secara acak, n1 adalah banyaknya partial schedule 0, parentC0j merupakan gen ke-j dari induk crossover ke-0, dan partial0ii merupakan partial schedule 0 ke-ii.

Prosedur untuk Partial Schedule Exchange Crossover begin

menentukan partial schedule dari parent 0(); menentukan partial schedule dari parent1(); menentukan exceeded dan missed genes (); menentukan offspring ();

end

ADLN Perpustakaan Universitas Airlangga

Gambar 4.20 Prosedur untuk Menetukan Partial Schedule dari Parent 0 Sedangkan prosedur untuk menentukan partial schedule dari induk ke-1 dapat dilihat pada Gambar 4.21. Misalkan genes menyatakan jumlah gen pada satu kromosom, pos1 adalah posisi gen yang diperoleh pada induk crossover pertama, pos2 adalah posisi gen yang bersesuaian dengan pos1, 2 adalah banyaknya partial schedule 1, parentC1i merupakan gen ke-i dari induk crossover ke-1, dan partial1jj merupakan partial schedule 1 ke-jj.

Gambar 4.21 Prosedur untuk Menetukan Partial Schedule dari Parent 1

Prosedur untuk Menetukan Partial Schedule dari Parent 0 begin

n1 ← 0;

pos1= random (genes-1);

for j ← (pos1 + 1) to j <genesdo n1++;

if (π‘π‘Žπ‘Ÿπ‘’π‘›π‘‘πΆ0𝑗=π‘π‘Žπ‘Ÿπ‘’π‘›π‘‘πΆ0π‘π‘œπ‘ 1) then break end

end ii ← 0;

for k ← pos1 to k ≀ (pos1 + n1) do

partial0ii = parentC0k; ii ← ii + 1;

end end

Prosedur untuk Menetukan Partial Schedule dari Parent 1 begin for i ← 0to i <genesdo if(π‘π‘Žπ‘Ÿπ‘’π‘›π‘‘πΆ1𝑖=π‘π‘Žπ‘Ÿπ‘’π‘›π‘‘πΆ0π‘π‘œπ‘ 1) then pos2 = i; break end end n2 ← 0;

for j ←pos2 to j <genes don2++;

if(π‘π‘Žπ‘Ÿπ‘’π‘›π‘‘πΆ1𝑗=π‘π‘Žπ‘Ÿπ‘’π‘›π‘‘πΆ1π‘π‘œπ‘  ) then break

end end

jj ← 0;

for k ← pos2 to k ≀(pos2 + n2) do

partial1jj = parentC1k; jj ← jj + 1;

end end

51

Setelah diperoleh masing-masing partial schedule, maka langkah selanjutnya adalah menukarkan partial schedule1 ke calon anak ke-0 dan partial schedule0 ke calon anak ke-1 dan menentukan gen kurang dan berlebih pada masing-masing calon anak. Prosedur untuk menentukan gen kurang dan lebih dapat dilihat pada Gambar 4.22. Misalkan ii dan jj merupakan jumlah partial schedule 0 dan jumlah partial schedule 1, partial0i dan partial1j merupakan partial schedule 0 ke-i dan partial schedule 1 ke-j, missed0i dan missed1i

merupakan gen kurang ke-i pada calon anak 0 dan calon anak 1, dan exceed0i dan exceed1i merupakan gen lebih ke-i pada calon anak 0 dan calon anak 1.

Gambar 4.22 Prosedur untuk Menentukan Exceeded dan Missed Genes Prosedur untuk Menentukan Exceeded dan Missed Genes

begin

for i ← 0 to i <𝑖𝑖do

for j ← 0to j <𝑗𝑗do

if (partial0i = partial1j) then

partial0i = partial1j= -1; break end end n3= 0; n4 = 0; for k ← 0to k <𝑖𝑖do if (partial0kβ‰  -1) then n3++; end for l ← 0to l <𝑖𝑖do if (partial1lβ‰  -1) then n4++; end i2 = 0; if (n3!=0) then for j ← 0to j <𝑖𝑖do

if (partial0j≠ -1) then missed0i2 = exceed1i2 = partial0j; i2++; end

i3 = 0;

if (n3!=0) then

for k ← 0to k <𝑗𝑗do

if (partial1k≠ -1) then missed1i3 = exceed0i3 = partial1k ; i3++; end

end

ADLN Perpustakaan Universitas Airlangga

Langkah selanjutnya yaitu membentuk offspring crossover. Prosedur pembentukan offspring dapat dilihat pada Gambar 4.23. Misalkan offspringC0 dan offspringC1 merupakan anak hasil crossover ke-0 dan anak hasil crossover ke-1.

Gambar 4.23 Prosedur untuk Menentukan Offspring

Setelah melakukan proses crossover, langkah selanjutnya yang dilakukan yaitu proses mutasi induk yang telah diperoleh pada proses seleksi mutasi.

Langkah V : Mutasi

Langkah selanjutnya yaitu melakukan proses mutasi pada induk yang terpilih pada seleksi mutasi. Mutasi merupakan proses perubahan sifat kromosom secara acak sehingga dihasilkan struktur kromosom yang baru. Jika dari seleksi mutasi tidak diperoleh induk mutasi maka proses mutasi tidak dilakukan. Prosedur mutasi menggunakan swap mutation dapat dilihat pada Gambar 4.24.

Misalkan pos1 dan pos2 adalah dua posisi gen yang dibangkitkan secara acak, mutation adalah banyak kromosom yang akan mengalami mutasi, parentm merupakan induk yang akan di mutasi, offspringmipos1 dan offspringmipos2 masing-masing merupakan gen pada posisi pos1 dan pos2 individu atau anak ke-i.

Prosedur untuk Menentukan Offspring begin

for i ← 0 to i <genesdo

offspringC0 = parent0i ;

offspringC1 = parent1i ; end

hapus partial schedule 0 dari offspringC0; tambahkan partial schedule 1 ke offspringC0; hapus partial schedule 1 dari offspringC1; tambahkan partial schedule 0 ke offspringC1; hapus exceed gen pada offspringC0dan offspringC1; tambahkan missed gen pada offspringC0dan offspringC1; end

53

Gambar 4.24 Prosedur untuk Swap Mutation

Setelah individu baru hasil proses crossover dan mutasi diperoleh, maka dibentuk populasi baru yang akan diproses pada iterasi selanjuntnya.

Langkah VI : Pembentukan Populasi Baru

Untuk membentuk populasi baru, langkah awalnya yaitu mengumpulkan populasi awal, anak hasil crossover dan anak hasil mutasi. Kemudian kromosom tersebut diurutkan sesuai fitnessnya. Kromosom yang terbaik dipilih sebanyak pop_size untuk membentuk populasi baru. Sedangkan kromosom yang tidak terpilih akan dikeluarkan dari populasi. Prosedur untuk membentuk populasi baru dapat dilihat dalam Gambar 4.25.

Gambar 4.25 Prosedur untuk Membentuk Populasi Baru

Prosedur untuk Swap Mutation begin

i ← 0;

pos1 = random (genes-1);

pos2 = random (genes-1);

while (pos1= pos2) do pos2 = random (genes-1);

end

offspringm ← parentm; while (i<mutation ) do

temp = offspringmipos1;

offspringmipos1 = offspringmipos2;

offspringmipos2 = temp;

i ← i + 1;

end end

Prosedur untuk Membentuk Populasi Baru begin

menggabungkan kromosom; mengurutkan kromosom;

mengambil kromosom terbaik sebanyak pop_size; end

ADLN Perpustakaan Universitas Airlangga

Dalam pembentukan populasi baru, langkah pertama yang dilakukan yaitu menggabungkan individu atau kromosom awal dan anak hasil crossover dan mutasi. Misalkan sumOffS merupakan jumlah offspring hasil crossover dan mutasi, sumChrom merupakan jumlah kromosom dari populasi awal dan offspring, mutation dan crossover merupakan banyanknya offspring hasil crossover dan mutasi, offspringci dan offspringmj masing-masing menyatakan offspring hasil crossover ke-i dan mutasi ke-j, chromk merupakan kromosom ke-k dari populasi awal dan nChromk merupakan kromosom ke-k dari populasi gabungan. Prosedur penggabungan populasi awal dengan offspring hasil crossover dan mutasi dapat dilihat pada Gambar 4.26.

Gambar 4.26 Prosedur untuk Menggabungkan Kromosom

Langkah kedua yang dilakukan yaitu mengurutkan seluruh kromosom gabungan berdasarkan nilai fitness masing-masing kromosom. Prosedur pengurutan kromosom dapat dilihat pada Gambar 4.27. Misalkan fitnessi dan fitnessj adalah nilai fitness untuk kromosom ke-i dan ke-j.

Prosedur untuk Menggabungkan Kromosom begin

j ← 0;k ← 0;l ← 0;

sumOffS ←mutation + crossover;

sumChrom ← pop_size +sumOffS;

for i ← 0to i <sumOffSdo

if (i<crossover) then sumO = offspringci;

else sumOi= offspringmj ;

j ← j + 1;

end end

for k ← 0 to k < sumChromdo

if (k<pop_size) then nChromk = chromk;

else nChromk = sumOl;

l ← l + 1;

end end end

55

Gambar 4.27 Prosedur untuk Mengurutkan Kromosom

Setelah diurutkan, langkah terakhir yaitu kromosom-kromosom gabungan tersebut dipilih yang terbaik sebanyak pop_size untuk membentuk populasi baru. Prosedur pemilihan kromosom untuk populasi baru dapat dilihat pada Gambar 4.28. Misalkan newChromi adalah kromosom ke-i pada populasi baru.

Gambar 4.28 Prosedur untuk Mengambil Kromosom Terbaik

Setelah diperoleh individu pada populasi baru, maka selanjutnya populasi baru tersebut akan diuji.

Prosedur untuk Mengurutkan Kromosom begin for i← 0to i <(sumChrom-1) do for j ←i + 1 to j < sumChrom do if ( fitnessi < fitnessj) do temp = fitnessi; fitnessi = fitnessj; fitnessj = temp; temp = nChromi; nChromi = nChromj; nChromj = temp; end end end

Prosedur untuk Mengambil Kromosom Terbaik begin

for i← 0to i <pop_size do

newChromi = nChromi ; end

end

ADLN Perpustakaan Universitas Airlangga

Langkah VII : Menguji Populasi Baru

Pada langkah ini dilakukan proses pengujian untuk menguji populasi baru dengan kriteria yang telah ditentukan yaitu max_gen. Jika kriteria tersebut dipenuhi, maka proses iterasi berhenti dan diperoleh solusi terbaik dari populasi terakhir tersebut. Sebaliknya, jika tidak dipenuhi, maka kembali ke Langkah III, dan populasi baru pada Langkah VI akan dijadikan populasi awal pada generasi selanjutnya. Prosedur pengujian dapat dilihat pada Gambar 4.29.

Dokumen terkait