83
84 Lampiran 1
Matriks jarak tempuh awal dan tujuan distribusi surat kabar Kedaulatan Rakyat di wilayah Kabupaten Sleman (satuan km)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0 0 11.9 8.2 11.6 5.6 11.2 21.2 7.6 10.5 10.8 7.9 25.4 7.4 10.5 8.3 17 15.3 20.8 8.8 22.1 15.9 1 11.9 0 3.4 6.8 1.5 5.9 15.8 3.9 6.2 9.7 3 22.4 2.6 8.6 7.2 11.6 9.3 19.5 6.5 16.6 10.6 2 8.2 3.4 0 5.9 5.5 6.8 19.4 6.3 5.3 6.3 9.1 26 3.6 5.3 3.8 15.2 11.8 20.4 3.1 18 11.5 3 11.6 6.8 5.9 0 6.4 1.6 17.2 7.3 1.7 5.7 8.2 25 4.4 2.5 3.3 14.2 8.3 14.6 4 12.2 5.7 4 5.6 1.5 5.5 6.4 0 5.8 15.5 1.1 6.1 9.6 5.3 25.9 2.5 8.5 7.1 11.1 8.5 19.4 6.4 15.9 10.5 5 11.2 5.9 6.8 1.6 5.8 0 16.8 7.6 2.4 7 8.4 25.3 5.3 3.7 4.2 14.5 8.6 16.2 4.9 13.8 7.3 6 21.2 15.8 19.4 17.2 15.5 16.8 0 14.1 16 22.3 10.3 12.2 16 19.2 18.4 4.3 8.2 13.2 18.1 7.7 12.8 7 7.6 3.9 6.3 7.3 1.1 7.6 14.1 0 6.3 9.8 2.3 20.6 2.7 8.7 7.3 9.8 6.8 19.6 6.6 14 9.2 8 10.5 6.2 5.3 1.7 6.1 2.4 16 6.3 0 5.9 8.3 25.1 4.4 2.8 3.2 14.3 8.4 15.2 4 12.8 6.3 9 10.8 9.7 6.3 5.7 9.6 7 22.3 9.8 5.9 0 13.4 31.7 6.8 4.1 3.3 19.4 13.5 19.8 4.7 17.4 10.9 10 7.9 3 9.1 8.2 5.3 8.4 10.3 2.3 8.3 13.4 0 16.9 5.7 10.7 8.6 6.1 6 15.9 7.8 10.1 7 11 25.4 22.4 26 25 25.9 25.3 12.2 20.6 25.1 31.7 16.9 0 22.6 27.6 25.5 11.3 17.1 22.7 24.7 17.2 22.3 12 7.4 2.6 3.6 4.4 2.5 5.3 16 2.7 4.4 6.8 5.7 22.6 0 6.2 4.6 11.8 8.4 18 4 15.6 9.1 13 10.5 8.6 5.3 2.5 8.5 3.7 19.2 8.7 2.8 4.1 10.7 27.6 6.2 0 4.1 15.4 9.4 15.7 4.8 13.3 6.8 14 8.3 7.2 3.8 3.3 7.1 4.2 18.4 7.3 3.2 3.3 8.6 25.5 4.6 4.1 0 15.7 9.8 17.9 2.1 15.5 9 15 17 11.6 15.2 14.2 11.1 14.5 4.3 9.8 14.3 19.4 6.1 11.3 11.8 15.4 15.7 0 6 12.3 13.8 6.8 10.8 16 15.3 9.3 11.8 8.3 8.5 8.6 8.2 6.8 8.4 13.5 6 17.1 8.4 9.4 9.8 6 0 14.4 10.5 7.5 5.9 17 20.8 19.5 20.4 14.6 19.4 16.2 13.2 19.6 15.2 19.8 15.9 22.7 18 15.7 17.9 12.3 14.4 0 18.1 7.7 8.3 18 8.8 6.5 3.1 4 6.4 4.9 18.1 6.6 4 4.7 7.8 24.7 4 4.8 2.1 13.8 10.5 18.1 0 16.3 9.8 19 22.1 16.6 18 12.2 15.9 13.8 7.7 14 12.8 17.4 10.1 17.2 15.6 13.3 15.5 6.8 7.5 7.7 16.3 0 7.6 20 15.9 10.6 11.5 5.7 10.5 7.3 12.8 9.2 6.3 10.9 7 22.3 9.1 6.8 9 10.8 5.9 8.3 9.8 7.6 0
85 Lampiran 2
Matriks waktu tempuh asal dan tujuan surat kabar Kedaulatan Rakyat di wilayah Kabupaten Sleman (satuan menit)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0 0 9 6 9 4 8 16 6 8 8 6 19 6 8 6 13 11 19 7 17 12 1 9 0 3 5 1 4 12 3 5 7 2 17 2 6 5 9 7 15 5 12 8 2 6 3 0 4 4 5 15 5 4 5 7 20 3 4 3 11 9 15 2 14 9 3 9 5 4 0 5 1 13 5 1 4 6 19 3 2 2 11 6 11 3 9 4 4 4 1 4 5 0 4 12 1 5 7 4 19 2 6 5 8 6 15 5 12 8 5 8 4 5 1 4 0 13 6 2 5 6 19 4 3 3 11 6 12 4 10 5 6 16 12 15 13 12 13 0 11 12 17 8 9 12 14 14 3 6 10 14 6 10 7 6 3 5 5 1 6 11 0 5 7 2 15 2 7 5 7 5 15 5 11 7 8 8 5 4 1 5 2 12 5 0 4 6 19 3 2 2 11 6 11 3 10 5 9 8 7 5 4 7 5 17 7 4 0 10 24 5 3 2 15 10 15 4 13 8 10 6 2 7 6 4 6 8 2 6 10 0 13 4 8 6 5 5 12 6 8 5 11 19 17 20 19 19 19 9 15 19 24 13 0 17 21 19 8 13 17 19 13 17 12 6 2 3 3 2 4 12 2 3 5 4 17 0 5 3 9 6 14 3 12 7 13 8 6 4 2 6 3 14 7 2 3 8 21 5 0 3 12 7 12 4 10 5 14 6 5 3 2 5 3 14 5 2 2 6 19 3 3 0 12 7 13 2 12 7 15 13 9 11 11 8 11 3 7 11 15 5 8 9 12 12 0 5 9 10 5 8 16 11 7 9 6 6 6 6 5 6 10 5 13 6 7 7 5 0 11 8 6 4 17 19 15 15 11 15 12 10 15 11 15 12 17 14 12 13 9 11 0 14 6 6 18 7 5 2 3 5 4 14 5 3 4 6 19 3 4 2 10 8 14 0 12 7 19 17 12 14 9 12 10 6 11 10 13 8 13 12 10 12 5 6 6 12 0 6 20 12 8 9 4 8 5 10 7 5 8 5 17 7 5 7 8 4 6 7 6 0
86 Lampiran 3
Data permintaan harian setiap agen di wilayah Kabupaten Sleman
KODE ALAMAT AGEN EKS Kg(1Kg=9EKS)
0 DEPOT (Jalan Solo Km 11, Kalitirto, DIY) 0 0
1 Jalan Besi KM 14 (Depan Kampus UII) 39 4,3
2 Palem Kecut CT 10/41 Sleman 113 12,6
3 Jalan Magelang Km 5,2 191 21,2
4 Jalan Tluki I 169 CONCAT 573 63,7
5 Jombor Kidul, Sinduadi, Mlati, Sleman 1111 123,4
6 Karangnggeneng, Pakem, Sleman 90 10
7 Jalan Gurameh Raya, Minomartani (Warnet Luna) 140 15,6 8 Karanganyar, Sinduadi, Mlati (Yogya Utara) 403 44,8
9 Jalan Bhayangkara Km 13 Morangan 16 1,8
10 Pasar Gentan, Ngaglik, Sleman 319 35,4
11 Hargo Binangun, Pakem 595 66,1
12 Jalan Gejayan Gang Guru Mrican 61 6,8
13 Jalan Merapi Km 4 Beran 611 67,9
14 Perempatan Tugu Yogya 424 47,1
15 Rumah Sakit Panti Nugroho 220 24,4
16 Jalan Tegalrejo, Sardonoharjo, Sleman 179 19,9
17 Lumbungrejo, Tempel, Sleman 440 48,9
18 Pasar Terban 132 14,7
19 Donokerto, Turi, Sleman 178 19,8
20 Wadas, Tridadi, Sleman 62 6,9
87 Lampiran 4
Prosedur algoritma genetika menggunakan software Matlab dalam
penyelesaian Capacitated Vehicle Routing Problem (CVRP) untuk distribusi surat
kabar Kedaulatan Rakyat di Kabupaten Sleman. Prosedur ini dimodifikasi dari
Suyanto (2005: 86).
1. Membangkitkan Populasi Awal
Membangkitkan populasi awal diimplementasikan menggunakan
baris-baris perintah pada fungsi CVRPinisialisasipopulasi.m berikut ini. function Populasi = CVRPInisialisasiPopulasi(ukpop,jumgen) for ii=1:ukpop
[X,Y] = sort(rand(1,jumgen)); Populasi(ii,:) = Y;
end
perintah rand (1, jumgen) menyatakan pembangkitan matriks berukuran 1 x
jumgen yang berisi bilangan random dalam interval [0,1). Pada perintah [X, Y] =
sort (rand(1, jumgen)), X menyatakan bilangan-bilangan random dalam interval
[0,1) hasil pengurutan dari kecil ke besar (ascending). Sedangkan Y merupakan
indeks dari bilangan-bilangan yang dibangkitkan random. Indeks Y merupakan
nomer urut pelanggan surat kabar kedaulatan rakyat yang dibangkitkan. Iterasi di
atas dilakukan sebanyak ukpop (banyaknya individu dalam populasi), sehingga
88 2. Menghitung Nilai Fitness
Perhitungan nilai fitness dari populasi awal yang sudah terbentuk
diimplementasikan dalam perintah pada fungsi fitnesscvrp.m berikut ini. function fitness = fitnesscvrp(kromosom,jumgen,JarakAgen,jd) jalur=jd(kromosom(1))+jd(kromosom(jumgen));
for ii=1:jumgen-1
jalur=jalur+JarakAgen(kromosom(ii),kromosom(ii+1)); end
fitness=1/jalur;
Variabel pada fungsi fitnesscvrp.m adalah kromosom (individu dari
populasi), jumgen (jumlah gen), jd (jarak depot dengan agen), dan JarakAgen
(jarak antar lokasi agen). Sedangkan nilai fitness suatu individu dinyatakan dalam
1/jalur. function LFR = linearfitnessranking(ukpop,fitness,maxF,minF) [s,h] = sort(fitness); for rr=1:ukpop, LFR(h(ukpop-rr+1))=maxF-(maxF-minF)*((rr-1)/(ukpop-1)); End
Variabel pada fungsi linearfitnessranking.m yaitu ukpop (banyaknya
individu dalam populasi), fitness (nilai fitness individu dalam populasi), maxF
(nilai fitness tertinggi pada populasi), dan minF (nilai fitness terendah dalam
populasi). Mula-mula urutkan nilai fitness dari yang terkecil sampai yang terbesar,
kemudian simpan nilai fitness yang sudah terurut pada sebuah variabel s dan
indeks dari fitness yang menyatakan nomer urut kromosom pada suatu populasi
89
konvergen pada optimum lokal karena perbedaan nilai-nilai fitness yang terlalu
kecil pada semua individu dalam populasi.
3. Roulette Wheel Selection
Operator seleksi dari populasi awal yang sudah terbentuk
diimplementasikan dalam perintah pada fungsi RouletteWheel.m berikut ini. function p = RouletteWheel(ukpop,linearfitness); jumfitness=sum(linearfitness); kumulatiffitness = 0; RN = rand; ii=1; while ii<=ukpop, kumulatiffitness = kumulatiffitness+linearfitness(ii); if (kumulatiffitness/jumfitness)>RN, p=ii; break; end ii=ii+1; end
variabel pada fungsi RouletteWheel.m adalah ukpop (banyaknya individu
dalam populasi) dan linearfitness (hasil dari fungsi linearfitnessranking.m).
sedangkan jumfitness = sum (linearfitness) merupakan jumlah keseluruhan nilai
fitness dalam populasi. kumulatiffitness merupakan nilai fitness kumulatif dari individu. Jika kumulatif fitness dibagi jumlah fitness lebih dari bilangan random
yang dibangkitkan pada interval [0,1) maka iterasi berhenti, sehingga didapatkan
90 4. Pindah Silang (order crossover)
Operator pindah silang dari populasi awal yang sudah terbentuk
diimplementasikan dalam perintah pada fungsi CVRPpindahsilang.m berikut ini. function anak = CVRPpindahsilang(bapak,ibu,jumgen)
cp1=1+fix(rand*(jumgen-1)); cp2=1+fix(rand*(jumgen-1)); while cp2==cp1, cp2=1+fix(rand*(jumgen-1)); end if cp1<cp2, cps=cp1; cpd=cp2; else cps=cp2; cpd=cp1; end anak(1,cps+1:cpd)=ibu(cps+1:cpd); anak(2,cps+1:cpd)=bapak(cps+1:cpd); sisagenbapak=[]; sisagenibu=[]; for ii=1:jumgen, if ~ismember(bapak(ii),anak(1,:)), sisagenbapak=[sisagenbapak bapak(ii)]; end if ~ismember(ibu(ii),anak(2,:)), sisagenibu=[sisagenibu ibu(ii)]; end end
91
anak(1,cpd+1:jumgen)=sisagenbapak(1:jumgen-cpd);
anak(1,1:cps)=sisagenbapak(1+jumgen-cpd:length(sisagenbapak)); anak(2,cpd+1:jumgen)=sisagenibu(1:jumgen-cpd);
anak(2,1:cps)=sisagenibu(1+jumgen-cpd:length(sisagenibu));
variabel pada fungsi CVRPpindahsilang.m adalah bapak (induk pertama
yang terpilih), ibu (induk kedua yang terpilih) dan jumgen (jumlah gen). Pertama
2 buah bilangan dibangkitkan secara acak untuk menentukan titik potong kedua
induk. 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 fungsi ini adalah
dua kromosom baru yang membawa sifat dari induknya.
5. Mutasi dengan Swapping Mutation
Operator pindah silang dari populasi awal yang sudah terbentuk
diimplementasikan dalam perintah pada fungsi CVRPmutasi.m berikut ini. function mutkrom = CVRPmutasi(kromosom,jumgen,pmutasi) mutkrom=kromosom; for ii=1:jumgen, if rand<pmutasi, TM2=1+fix(rand*jumgen); while TM2==ii, TM2=1+fix(rand*jumgen); end tempopulasi=mutkrom(ii); mutkrom(ii)=mutkrom(TM2); mutkrom(TM2)=tempopulasi;
92
end end
variabel pada fungsi CVRPmutasi.m diatas adalah adalah kromosom
(anak hasil pindah silang), jumgen (jumlah gen) dan pmutasi (probabilitas
mutasi). Pertama membangkitkan bilangan random dalam 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 didapatkan kromosom baru hasil mutasi
(mutkrom).
6. Program Utama
Sebagai program utama, fungsi cobaCVRP.m memanggil semua
fungsi-fungsi diatas. Pada program utama berikut, memasukkan variabel-variabel jd
(jarak depot dengan agen), kapasitas (permintaan dari setiap agen), JarakAgen
(jarak tempuh antara agen dengan agen lainnya), jumgen (jumlah gen), s
(banyaknya kendaraan), q (kapasitas kendaraan), ukpop (ukuran populasi, yaitu
banyaknya individu dalam populasi), psilang (probabilitas pindah silang), pmutasi
(probabilitas mutasi), maxG (jumlah generasi). Program di bawah ini juga
ditambahkan perintah untuk menampilkan grafik. Pada akhir program variabel
jalur terbaik menyatakan rute optimal yang didapatkan. clear all
jd = [11.9 8.2 11.6 5.6 11.2 21.2 7.6 10.5 10.8 7.9 25.4 7.4 10.5 8.3 17 15.3 20.8 8.8 22.1 15.9];
kapasitas = [0 4.3 12.6 21.2 63.7 123.4 10 15.6 44.8 1.8 35.4 66.1 6.8 67.9 47.1 24.4 19.9 48.9 14.7 19.8 6.9];
93 JarakAgen = [0 3.4 6.8 1.5 5.9 15.8 3.9 6.2 9.7 3 22.4 2.6 8.6 7.2 11.6 9.3 19.5 6.5 16.6 10.6; 3.4 0 5.9 5.5 6.8 19.4 6.3 5.3 6.3 9.1 26 3.6 5.3 3.8 15.2 11.8 20.4 3.1 18 11.5; 6.8 5.9 0 6.4 1.6 17.2 7.3 1.7 5.7 8.2 25 4.4 2.5 3.3 14.2 8.3 14.6 4 12.2 5.7; 1.5 5.5 6.4 0 5.8 15.5 1.1 6.1 9.6 5.3 25.9 2.5 8.5 7.1 11.1 8.5 19.4 6.4 15.9 10.5; 5.9 6.8 1.6 5.8 0 16.8 7.6 2.4 7 8.4 25.3 5.3 3.7 4.2 14.5 8.6 16.2 4.9 13.8 7.3; 15.8 19.4 17.2 15.5 16.8 0 14.1 16 22.3 10.3 12.2 16 19.2 18.4 4.3 8.2 13.2 18.1 7.7 12.8; 3.9 6.3 7.3 1.1 7.6 14.1 0 6.3 9.8 2.3 20.6 2.7 8.7 7.3 9.8 6.8 19.6 6.6 14 9.2; 6.2 5.3 1.7 6.1 2.4 16 6.3 0 5.9 8.3 25.1 4.4 2.8 3.2 14.3 8.4 15.2 4 12.8 6.3; 9.7 6.3 5.7 9.6 7 22.3 9.8 5.9 0 13.4 31.7 6.8 4.1 3.3 19.4 13.5 19.8 4.7 17.4 10.9; 3 9.1 8.2 5.3 8.4 10.3 2.3 8.3 13.4 0 16.9 5.7 10.7 8.6 6.1 6 15.9 7.8 10.1 7; 22.4 26 25 25.9 25.3 12.2 20.6 25.1 31.7 16.9 0 22.6 27.6 25.5 11.3 17.1 22.7 24.7 17.2 22.3; 2.6 3.6 4.4 2.5 5.3 16 2.7 4.4 6.8 5.7 22.6 0 6.2 4.6 11.8 8.4 18 4 15.6 9.1; 8.6 5.3 2.5 8.5 3.7 19.2 8.7 2.8 4.1 10.7 27.6 6.2 0 4.1 15.4 9.4 15.7 4.8 13.3 6.8;
94 7.2 3.8 3.3 7.1 4.2 18.4 7.3 3.2 3.3 8.6 25.5 4.6 4.1 0 15.7 9.8 17.9 2.1 15.5 9; 11.6 15.2 14.2 11.1 14.5 4.3 9.8 14.3 19.4 6.1 11.3 11.8 15.4 15.7 0 6 12.3 13.8 6.8 10.8; 9.3 11.8 8.3 8.5 8.6 8.2 6.8 8.4 13.5 6 17.1 8.4 9.4 9.8 6 0 14.4 10.5 7.5 5.9; 19.5 20.4 14.6 19.4 16.2 13.2 19.6 15.2 19.8 15.9 22.7 18 15.7 17.9 12.3 14.4 0 18.1 7.7 8.3; 6.5 3.1 4 6.4 4.9 18.1 6.6 4 4.7 7.8 24.7 4 4.8 2.1 13.8 10.5 18.1 0 16.3 9.8; 16.6 18 12.2 15.9 13.8 7.7 14 12.8 17.4 10.1 17.2 15.6 13.3 15.5 6.8 7.5 7.7 16.3 0 7.6; 10.6 11.5 5.7 10.5 7.3 12.8 9.2 6.3 10.9 7 22.3 9.1 6.8 9 10.8 5.9 8.3 9.8 7.6 0 ]; jumgen = length(JarakAgen(:,1)); ukpop = 20; q = 350; s = 2; psilang = 0.8; pmutasi = 0.05; maxG = 1000; pjh = 30; fth = 1/pjh; bgraf = fth; % inisialisasi grafis
95
hfig = figure; hold on
set(hfig, 'position', [50,50,600,400]);
set(hfig, 'doublebuffer', 'on');
axis([1 maxG 0 bgraf]);
hbestplot1 = plot(1:maxG,zeros(1,maxG)); hbestplot2 = plot(1:maxG,zeros(1,maxG));
htext1 = text(0.6*maxG,0.25*bgraf,sprintf('fitness terbaik: %7.6f', 0.0));
htext2 = text(0.6*maxG,0.20*bgraf,sprintf('fitness rata-rata: %7.6f', 0.0));
htext3 = text(0.6*maxG,0.15*bgraf,sprintf('panjang jalur terbaik: %7.3f', 0.0));
htext4 = text(0.6*maxG,0.10*bgraf,sprintf('ukuran populasi: %3.0f', 0.0));
htext5 = text(0.6*maxG,0.05*bgraf,sprintf('probabilitas mutasi: %4.3f', 0.0)); xlabel('generasi'); ylabel('fitness'); hold off drawnow; %inisialisasi populasi populasi = CVRPInisialisasiPopulasi(ukpop,jumgen); for generasi=1:maxG, maxF = fitnesscvrp(populasi(1,:),jumgen,JarakAgen,jd); minF = maxF; indeksindividuterbaik = 1; for ii=1:ukpop,
96 fitness(ii)= fitnesscvrp(populasi(ii,:),jumgen,JarakAgen,jd); if(fitness(ii)>maxF), maxF=fitness(ii); indeksindividuterbaik=ii; jalurterbaik=populasi(ii,:); end if(fitness(ii)<=minF), minF=fitness(ii); end end maxF; minF; fitnessratarata=mean(fitness); plotvector1=get(hbestplot1, 'YData'); plotvector1(generasi)=maxF;
set(hbestplot1, 'YData',plotvector1);
plotvector2=get(hbestplot2, 'YData');
plotvector2(generasi)=fitnessratarata; set(hbestplot2, 'YData',plotvector2);
set(htext1,'String',sprintf('fitness terbaik: %7.6f', maxF));
set(htext2,'String',sprintf('fitness rata-rata: %7.6f', fitnessratarata));
set(htext3,'String',sprintf('panjang jalur terbaik: %7.3f', 1/maxF));
set(htext4,'String',sprintf('ukuran populasi: %3.0f', ukpop));
set(htext5,'String',sprintf('probabilitas mutasi: %4.3f', pmutasi));
97 drawnow; if maxF>fth, break; end tempopulasi=populasi; %etilisme:
%-buat satu kopi kromosom terbaik jika ukuran populasi ganjil
%-buat dua kopi kromosom terbaik jika ukuran populasi genap
if mod(ukpop,2)==0 %ukuran populasi genap
iterasimulai=3; tempopulasi(1,:)=populasi(indeksindividuterbaik,:); tempopulasi(2,:)=populasi(indeksindividuterbaik,:); else iterasimulai=2; tempopulasi(1,:)=populasi(indeksindividuterbaik,:); end linearfitness=linearfitnessranking(ukpop,fitness,maxF,minF);
%Roulette-wheel selection dan pindah silang
for jj=iterasimulai:2:ukpop, IP1=RouletteWheel(ukpop,linearfitness); IP2=RouletteWheel(ukpop,linearfitness); if(rand<psilang), anak=CVRPpindahsilang(populasi(IP1,:),populasi(IP2,:),jumgen); tempopulasi(jj,:)=anak(1,:); tempopulasi(jj+1,:)=anak(2,:); else tempopulasi(jj,:)=populasi(IP1,:);
98
tempopulasi(jj+1,:)=populasi(IP2,:); end
end
%mutasi dilakukan pada semua kromosom
for kk=iterasimulai:ukpop, tempopulasi(kk,:)=CVRPmutasi(tempopulasi(kk,:),jumgen,pmutasi); end populasi=tempopulasi; end jalurterbaik
save jalurterbaik.mat jalurterbaik
7. Pembagian rute
Setelah jalur terbaik di dapatkan dari program utama, selanjutnya
dilakukan pembagian rute menjadi dua beserta jumlah total permintaan dari setiap
masing-masing rute. Fungsi ini disimpan pada file bagidua.m berikut ini. function [rute1,kap1,rute2,kap2]=bagidua(kromosom,kapasitas,q) kap1=kapasitas(kromosom(1)); kap2=0; akhir=1; while kap1<=q akhir=akhir+1; kap1=kap1+kapasitas(kromosom(akhir)); end if kap1>q kap1=kap1-kapasitas(kromosom(akhir)); akhir=akhir-1; end
99 rute1=kromosom(1:akhir); rute2=kromosom(akhir+1:size(kromosom,2)); for ii=akhir+1:size(kromosom,2) kap2=kap2+kapasitas(kromosom(ii)); end
variabel pada fungsi bagidua.m diatas adalah kromosom (jalur terbaik
yang telah dihasilkan dari program utama), kapasitas (permintaan dari setiap
agen), dan q (kapasitas kendaraan yaitu 350 kg). Kap 1 merupakan kapasitas
permintaan dari semua agen yang dilalui pada rute 1 dan tidak melebihi dari
kapasitas maksimal mobil box yaitu 350 kg, jika sudah melebihi 350 kg maka
akan terbentuk rute 2 beserta kapasitas permintaan dari semua agen yang dilalui
100 Lampiran 5
Hasil pengambilan rute secara acak yang membentuk populasi pada generasi awal dengan bantuan software Matlab.
Individu 1 = 14 18 19 1 17 3 13 7 8 16 9 5 15 2 11 6 4 12 10 20 Individu 2 = 14 17 9 13 19 11 1 20 6 7 8 15 10 2 5 3 18 16 12 4 Individu 3 = 13 11 20 12 8 1 19 10 18 3 14 17 2 5 16 7 9 4 6 15 Individu 4 = 19 16 11 14 9 13 15 6 20 5 2 4 18 1 12 17 3 7 8 10 Individu 5 = 17 19 3 9 5 16 10 20 2 12 8 13 14 7 1 18 15 11 6 4 Individu 6 = 11 16 18 12 14 4 3 1 19 8 13 6 2 5 15 17 7 9 10 20 Individu 7 = 19 13 4 8 18 10 5 7 17 11 15 16 6 2 12 1 14 9 20 3 Individu 8 = 17 2 14 1 9 3 10 20 16 6 12 8 5 19 15 7 4 13 11 18 Individu 9 = 9 7 6 15 17 4 1 2 13 14 10 19 5 11 3 18 20 16 8 12 Individu 10 = 15 3 4 8 20 11 9 1 6 2 10 17 14 18 13 12 5 7 19 16
101 Individu 11 = 11 15 2 5 6 14 8 4 12 16 9 1 13 10 20 3 7 18 19 17 Individu 12 = 18 1 4 5 17 2 10 20 7 12 8 6 15 13 11 3 9 19 16 14 Individu 13 = 11 5 4 13 20 15 6 17 16 3 1 10 7 18 2 14 19 9 8 12 Individu 14 = 15 8 11 19 10 17 6 18 4 7 13 16 1 5 20 9 12 14 2 3 Individu 15 = 18 16 20 6 2 14 3 5 12 7 11 10 13 9 17 1 8 4 15 19 Individu 16 = 1 4 15 20 2 7 11 14 6 17 18 19 16 3 12 13 9 8 10 5 Individu 17 = 18 5 11 10 13 1 20 3 19 12 2 14 15 17 7 6 8 16 9 4 Individu 18 = 14 17 12 2 9 13 8 19 3 15 18 5 4 6 1 10 7 20 16 11 Individu 19 = 17 12 3 15 16 6 5 7 14 1 8 19 4 11 18 13 10 20 2 9 Individu 20 = 6 20 10 7 13 11 8 9 15 19 17 1 3 2 4 16 18 12 5 14
102 Lampiran 6
Individu yang terpilih sebagai induk dengan bantuan software Matlab.
1) Induk 1 = Individu 5 = 17 19 3 9 5 16 10 20 2 12 8 13 14 7 1 18 15 11 6 4 Induk 2 = Individu 5 = 17 19 3 9 5 16 10 20 2 12 8 13 14 7 1 18 15 11 6 4 2) Induk 1 = Individu 11 = 11 15 2 5 6 14 8 4 12 16 9 1 13 10 20 3 7 18 19 17 Induk 2 = Individu 10 = 15 3 4 8 20 11 9 1 6 2 10 17 14 18 13 12 5 7 19 16 3) Induk 1 = Individu 18 = 14 17 12 2 9 13 8 19 3 15 18 5 4 6 1 10 7 20 16 11 Induk 2 = Individu 2 = 14 17 9 13 19 11 1 20 6 7 8 15 10 2 5 3 18 16 12 4 4) Induk 1 = Individu 4 = 19 16 11 14 9 13 15 6 20 5 2 4 18 1 12 17 3 7 8 10 Induk 2 = Individu 8 = 17 2 14 1 9 3 10 20 16 6 12 8 5 19 15 7 4 13 11 18 5) Induk 1 = Individu 2 = 14 17 9 13 19 11 1 20 6 7 8 15 10 2 5 3 18 16 12 4 Induk 2 = Individu 17 = 18 5 11 10 13 1 20 3 19 12 2 14 15 17 7 6 8 16 9 4 6) Induk 1 = Individu 5 = 17 19 3 9 5 16 10 20 2 12 8
103 13 14 7 1 18 15 11 6 4 Induk 2 = Individu 17 = 18 5 11 10 13 1 20 3 19 12 2 14 15 17 7 6 8 16 9 4 7) Induk 1 = Individu 7 = 19 13 4 8 18 10 5 7 17 11 15 16 6 2 12 1 14 9 20 3 Induk 2 = Individu 16 = 1 4 15 20 2 7 11 14 6 17 18 19 16 3 12 13 9 8 10 5 8) Induk 1 = Individu 4 = 19 16 11 14 9 13 15 6 20 5 2 4 18 1 12 17 3 7 8 10 Induk 2 = Individu 17 = 18 5 11 10 13 1 20 3 19 12 2 14 15 17 7 6 8 16 9 4 9) Induk 1 = Individu 15 = 18 16 20 6 2 14 3 5 12 7 11 10 13 9 17 1 8 4 15 19 Induk 2 = Individu 8 = 17 2 14 1 9 3 10 20 16 6 12 8 5 19 15 7 4 13 11 18 10) Induk 1 = Individu 18 = 14 17 12 2 9 13 8 19 3 15 18 5 4 6 1 10 7 20 16 11 Induk 2 = Individu 6 = 11 16 18 12 14 4 3 1 19 8 13 6 2 5 15 17 7 9 10 20
104 Lampiran 7
Hasil crossover (pindah silang) dengan bantuan software Matlab.
1) Anak 1 = 17 19 3 9 5 16 10 20 2 12 8 13 14 7 1 18 15 11 6 4 Anak 2 = 17 19 3 9 5 16 10 20 2 12 8 13 14 7 1 18 15 11 6 4 2) Anak 1 = 19 3 4 8 20 11 9 1 6 2 10 17 15 5 14 12 16 13 7 18 Anak 2 = 19 15 2 5 6 14 8 4 12 16 9 1 3 20 11 10 17 18 13 7 3) Anak 1 = 16 11 9 13 19 14 17 12 2 8 3 15 18 5 4 6 1 10 7 20 Anak 2 = 16 4 12 2 9 14 17 13 19 11 1 20 6 7 8 15 10 5 3 18 4) Anak 1 = 10 2 14 1 19 16 11 9 13 15 6 20 5 4 18 12 17 3 7 8 Anak 2 = 18 16 11 14 17 2 1 9 3 10 20 6 12 8 5 19 15 7 4 13 5) Anak 1 = 10 5 18 16 4 1 20 3 19 12 2 14 15 17 7 6 8 9 13 11 Anak 2 = 14 17 16 9 4 11 1 20 6 7 8 15 10 2 5 3 18 13 19 12 6) Anak 1 = 18 11 6 4 13 1 20 3 19 12 2 14 15
105 17 7 9 5 16 10 8 Anak 2 17 6 9 4 5 16 10 20 2 12 8 13 14 7 1 18 11 3 19 15 7) Anak 1 = 19 13 4 8 18 10 5 7 17 11 15 16 6 2 12 1 14 9 20 3 Anak 2 = 1 4 15 20 2 7 11 14 6 17 18 19 16 3 12 13 9 8 10 5 8) Anak 1 = 19 16 11 14 9 13 15 6 20 5 2 4 18 1 12 17 3 7 8 10 Anak 2 = 18 5 11 10 13 1 20 3 19 12 2 14 15 17 7 6 8 16 9 4 9) Anak 1 = 14 3 5 12 7 11 10 13 9 17 1 8 4 19 15 18 16 20 6 2 Anak 2 = 20 16 6 12 8 5 19 15 7 4 13 11 18 9 17 2 14 1 3 10 10) Anak 1 = 13 8 19 3 18 4 6 1 10 7 20 16 11 5 15 14 17 12 2 9 Anak 2 = 4 3 19 8 13 2 5 15 17 7 9 10 20 6 1 11 16 18 12 14
106 Lampiran 8 Hasil mutasi dengan bantuan software Matlab.
1) Individu baru anak 1 = 17 19 3 9 5 16 10 20 2 12 8
13 14 7 1 18 15 11 6 4
Individu baru anak 2 = 17 19 3 9 5 16 10 20 2 12 8
13 14 7 1 18 15 11 6 4
2) Individu baru anak 1 = 11 3 4 8 20 19 9 1 6 2 10 18 17 5 14 12 16 13 15 7
Individu baru anak 2 = 19 15 2 5 6 14 8 4 12 16 9
1 3 20 11 10 17 18 13 7
3) Individu baru anak 1 = 16 11 9 13 19 14 17 12 2 8 3
15 18 5 4 6 7 10 1 20
Individu baru anak 2 = 16 4 12 2 9 14 17 13 19 11 1
20 6 7 8 15 10 5 3 18
4) Individu baru anak 1 = 10 17 14 1 19 16 11 9 13 15 6
20 5 4 18 12 2 3 7 8
Individu baru anak 2 = 18 16 11 12 17 2 1 9 3 10 20
6 5 8 14 19 15 7 4 13
5) Individu baru anak 1 = 10 5 18 16 11 1 20 3 19 12 2
14 15 17 7 6 8 9 13 4
Individu baru anak 2 = 14 17 16 9 4 11 1 20 6 15 8
107
6) Individu baru anak 1 = 18 11 6 13 4 1 20 3 19 12 2
14 15 17 7 9 5 16 10 8
Individu baru anak 2 = 17 6 9 4 5 16 10 20 2 12 8
13 14 19 1 18 11 3 7 15
7) Individu baru anak 1 = 19 13 4 8 18 10 6 7 17 20 15
16 5 2 12 1 14 9 11 3
Individu baru anak 2 = 3 4 15 20 2 7 11 14 6 18 17 19 16 1 12 13 9 8 10 5
8) Individu baru anak 1 = 19 16 11 14 9 7 3 1 20 5 6 4 18 2 12 17 15 13 8 10
Individu baru anak 2 = 18 5 11 10 13 1 20 3 19 12 2
14 4 17 7 6 8 16 9 15
9) Individu baru anak 1 = 14 3 5 12 7 11 10 13 9 17 1
15 4 19 2 18 16 20 6 8
Individu baru anak 2 = 12 16 6 20 8 5 19 15 7 4 13 17 18 9 11 2 14 1 3 10
10) Individu baru anak 1 = 13 8 19 3 18 4 6 1 10 7 9 16 11 5 15 14 17 12 2 20
Individu baru anak 2 = 4 3 19 8 6 16 5 15 17 7 9
108 Lampiran 9
Hasil populasi baru pada generasi selanjutnya dengan bantuan software Matlab. Individu 1 = 17 19 3 9 5 16 10 20 2 12 8 13 14 7 1 18 15 11 6 4 Individu 2 = 17 19 3 9 5 16 10 20 2 12 8 13 14 7 1 18 15 11 6 4 Individu 3 = 11 3 4 8 20 19 9 1 6 2 10 18 17 5 14 12 16 13 15 7 Individu 4 = 19 15 2 5 6 14 8 4 12 16 9 1 3 20 11 10 17 18 13 7 Individu 5 = 16 11 9 13 19 14 17 12 2 8 3 15 18 5 4 6 7 10 1 20 Individu 6 = 16 4 12 2 9 14 17 13 19 11 1 20 6 7 8 15 10 5 3 18 Individu 7 = 10 17 14 1 19 16 11 9 13 15 6 20 5 4 18 12 2 3 7 8 Individu 8 = 18 16 11 12 17 2 1 9 3 10 20 6 5 8 14 19 15 7 4 13 Individu 9 = 10 5 18 16 11 1 20 3 19 12 2 14 15 17 7 6 8 9 13 4 Individu 10 = 14 17 16 9 4 11 1 20 6 15 8 7 10 2
109 5 3 18 13 19 12 Individu 11 = 18 11 6 13 4 1 20 3 19 12 2 14 15 17 7 9 5 16 10 8 Individu 12 = 17 6 9 4 5 16 10 20 2 12 8 13 14 19 1 18 11 3 7 15 Individu 13 = 19 13 4 8 18 10 6 7 17 20 15 16 5 2 12 1 14 9 11 3 Individu 14 = 3 4 15 20 2 7 11 14 6 18 17 19 16 1 12 13 9 8 10 5 Individu 15 = 19 16 11 14 9 7 3 1 20 5 6 4 18 2 12 17 15 13 8 10 Individu 16 = 18 5 11 10 13 1 20 3 19 12 2 14 4 17 7 6 8 16 9 15 Individu 17 = 14 3 5 12 7 11 10 13 9 17 1 15 4 19 2 18 16 20 6 8 Individu 18 = 12 16 6 20 8 5 19 15 7 4 13 17 18 9 11 2 14 1 3 10 Individu 19 = 13 8 19 3 18 4 6 1 10 7 9 16 11 5 15 14 17 12 2 20 Individu 20 = 4 3 19 8 6 16 5 15 17 7 9 10 20 13 1 11 2 18 12 14
110 Lampiran 10
Nilai fitness generasi selanjutnya yang didapatkan dengan bantuan software Matlab.
Nilai fitness individu 1 = 0.0056 Nilai fitness individu 2 = 0.0056 Nilai fitness individu 3 = 0.0040
Nilai fitness individu 4 = 0.0042
Nilai fitness individu 5 = 0.0041
Nilai fitness individu 6 = 0.0047
Nilai fitness individu 7 = 0.0046
Nilai fitness individu 8 = 0.0046
Nilai fitness individu 9 = 0.0045
Nilai fitness individu 10 = 0.0044
Nilai fitness individu 11 = 0.0045
Nilai fitness individu 12 = 0.0041
Nilai fitness individu 13 = 0.0043
Nilai fitness individu 14 = 0.0044
Nilai fitness individu 15 = 0.0044
Nilai fitness individu 16 = 0.0038
Nilai fitness individu 17 = 0.0044
Nilai fitness individu 18 = 0.0046
Nilai fitness individu 19 = 0.0040
111 Lampiran 11
Hasil populasi baru pada generasi ke-1000 dengan bantuan software Matlab. Individu 1 = 7 4 1 10 16 15 11 6 19 17 20 3 5 8 13 9 14 18 2 12 Individu 2 = 7 4 1 10 16 15 11 6 19 17 20 3 5 8 13 9 14 18 2 12 Individu 3 = 1 8 4 9 18 12 2 14 19 17 20 3 5 7 13 15 10 16 11 6 Individu 4 = 14 19 8 7 4 10 16 15 1 17 20 3 5 11 6 13 9 18 12 2 Individu 5 = 19 17 5 6 12 2 14 4 16 15 20 3 9 1 7 10 8 18 11 13 Individu 6 = 19 17 5 8 13 9 18 12 2 14 20 3 7 4 1 16 10 15 11 6 Individu 7 = 3 5 8 4 9 18 12 2 14 17 7 13 15 10 16 19 11 6 1 20 Individu 8 = 7 4 10 3 5 8 13 9 18 17 14 2 1 12 16 15 11 6 19 20 Individu 9 = 9 18 17 3 8 13 12 2 14 1 16 15 11 6 19 20 7 4 5 10 Individu 10 = 20 9 1 10 16 15 11 19 17 3 8 13 12 2 14 4 18 6 5 7 Individu 11 = 12 16 14 2 7 5 11 6 19 17 9 15 18 1
112 13 4 8 10 20 3 Individu 12 = 7 3 5 12 9 18 13 4 8 10 2 14 1 16 15 11 6 19 17 20 Individu 13 = 6 19 8 2 9 10 13 12 14 17 20 3 5 7 4 1 18 16 15 11 Individu 14 = 6 19 8 13 9 18 2 12 14 17 20 3 5 7 4 1 10 16 15 11 Individu 15 = 18 12 2 14 16 15 11 6 19 17 20 7 4 13 3 5 8 10 1 9 Individu 16 = 15 7 13 12 16 2 11 6 1 17 20 18 5 8 4 9 3 19 14 10 Individu 17 = 9 4 7 10 8 18 11 6 19 17 20 3 5 15 12 2 14 1 16 13 Individu 18 = 7 11 15 10 16 19 12 6 1 17 8 3 5 20 4 9 18 13 2 14 Individu 19 = 12 2 7 10 16 15 11 6 19 17 20 3 4 1 8 9 18 5 13 14 Individu 20 = 2 12 14 10 15 8 3 6 19 17 20 11 7 4 1 16 5 13 9 18
113 Lampiran 12
Nilai fitness generasi ke-1000 yang didapatkan dengan bantuan software Matlab.
Nilai fitness individu 1 = 0.0088 Nilai fitness individu 2 = 0.0088 Nilai fitness individu 3 = 0.0055
Nilai fitness individu 4 = 0.0053
Nilai fitness individu 5 = 0.0045
Nilai fitness individu 6 = 0.0062
Nilai fitness individu 7 = 0.0050
Nilai fitness individu 8 = 0.0065
Nilai fitness individu 9 = 0.0063
Nilai fitness individu 10 = 0.0054
Nilai fitness individu 11 = 0.0047
Nilai fitness individu 12 = 0.0063
Nilai fitness individu 13 = 0.0052
Nilai fitness individu 14 = 0.0063
Nilai fitness individu 15 = 0.0071
Nilai fitness individu 16 = 0.0044
Nilai fitness individu 17 = 0.0057
Nilai fitness individu 18 = 0.0050
Nilai fitness individu 19 = 0.0077