87
Indlainnya = [Indlainnya Indterbaik+1:uktour]; end
if rand probtour,
Indterpilih = ItempIndterbaik; else
Indterpilih = ItempIndlainnya1+fixranduktour-1; end
Variabel yang digunakan dalam TourSelection.m yaitu ukpop banyaknya individu dalam populasi, linearfitness merupakan hasil dari
linearfitness.m, uktour tournament size, dan probtour probabilitas turnamen. Itemp merupakan indeks dari individu terpilih dan Ftemp
merupakan nilai fitness dari individu yang terpilih tersebut. Individu terbaik dipilih dari individu terpilih yang memiliki nilai fitness terbesar.
4. Pindah Silang dengan Order Crossover
Operator pindah silang dari populasi awal yang sudah terbentuk diimplementasikan dalam fungsi CVRPTWpindahsilang.m berikut ini.
function anak = CVRPTWpindahsilangbapak,ibu,jumgen
cp1=1+fixrandjumgen-1; cp2=1+fixrandjumgen-1;
while cp2==cp1,
cp2=1+fixrandjumgen-1; end
if cp1cp2,
cps=cp1; cpd=cp2;
else cps=cp2;
cpd=cp1; end
anak1,cps+1:cpd=ibucps+1:cpd; anak2,cps+1:cpd=bapakcps+1:cpd;
sisagenbapak=[]; sisagenibu=[];
for ii=1:jumgen,
if ~ismemberbapakii,anak1,:,
88
sisagenbapak=[sisagenbapak bapakii]; end
if ~ismemberibuii,anak2,:,
sisagenibu=[sisagenibu ibuii]; end
end anak1,cpd+1:jumgen=sisagenbapak1:jumgen-cpd;
anak1,1:cps=sisagenbapak1+jumgen-cpd:lengthsisagenbapak; anak2,cpd+1:jumgen=sisagenibu1:jumgen-cpd;
anak2,1:cps=sisagenibu1+jumgen-cpd:lengthsisagenibu;
Variabel yang digunakan dalam fungsi CVRPTWpindahsilang.m adalah bapak induk pertama yang terpilih, ibu induk kedua yang terpilih,
dan jumgen jumlah gen. Pertama-tama 2 buah bilangan dibangkitkan secara random untuk menentukan titik potong kedua induk yang telah terpilih.
Kemudian dua kromosom anak mendapatkan gen-gen dari kromosom bapak dan ibu. Posisi-posisi gen yang masih kosong pada anak pertama diisi dengan
gen dari bapak yang belum ada pada anak pertama, dan anak kedua diisi dengan gen dari ibu yang belum ada pada anak kedua. Hasil dari tahap ini
yaitu dua kromosom baru yang membawa sifat dari induknya.
5. Mutasi dengan Swapping Mutation
Operator mutasi dari populasi awal yang sudah terbentuk diimplementasikan dalam perintah CVRPTWmutasi.m berikut ini.
function mutkrom = CVRPTWmutasikromosom,jumgen,pmutasi
mutkrom=kromosom; for
ii=1:jumgen, if
randpmutasi, TM2=1+fixrandjumgen;
while TM2==ii,
TM2=1+fixrandjumgen; end
tempopulasi=mutkromii; mutkromii=mutkromTM2;
mutkromTM2=tempopulasi; end
89
end
Variabel dari fungsi CVRPTWmutasi.m diatas adalah kromosom anak hasil dari crossover, jumgen jumlah gen, serta pmutasi probabilitas
mutasi. Pertama-tama yang dilakukan yaitu membangkitkan bilangan randomdalam interval [0,1. Jika bilangan random yang dibangkitkan kurang
dari pmutasi maka akan ditentukan posisi gen dalam kromosom yang akan ditukar. Kemudian menukar nilai gen yang terpilih dalam kromosom sehingga
diperoleh kromosom baru hasil dari proses mutasi mutkrom.
6. Program Utama