LAMPIRAN
83
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 7 8 9 10 11 12 21.2 7.6 10.5 10.8 7.9 25.4 7.4 15.8 3.9 6.2 9.7 3 22.4 2.6 19.4 6.3 5.3 6.3 9.1 26 3.6 17.2 7.3 1.7 5.7 8.2 25 4.4 15.5 1.1 6.1 9.6 5.3 25.9 2.5 16.8 7.6 2.4 7 8.4 25.3 5.3 0 14.1 16 22.3 10.3 12.2 16 14.1 0 6.3 9.8 2.3 20.6 2.7 16 6.3 0 5.9 8.3 25.1 4.4 22.3 9.8 5.9 0 13.4 31.7 6.8 10.3 2.3 8.3 13.4 0 16.9 5.7 12.2 20.6 25.1 31.7 16.9 0 22.6 16 2.7 4.4 6.8 5.7 22.6 0 19.2 8.7 2.8 4.1 10.7 27.6 6.2 18.4 7.3 3.2 3.3 8.6 25.5 4.6 4.3 9.8 14.3 19.4 6.1 11.3 11.8 8.2 6.8 8.4 13.5 6 17.1 8.4 13.2 19.6 15.2 19.8 15.9 22.7 18 18.1 6.6 4 4.7 7.8 24.7 4 7.7 14 12.8 17.4 10.1 17.2 15.6 12.8 9.2 6.3 10.9 7 22.3 9.1
84
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
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
85
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
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
5897
655,3
Jumlah
86
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 didapatkan populasi awal.
87
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 disimpan pada variabel h. Fungsi ini digunakan untuk mencegah terjadinya
88
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 p (indeks) dari individu yang terpilih sebagai induk.
89
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
90
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
91
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];
92
JarakAgen = [0 3.4 6.8 1.5 5.9 15.8 8.6 7.2 11.6
9.3 19.5
3.4 0
5.9 5.5 6.8 19.4
11.8
20.4
3.1 18
6.8 5.9 0
6.4 1.6 17.2
8.3 14.6
4
1.5 5.5 6.4 0 11.1
12.2
6.5 16.6
22.4
2.6
10.6;
6.3 5.3 6.3 9.1 26
3.6 5.3 3.8 15.2
11.5; 7.3 1.7 5.7 8.2 25
4.4 2.5 3.3 14.2
5.7;
5.8 15.5
8.5 19.4
3.9 6.2 9.7 3
1.1 6.1 9.6 5.3 25.9
6.4 15.9
10.5;
5.9 6.8 1.6 5.8 0
16.8
7.6 2.4 7
14.5
8.6 16.2
4.9 13.8
7.3;
15.8
19.4
17.2
15.5
16.8
10.3
12.2
16
19.2
2.5 8.5 7.1
18.4
8.4 25.3
5.3 3.7 4.2
0
16
14.1
4.3 8.2 13.2
22.3
18.1
7.7
12.8; 3.9 6.3 7.3 1.1 7.6 14.1 9.8 6.8 19.6
6.6 14
0
6.3 0
8.4 15.2
6.3;
12.8
5.9 8.3 25.1
4.4 2.8 3.2 14.3
9.7 6.3 5.7 9.6 7
22.3
9.8 5.9 0
13.4
3.3 19.4
19.8
4.7 17.4
10.9;
3
13.5
9.1 8.2 5.3 8.4 10.3
8.6 6.1 6
15.9
22.4
26
25
16.9
0
22.6
17.2
22.3;
27.6
4
15.6
9.4 15.7
6.8 4.1
16.9
5.7 10.7
12.2 25.5
20.6
25.1
31.7
11.3
2.7 4.4 6.8 5.7 22.6
17.1
22.7
0
24.7
6.2 4.6 11.8
9.1;
8.6 5.3 2.5 8.5 3.7 19.2 4.1 15.4
0
31.7
7;
25.3
2.6 3.6 4.4 2.5 5.3 16 8.4 18
2.3 8.3 13.4
7.8 10.1 25.9
2.7 8.7 7.3
9.2;
6.2 5.3 1.7 6.1 2.4 16 4
6.3 9.8 2.3 20.6
8.7 2.8 4.1 10.7 4.8 13.3
6.8;
93
27.6
6.2 0
7.2 3.8 3.3 7.1 4.2 18.4 15.7
9.8 17.9
11.6
15.2
6.1 11.3
7.3 3.2 3.3 8.6 25.5
2.1 15.5 14.2
11.8
9;
11.1 15.4
4.6 4.1 0
14.5 15.7
4.3 9.8 14.3 0
6
12.3
19.4 13.8
6.8
10.8; 9.3 11.8
8.3 8.5 8.6 8.2 6.8 8.4 13.5
9.8 6
0
19.5
20.4
14.6
19.4
19.8
15.9
22.7
18
18.1
7.7 8.3;
6.5 3.1 4
14.4
10.5
10.5
16.6
18
17.2
15.6
13.3
10.6
11.5
5.7 10.5
9.1 6.8 9
18.1 12.2
10.8
17.1
8.4 9.4
19.6
15.2
7.5 5.9;
6.4 4.9 18.1
13.8
6
0
15.9
16.2
13.2
15.7
17.9
6.6 4
4.7 7.8 24.7
16.3
9.8;
13.8
7.7 14
15.5
12.3
12.8
6.8 7.5 7.7 16.3 7.3 12.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
94
9.2 6.3 10.9
14.4
4
0
4.8 2.1
17.4 0
10.1 7.6; 7
22.3
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,
95
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));
96
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
anak=CVRPpindahsilang(populasi(IP1,:),populasi(IP2,:),jumgen); tempopulasi(jj,:)=anak(1,:); tempopulasi(jj+1,:)=anak(2,:); else tempopulasi(jj,:)=populasi(IP1,:);
97
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
98
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 pada rute 2.
99
Lampiran 5 Hasil pengambilan rute secara acak yang membentuk populasi pada generasi awal dengan bantuan software Matlab. Individu 1 =
Individu 2 =
Individu 3 =
Individu 4 =
Individu 5 =
14
18
19
11
6
4
14
17
5
3
13
11
20
16
7
9
19
16
11
14
12
17
3
7
8
10
17
19
3
9
5
16
11
6
4
1 Individu 6 =
Individu 7 =
Individu 8 =
Individu 9 =
Individu 10 =
9 18
18
1 12 13 16
15
17 10
13
7
8
16
9
5
15 2
20
19
11
12
12 4
3
1
20
6
7
8
15
10
2
19
10
18
3
14
17
2
5
6
20
5
2
4
18
1
12
8
13
14
7
4 8
1
6
15 9
13
14
15
10
11
16
18
12
4
15
17
7
9
10
20
19
13
4
8
18
10
12
1
14
9
20
3
17
2
14
1
9
3
15
7
4
13
11
18
9
7
6
15
17
4
3
18
20
16
8
12
15
3
4
8
20
11
13
12
5
7
19
16
100
20
3
1
2
19
8
13
6
2
5
5
7
17
11
15
16
6
2
10
20
16
6
12
8
5
19
1
2
13
14
10
19
5
11
6
2
10
17
14
18
9
1
Individu 11 =
Individu 12 =
Individu 13 =
11
15
20
3
18
5
6
14
7
18
19
17
1
4
5
17
2
11
3
9
19
16
14
11
5
4
13
20
15
14
19
9
8
2 Individu 14 =
Individu 15 =
Individu 16 =
Individu 17 =
Individu 18 =
8
11
19
10
20
9
12
14
2
3
18
16
20
6
2
14
17
1
8
4
15
19
15
20
2
7 5
1
4
12
13
9
8
10
18
5
11
10
13
7
6
14
17
Individu 20 =
10
8
16
9
12 7
2 20
8
4
12
16
9
1
13
10
10
20
7
12
8
6
15
13
6
17
16
3
1
10
7
18
6
18
4
7
13
16
1
5
3
5
12
7
11
10
13
9
12
15
1 Individu 19 =
2
17
11
14
6
17
18
19
16
3
3
19
12
2
14
15
17
5
4
6
19
4
11
1
3
2
1
20
13
8
19
3
15
18
6
5
7
14
1
8
11
8
9
15
19
17
4 9
16
11
17
12
3
15
16
18
13
10
20
2
6
20
10
7
13
4
16
18
12
5
9
14
101
Lampiran 6 Individu yang terpilih sebagai induk dengan bantuan software Matlab. 1) Induk 1 = Individu 5 =
Induk 2 = Individu 5 =
2) Induk 1 = Individu 11 =
17
19
3
9
5
16
10
20
2
13
14
7
1
18
15
11
6
4
17
19
3
9
5
16
10
20
2
13
14
7
1
18
15
11
6
4
11
15
2
5
6
14
8
4
12
13
10
20
3
7
18
19
17
15
3
4
8
20
11
9
1
6
17
14
18
13
12
14
17
12
2
9
5
4
14
17
9
13
19
15
10
2
5
3
19
16
11
14
1 Induk 2 = Individu 10 =
3) Induk 1 = Individu 18 =
Induk 2 = Individu 2 =
4) Induk 1 = Individu 4 =
4 Induk 2 = Individu 8 =
5) Induk 1 = Individu 2 =
Induk 2 = Individu 17 =
6) Induk 1 = Individu 5 =
6
18
17
1
1
2
14 19
10
19
16
13
8
19
3
16
11 18
9
20
8
16
12
15
20
5
2
4
6 8
1
9
3
10
20
16
15
7
4
13
11
18
9
13
19
15
10
2
5
3
18
5
11
10
14
15
17
17
19
3
11
10
7
7
17
9
6
3
14
16
18
17
5
8
11
1
13
12
15
12
8
102
7
20
8
2
5
7
12
10
1
20
6
18
16
12
4
13
1
20
3
19
7
6
8
16
9
4
9
5
16
10
20
2
6
12
7
8
12
2
12
8
Induk 2 = Individu 17 =
7) Induk 1 = Individu 7 =
Induk 2 = Individu 16 =
8) Induk 1 = Individu 4 =
13
14
7
1
18
15
11
6
4
18
5
11
10
13
1
20
3
19
14
15
17
7
6
8
16
9
4
19
13
4
8
18
10
5
7
17
16
6
2
12
1
14
9
20
3
15
20
2
7
11
14
6
1
4
19
16
3
12
13
9
8
19
16
11
14
9
13
15
4 Induk 2 = Individu 17 =
9) Induk 1 = Individu 15 =
Induk 2 = Individu 8 =
10) Induk 1 = Individu 18 =
Induk 2 = Individu 6 =
18
1
12
17
3
7
10
2
12
2
10
10
13
1
20
3
19
14
15
17
7
6
8
16
9
4
18
16
20
6
2
14
3
5
12
10
13
9
17
1
8
4
15
19
17
2
14
1
9
3
10
20
16
15
7
4
13
11
18
14
17
5
4
11
16
6
2
12 6
2 1
103
13
10
18 5
9
12
7
15
14 17
8
4 7
19
20
16 3
9
18
5
11
19
15
20
5
5
11
5
18
8
2
17
6 8
12
11
6
12
15
18
8
13
11 1
10
3
7
19 20
Lampiran 7 Hasil crossover (pindah silang) dengan bantuan software Matlab. 1) Anak 1 =
17
3
9
5
16
15
11
6
4
3
9
5
16
18
15
11
6
4
19
3
4
8
14
12
16 13
7
18
19
15
2
6
14
11
10
17 18 13
16
11
9
13
19
4
6
1
10
7
20
16
4
12
2
9
14
17
7
8
15
10
5
3
18
10
2
14
1
19
16
11
4
18
12
17
3
7
8
18
16
11
14
17
2
1
8
5
19
15
7
4
13
10
5
18
16
4
1
20
17
7
6
8
9
13
11
14
17
16
9
4
11
1
2
5
3
18
13
19
12
18
11
6
4
13
1
20
1 Anak 2 =
17 1
2) Anak 1 =
Anak 2 =
3) Anak 1 =
Anak 2 =
4) Anak 1 =
Anak 2 =
5) Anak 1 =
Anak 2 =
6) Anak 1 =
19 18 19
10
20
2
12
8
13
14
7
10
20
2
12
8
13
14
7
9
1
6
2
10
17
15
5
8
4
12
16
9
1
3
20
3
15
18
5
20 11
5
7
104
14
17 12
2
8
13
19
11
1
20
6
9
13
15
6
20
5
9
3
10
20
6
12
3
19
12
2
14 15
20
6
7
8
15 10
3
19
12
2
14
15
Anak 2
7) Anak 1 =
Anak 2 =
8) Anak 1 =
Anak 2 =
9) Anak 1 =
Anak 2 =
10) Anak 1 =
Anak 2 =
17
7
9
5
16
17
6
9
4
5
16
10
7
1
18
11 3
19
15
19
13
4
8
18
10
5
2
12
1
14
9
20
3
1
4
15 20
2
7
11
3
12
13
9 8
10
5
19
16
11 14
9
13
15
1
12
17
7
8
10
18
5
11 10 13
1
20
17
7
6
8
16
9
4
14
3
5
12
7
11
10
19 15
18
16
20
6
2
20 16
6
12
8
5
19
9
17
2
14
1
3
10
13
8
19
3
18
4
6
5
15
14
17
12
2
9
4
3
19
8
13
2
5
6
1
11
16
18 12
14
3
10
105
8 20
2
12
8
13
14
7
17
11
15
16
6
14
6
17
18
19
16
6
20
5
2
4
18
3
19
12
2
14
15
13
9
17
1
8
4
15
7
4
13
11
18
1
10
7
20
16
11
15
17
7
9
10
20
Lampiran 8 Hasil mutasi dengan bantuan software Matlab. 1) Individu baru anak 1 =
Individu baru anak 2 =
2) Individu baru anak 1 =
Individu baru anak 2 =
3) Individu baru anak 1 =
Individu baru anak 2 =
4) Individu baru anak 1 =
Individu baru anak 2 =
5) Individu baru anak 1 =
Individu baru anak 2 =
17
19
3
20
2
13
14
6
4
17
19
20
2
13
14
7
1
18
15
11
6
4
11
3
4
8
20
19
9
1
6
18
17
5
14
12
16
13
15
7
19
15
2
5
6
14
8
4
12
1
3
20
11
10
17
18
13
7
16
11
9
13
19
14
17
12
2
15
18
5
4
6
7
10
1
20
16
4
12
2
9
14
17
13
20
6
7
8
15
10
5
3
18
10
17
14
1
19
16
11
9
13 15
20
5
4
18 12
2
3
7
8
18
16
11
12 17
2
1
9
3
6
5
8
14 19
15
7
4
13
10
5
18
16 11
1
20
3
19 12
14
15
17
7
6
8
9
13
4
14
17
16
9
4
11
1
20
6 15
7
10
2
5
3
18
13
19
12
7 3
106
9 1 9
5
16
18 5
15 16
10 11 10
12
8
12
8
2
10
16
9
8
3
19 11
1
6
10 20
2
8
6) Individu baru anak 1 =
Individu baru anak 2 =
7) Individu baru anak 1 =
Individu baru anak 2 =
8) Individu baru anak 1 =
Individu baru anak 2 =
9) Individu baru anak 1 =
Individu baru anak 2 =
10) Individu baru anak 1 =
Individu baru anak 2 =
18
11
6
13
4
1
20
3
14
15
17
7
9
5
16
10
8
17
6
9
4
5
16
10
20
2
13
14
19
1 18
11
3
7
15
19
13
4
8 18
10
6
7
17 20 15
16
5
2
12
1
14
9
11
3
3
4
15
20
2
7
11
14
6
19
16
1
12 13
9
8
10
5
19
16
11
14
7
3
1
20
4
18
2
12 17
15
13
18
5
11
10 13
1
14
4
17
7
6
14
3
5
12
7
15
4
19
12
16
17
12
2
8
18 17
5
6
8
10
20
3
19 12
2
8
16
9
15
11
10
13
9
2
18 16
20
6
8
6
20
8
5
19
15
7
18
9
11
2
14
1
3
10
13
8
19
3
18
4
6
1
10
16
11
5
15 14 17
12
2
20
4
3
19
8
6
16
5
15
17
10
20
13
1
11
2
18
12
14
107
9
19 12
17
1
4
13
7
9
7
9
Lampiran 9 Hasil populasi baru pada generasi selanjutnya dengan bantuan software Matlab. Individu 1 =
Individu 2 =
Individu 3 =
Individu 4 =
Individu 5 =
Individu 6 =
Individu 7 =
Individu 8 =
Individu 9 =
17
19
3
9
1
18
15
11
17
19
3
9
1
18
15
11
6
4
11
3
4
8
20
19
14
12
16
13 15
7
19
15
2
5
6
14
11
10
17 18
13
7
16
11
9
13
19
14
4
6
7
10
1
20
16
4
12
2
9
14
8
15
10
5
3
18
10
17
14
1
19
16
18
12
2
3
7
8
18
16
11
12 17
2
14
19
15
7
4
13
10
5
18
16
11
1
7
6
8
9
13
4
17
16
9
4
11
Individu 10 = 14
5
16 6
5
10
20
2
12
8
13
14
7
10
20
2
12
8
13
14
7
9 1
6
2 10
18
17
5
8
4
12
16 9
1
3
20
17
12
2
15
18
5
17
13
19 11 1 20
6
7
11
9
13 15 6 20
5
4
1
9
3
5
8
20
3
19 12 2
14
15
17
1
20
6 15 8
7
10
2
4 16
108
8
3
10 20 6
5
3
18
13
19
12
11
6
13
4
1
9
5
16
10
6
9
4
5
16
18
11
3
7
15
Individu 13 = 19 13
4
8
18 10
1
14
9
11
3
4
15
20
2
7
12 13
9
8
10
5
Individu 15 = 19 16
11
14
9
7
12 17
15
13
8
10
5
11
10 13
1
6
8
16
3
5
18
Individu 18 = 12 16
Individu 11 = 18 7 Individu 12 = 17 1
12 Individu 14 = 3
Individu 16 = 18 7 Individu 17 = 14 2
20
3
19 12 2 14
15
17
10
20
2
13
14
19
6
7
17 20 15 16
5
2
11
14
6
18 17 19
16
1
3
1
20
5
6
4
18
2
20
3
19
12
2
14
4
17
9
15
12
7
11 10
13
9
17
1
15
4
19
16
20
6
8
6
20
8
5 19
15
7
4
13 17
18
9
6
1
10
7
9
16
11
5
5
15
17
7
9
10
20 13
8
11
2
14
1
3
10
Individu 19 = 13
8
19
3
18
4
15
14
17
12
2
20
Individu 20 = 4
3
19
8
6
16
1
11
2
18
12
14
109
12 8
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 Nilai fitness individu 20 = 0.0043
110
Lampiran 11 Hasil populasi baru pada generasi ke-1000 dengan bantuan software Matlab. Individu 1 =
Individu 2 =
Individu 3 =
Individu 4 =
Individu 5 =
Individu 6 =
Individu 7 =
Individu 8 =
Individu 9 =
7
4
10
16
15
13 9
14 18
2
12
7
1
10
16
15
13 9
14 18
2
12
1
4
9
18
12
13 15 10 16
11
6
14 19
8
7
4
10
6
13
9
18
12
2
19 17
5
6
12
2
7
10
8
18
11
13
19 17
5
8
13
9
1
16 10 15
11
6
3
5
4
8
1
8
4
9
18
16 19 11
6
1
20
7
10
3
5
8
16 15 11
6
19
20
9
3
8
13
7
4
5
10
4
18 17
19 20 Individu 10 = 20
9
1
10
16
15
14
4
18
6
5
7
Individu 11 = 12 16 14
2
7
5
111
11
6
19
17
20
3
5
8
11
6
19
17
20
3
5
8
2
14
19
17
20
3
5
7
16
15
1
17
20
3
5
11
14
4
16
15
20
3
9
1
18
12
2
14
20
3
7
4
12
2
14
17
7
13
15 10
13
9
18
17
14
2
1
12
12
2
14
1
16 15
11
6
11
19
17
3
8
13
12
2
11
6
19
17
9
15
18
1
13
4
8
10
20
3
3
5
12
9
18
11
6
19
17
20
Individu 13 = 6
19
8
2
9
10
4
1
18
16
15
11
Individu 14 = 6
19
8
13
9
18
4
1
10
16
15
11
12
2
14
16
15
5
8
10
1
9
7
13
12
16
2
4
9
3
19
14
10
Individu 17 = 9
4
7
10
8
18
2
14
1
16
13
Individu 18 = 7
11
15
10
16
19
4
9
18
13
2
14
2
7
10
16
15
8
9
18
5
13
14
Individu 20 = 2
12
14
10
15
8
1
16
5
13
9
18
Individu 12 = 7 15
Individu 15 = 18 3 Individu 16 = 15
12
Individu 19 = 12
112
13
4
8
10
2
14
1
16
13
12
14
17
20
3
5
7
2
12
14
17
20
3
5
7
11
6
19
17
20
7
4
13
11
6
1
17
20
18
5
8
11
6
19
17
20
3
5
15
12
6
1
17
8
3
5
20
11
6
19
17
20
3
4
1
3
6
19
17
20
11
7
4
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 Nilai fitness individu 20 = 0.0058
113
114