Matriks Jarak Antara Gudang (G) dan masing-masing toko adalah sebagai berikut:
Jarak G 1 2 3 4 5
G 0 100 180 160 110 140
1 100 0 60 80 50 120
2 180 60 0 90 30 70
3 160 80 90 0 50 80
4 110 50 30 50 0 60
5 140 120 70 80 60 0
Penyelesaian :
Inisiasi solusi awal dengan metode nearest neighborhood semula tidak ada rute
dan nilai Total Travel Time = 0, nilai awal variabel Sisa Demand untuk semua
toko = Demand masing-masing toko, nilai awal variabel Muatan untuk masing-
masing truk = Kapasitas masing-masing truk (karena asumsi truk dimuati penuh),
nilai awal variabel id_konsumen = 1 (untuk variabel penghitung jumlah konsumen
yang dilayani oleh sebuah truk), nilai awal variabel v_terpakai = 1 (untuk variabel
penghitung jumlah truk yang dipakai untuk menyelesaikan rute), nilai awal
counter_jam masing-masing truk adalah 0 pada awal hari kerja, nilai awal variabel
counter_node = 1 (untuk menghitung jumlah konsumen keseluruhan)
- Pilih konsumen terdekat dari lokasi gudang, yaitu Toko-1
- Pilih kendaraan kapasitas terbesar,karena sama boleh sembarang, misal
kita ambil Truk-1
- Update Rute : Rute(1,1) = Toko-1
- Counter_jam Truk-1 = 0 + (100/60) X 60 menit = 100 > TW-Awal Toko-
1 Bisa Langsung Dilayani karena Toko-1 sudah buka
- Truk-1 selesai dilayani oleh Toko-1 pada saat counter_jam Truk-1 = 100 +
waktu pelayanan 10 menit = 110
- Update nilai Total Travel Time = 0 + 110 = 110
- Update nilai Total Travel Distance = 0 + 100 = 100
- Sisa Demand Toko-1 = 25 < Muatan Truk-1 = 100 sehingga : Sisa
Demand Toko-1 = 25 – 25 = 0 dan Muatan Truk-1 = 100 – 25 = 75
- Id_konsumen = 1 + 1 = 2 (bersiap melayani konsumen yang kedua untuk
Truk-1) dan counter_node = 1 + 1 = 2
- Cek jumlah konsumen yang sudah dilayani melalui variabel counter_node
<= n dan hasilnya < sehingga lanjut untuk pencarian rute berikut
- Cek apakah jam kerja (variabel Counter_jam) waktu sampai ke tujuan
belum melewati TW-Akhir konsumen berikut dan sisa muatan (variabel
Muatan) truk masih mencukupi untuk melayani konsumen berikut
(konsumen yang dilayani berikut adalah konsumen yang posisinya
terdekat dari Toko-1 yaitu Toko-4) Tidak ada pergantian mobil, tetap
melanjutkan rute untuk Truk-1
- Pilih Konsumen berikut yang terdekat dari Toko-1, yaitu Toko-4
- Update Rute : Rute(1,2) = Toko-4
- Counter_jam Truk-1 = 110 + 50/60*60 = 160 < TW-Awal Toko-4
sehingga ada waktu menunggu selama 180 – 160 = 20 menit
- Truk-1 selesai dilayani oleh Toko-4 pada saat counter_jam Truk-1 = 160 +
waktu pelayanan 10 menit + waktu tunggu 20 menit = 190
- Update nilai Total Travel Time = 110 + 50+ 20 + 10 = 190
- Update nilai Total Travel Distance = 0 + 100 + 50 = 150
- Sisa Demand Toko-4 = 10 < Muatan Truk-1 = 75 sehingga : Sisa Demand
Toko-1 = 10 – 10 = 0 dan Muatan Truk-1 = 75 – 10 = 65
- Id_konsumen = 2 + 1 = 3 (bersiap melayani konsumen yang ketiga untuk
Truk-1) dan counter_node = 2 + 1 = 3
- Cek jumlah konsumen yang sudah dilayani melalui variabel counter_node
<= n dan hasilnya < sehingga lanjut untuk pencarian rute berikut
- Cek apakah jam kerja (variabel Counter_jam) waktu sampai ke tujuan
belum melewati TW-Akhir konsumen berikut dan sisa muatan (variabel
Muatan) truk masih mencukupi untuk melayani konsumen berikut
(konsumen yang dilayani berikut adalah konsumen yang posisinya
terdekat dari Toko-4 yaitu Toko-2) Tidak ada pergantian mobil, tetap
melanjutkan rute untuk Truk-1
- Pilih Konsumen berikut yang terdekat dari Toko-4, yaitu Toko-2
- Update Rute : Rute(1,3) = Toko-2
- Counter_jam Truk-1 = 190 + 30/60*60 = 220> TW-Awal Toko-2 Bisa
Langsung Dilayani karena Toko-2 sudah buka
- Truk-1 selesai dilayani oleh Toko-2 pada saat counter_jam Truk-1 = 220 +
waktu pelayanan 10 menit = 230
- Update nilai Total Travel Time = 110 + 50+ 20 + 10 + 30 + 10 = 230
- Update nilai Total Travel Distance = 100 + 50 + 30 = 180
- Sisa Demand Toko-2 = 50 < Muatan Truk-1 = 65 sehingga : Sisa Demand
Toko-2 = 50 – 50 = 0 dan Muatan Truk-1 = 65 – 50 = 15
- Id_konsumen = 3 + 1 = 4 (bersiap melayani konsumen yang keempat
untuk Truk-1) dan counter_node = 3 + 1 = 4
- Cek jumlah konsumen yang sudah dilayani melalui variabel counter_node
<= n dan hasilnya < sehingga lanjut untuk pencarian rute berikut
- Cek apakah jam kerja (variabel Counter_jam) waktu sampai ke tujuan
belum melewati TW-Akhir konsumen berikut dan sisa muatan (variabel
Muatan) truk masih mencukupi untuk melayani konsumen berikut
(konsumen yang dilayani berikut adalah konsumen yang posisinya
terdekat dari Toko-2 yaitu Toko-5) Tidak ada pergantian mobil, tetap
melanjutkan rute untuk Truk-1
- Pilih Konsumen berikut yang terdekat dari Toko-2, yaitu Toko-5
- Update Rute : Rute(1,4) = Toko-5
- Counter_jam Truk-1 = 230 + 70/60*60 = 300 < TW-Awal Toko-5 ada
waktu menunggu selama 330 – 300 = 30 menit
- Truk-1 selesai dilayani oleh Toko-5 pada saat counter_jam Truk-1 = 300 +
waktu pelayanan 10 menit + waktu tunggu 30 menit = 340
- Update nilai Total Travel Time = 230 + 70 + 10 + 30 = 340
- Update nilai Total Travel Distance = 100 + 50 + 30 + 70 = 250
- Sisa Demand Toko-5 = 15 < Muatan Truk-1 = 15 sehingga : Sisa Demand
Toko-5 = 15 – 15 = 0 dan Muatan Truk-1 = 15 – 15 = 0
- Id_konsumen = 4 + 1 = 5 (bersiap melayani konsumen yang kelima untuk
Truk-1) dan counter_node = 4 + 1 = 5
- Cek jumlah konsumen yang sudah dilayani melalui variabel counter_node
<= n dan hasilnya = sehingga lanjut untuk konsumen yang terakhir
- Cek apakah jam kerja (variabel Counter_jam) waktu sampai ke tujuan
belum melewati TW-Akhir konsumen berikut dan sisa muatan (variabel
Muatan) truk masih mencukupi untuk melayani konsumen berikut
(konsumen yang dilayani berikut adalah konsumen yang posisinya
terdekat dari Toko-5 yaitu Toko-3) Ganti ke Truk-2 karena muatan
Truk-1 sudah maksimal terpakai habis 100 satuan.
- V_terpakai = 1 + 1 = 2 (variabel penghitung jumlah truk yang dipakai
untuk menyelesaikan rute) dan id_konsumen = 1
- Cek apakah jumlah truk yang dibutuhkan tersedia ya (karena
perusahaan punya truk sejumlah 2 unit)
- Pilih Konsumen berikut yang terdekat dari Gudang, yaitu Toko-3
- Update Rute : Rute(2,1) = Toko-3
- Counter_jam Truk-2 = 0 + 160/60*60 = 160 > TW-Awal Toko-3 Bisa
Langsung Dilayani karena Toko-3 sudah buka
- Truk-2 selesai dilayani oleh Toko-3 pada saat counter_jam Truk-2 = 160 +
waktu pelayanan 10 menit = 170
- Update nilai Total Travel Time = 340 + 170 = 510
- Update nilai Total Travel Distance = 100 + 50 + 30 + 70 + 160 = 410
- Sisa Demand Toko-3 = 50 < Muatan Truk-2 = 100 sehingga : Sisa
Demand Toko-5 = 50 – 50 = 0 dan Muatan Truk-2 = 100 – 50 = 50
- Id_konsumen = 1 + 1 = 2 (bersiap melayani konsumen yang kedua untuk
Truk-2) dan counter_node = 5 + 1 = 6
- Cek jumlah konsumen yang sudah dilayani melalui variabel counter_node
<= n dan hasilnya > sehingga nilai variabel kunci dalam MACS-VEI yaitu
Total Visited Konsumen = counter_node -1 = 5
- Kembalikan semua nilai variabel Muatan untuk masing-masing truk
menjadi sama dengan kapasitas maksimal masing-masing truk dan
variabel Sisa_Demand untuk masing-masing konsumen menjadi sama
dengan Demand untuk masing-masing konsumen
- Nilai variabel ψgb menyimpan semua nilai variabel v_terpakai, Total
Travel Time, Total Travel Distance, Total Visited Konsumen, serta Rute.
- v_terpakai = 2; Total Travel Time = 510; Total Travel Distance = 410;
Total Visited Konsumen = 5; rute = Truk-1 (1-4-2-5); Truk-2 (3)
Setelah mendapat solusi awal dari metode nearest neighbour, baru metode MACS
dapat dimulai dengan iterasi diawali dengan ACS-VEI kemudian ACS-Time, dan
apabila menemukan solusi yang lebih baik baru melakukan update nilai variabel
ψgb .
Metode ACS-VEI
dilakukan dengan mengurangi Truk yang digunakan sebanyak 1 buah
v_VEI = v_terpakai-1 2 (dilihat dari hasil nearest neigbor) - 1 = 1
melakukan pembuatan rute baru dengan modul new_ant (ACS-VEI dan
ACS-Time sama)
Modul new_ant diawali dengan mengecek apakah counter_konsumen <=
jumlah konsumen 1 <= 5
Cek apakah id_konsumen=1 ada di rute, belum ada rute yang dipilih
tidak
Tambahkan id_konsumen = 1 pada himpunan NIK (himpunan konsumen
yang belum dikunjungi,nilai awal anggota_NIK = 0) anggota_NIK =
0+1 = 1
Cek apakah jam kerja (variabel Counter_jam) tiap konsumen berada
diantara waktu TW-Awal dan TW-Akhir konsumen berikutnya dan sisa
muatan (variabel Muatan) truk masih mencukupi untuk melayani
konsumen berikut. Counter_jam=0; TW Awal konsumen Toko-1 = 90;TW
Akhir Toko-1 = 540; Muatan=100 > 25 (demand Toko-1) ya,semua syarat
terpenuhi
Menghitung Delivery Time ke Toko-1; Delta Time ke Toko-1; Distance
Gudang ke Toko-1; Closeness Gudang ke Toko-1; Nilai Akhir Gudang ke
Toko-1; Jumlah Nilai Akhir.
Delivery Time ke Toko-1 = max{0 + (100/60) X 60 menit = 100,
90} = 100
Delta Time ke Toko-1 = 100 – 0 = 100
Distance Gudang ke Toko-1 = 100 x (540-0) = 54000
Distance Gudang ke Toko-1 = max{ 1, 54000-0} = 54000
Closeness Gudang ke Toko-1 = 1/54000 = 1.851 x 10-5
Nilai Akhir Gudang ke Toko-1 = [1/(5x510)] x 1.851 x 10-5 = 7.26 x
10-9
Jumlah Nilai Akhir = 0 + 7.26 x 10-9= 7.26 x 10-9
Menambahkan id_konsumen = 1+1 = 2
Mengecek apakah id_konsumen<=jumlah konsumen 2 <= 5
Cek apakah id_konsumen = 2 ada di rute, belum ada rute yang dipilih
tidak
Tambahkan id_konsumen = 2 pada himpunan NIK anggota_NIK = 1+1
=2
Cek apakah jam kerja (variabel Counter_jam) tiap konsumen berada
diantara waktu TW-Awal dan TW-Akhir konsumen berikutnya dan sisa
muatan (variabel Muatan) truk masih mencukupi untuk melayani
konsumen berikut. Counter_jam=0; TW Awal konsumen Toko-2 = 200;
TW Akhir Toko-2 = 420; Muatan=100 > 50 (demand Toko-2) ya,semua
syarat terpenuhi
Menghitung Delivery Time ke Toko-2; Delta Time ke Toko-2; Distance
Gudang ke Toko-2; Closeness Gudang ke Toko-2; Nilai Akhir Gudang ke
Toko-2; Jumlah Nilai Akhir.
Delivery Time ke Toko-2 = max{0 + (180/60) X 60 menit = 180,
200} = 200
Delta Time ke Toko-2 = 200 – 0 = 200
Distance Gudang ke Toko-2 = 200 x (420-0) = 84000
Distance Gudang ke Toko-2 = max{ 1, 84000-0} = 84000
Closeness Gudang ke Toko-2 = 1/84000 = 1.19 x 10-5
Nilai Akhir Gudang ke Toko-2 = [1/(5x510)] x 1.19 x 10 -5 = 4.67 x
10-9
Jumlah Nilai Akhir = 7.26 x 10-9 + 4.67 x 10-9 = 11.93 x 10-9
Menambahkan id_konsumen = 2+1 = 3
Mengecek apakah id_konsumen<=jumlah konsumen 3 <= 5
Cek apakah id_konsumen =3 ada di rute, belum ada rute yang dipilih
tidak
Tambahkan id_konsumen = 3 pada himpunan NIK anggota_NIK = 2
+1 = 3
Cek apakah jam kerja (variabel Counter_jam) tiap konsumen berada
diantara waktu TW-Awal dan TW-Akhir konsumen berikutnya dan sisa
muatan (variabel Muatan) truk masih mencukupi untuk melayani
konsumen berikut. Counter_jam=0; TW Awal konsumen Toko-3 = 120;
TW Akhir Toko-3 = 600; Muatan=100 > 50 (demand Toko-3) ya,semua
syarat terpenuhi
Menghitung Delivery Time ke Toko-3; Delta Time ke Toko-3; Distance
Gudang ke Toko-3; Closeness Gudang ke Toko-3; Nilai Akhir Gudang ke
Toko-3; Jumlah Nilai Akhir.
Delivery Time ke Toko-3 = max{0 + (160/60) X 60 menit = 160,
120} = 160
Delta Time ke Toko-3 = 160 – 0 = 160
Distance Gudang ke Toko-3 = 160 x (600-0) = 96000
Distance Gudang ke Toko-3 = max{ 1, 96000-0} = 96000
Closeness Gudang ke Toko-3 = 1/96000 = 1.042 x 10-5
Nilai Akhir Gudang ke Toko-3 = [1/(5x510)] x 1.042 x 10 -5= 4.087
x 10-9
Jumlah Nilai Akhir = 4.087 x 10-9 + 11.93 x 10-9 = 16.017 x 10-9
Menambahkan id_konsumen = 3+1 = 4
Mengecek apakah id_konsumen<=jumlah konsumen 4 <= 5
Cek apakah id_konsumen = 4 ada di rute, belum ada rute yang dipilih
tidak
Tambahkan id_konsumen = 4 pada himpunan NIK anggota_NIK = 3 +
1=4
Cek apakah jam kerja (variabel Counter_jam) tiap konsumen berada
diantara waktu TW-Awal dan TW-Akhir konsumen berikutnya dan sisa
muatan (variabel Muatan) truk masih mencukupi untuk melayani
konsumen berikut. Counter_jam=0; TW Awal konsumen Toko-4 = 180;
TW Akhir Toko-4 = 600; Muatan=100 > 10 (demand Toko-4) ya,semua
syarat terpenuhi
Menghitung Delivery Time ke Toko-4; Delta Time ke Toko-4; Distance
Gudang ke Toko-4; Closeness Gudang ke Toko-4; Nilai Akhir Gudang ke
Toko-4; Jumlah Nilai Akhir.
Delivery Time ke Toko-4 = max{0 + (110/60) X 60 menit = 110,
180} = 180
Delta Time ke Toko-4 = 180 – 0 = 180
Distance Gudang ke Toko-4 = 180 x (600-0) = 108000
Distance Gudang ke Toko-4 = max{ 1, 108000-0} = 108000
Closeness Gudang ke Toko-4 = 1/108000 = 9.26 x 10-6
Nilai Akhir Gudang ke Toko-4 = [1/(5x510)] x 9.26 x 10-6= 3.63 x
10-9
Jumlah Nilai Akhir = 16.017 x 10-9 + 3.63 x 10-9 = 19.647 x 10-9
Menambahkan id_konsumen = 4+1 = 5
Mengecek apakah id_konsumen<=jumlah konsumen 5 <= 5
Cek apakah id_konsumen = 5 ada di rute belum ada rute yang dipilih
tidak
Tambahkan id_konsumen = 5 pada himpunan NIK anggota_NIK = 4 +
1=5
Cek apakah jam kerja (variabel Counter_jam) tiap konsumen berada
diantara waktu TW-Awal dan TW-Akhir konsumen berikutnya dan sisa
muatan (variabel Muatan) truk masih mencukupi untuk melayani
konsumen berikut. Counter_jam=0; TW Awal konsumen Toko-5 = 330;
TW Akhir Toko-5 = 540; Muatan=100 > 15 (demand Toko-5) ya,semua
syarat terpenuhi
Menghitung Delivery Time ke Toko-5; Delta Time ke Toko-5; Distance
Gudang ke Toko-5; Closeness Gudang ke Toko-5; Nilai Akhir Gudang ke
Toko-5; Jumlah Nilai Akhir.
Delivery Time ke Toko-5 = max{0 + (140/60) X 60 menit = 140,
330} = 330
Delta Time ke Toko-5 = 330 – 0 = 330
Distance Gudang ke Toko-5 = 330 x (540-0) = 178200
Distance Gudang ke Toko-5 = max{ 1, 178200-0} = 178200
Closeness Gudang ke Toko-5 = 1/178200 = 5.611 x 10-6
Nilai Akhir Gudang ke Toko-5 = [1/(5x510)] x 5.611 x 10 -6 =2.2 x
10-9
Jumlah Nilai Akhir = 19.647 x 10-9 + 2.2 x 10-9 = 21.85 x 10-9
Menambahkan id_konsumen = 5+1 = 6
Mengecek apakah id_konsumen<=jumlah konsumen 6 > 5
Cek apakah anggota_NIK=0 tidak, anggota_NIK = 5
Random_pilih_node = 0.62
Cek apakah random_pilih_node <= 0.9 0.62 <=0.9 eksploitasi
Pilih toko dengan Nilai Akhir Tertinggi Toko-1 (7.26 x 10-9)
Cek apakah jam kerja (variabel Counter_jam) waktu sampai ke tujuan
belum melewati TW-Akhir konsumen berikut dan sisa muatan (variabel
Muatan) truk masih mencukupi untuk melayani Toko-1 Tidak ada
pergantian mobil, tetap melanjutkan rute untuk Truk-1
Simpan rute(1,1)= Toko-1
Anggota_NIK = 0; Counter_NIK = 1; random_pilih_node = 0
Counter_jam Truk-1 = 0 + (100/60) X 60 menit = 100 > TW-Awal Toko-
1 Bisa Langsung Dilayani karena Toko-1 sudah buka
Truk-1 selesai dilayani oleh Toko-1 pada saat counter_jam Truk-1 = 100 +
waktu pelayanan 10 menit = 110
Update nilai Total Travel Time = 0 + 110 = 110
Update nilai Total Travel Distance = 0 + 100 = 100
Sisa Demand Toko-1 = 25 < Muatan Truk-1 = 100 sehingga : Sisa
Demand Toko-1 = 25 – 25 = 0 dan Muatan Truk-1 = 100 – 25 = 75
Counter_konsumen = 1 + 1 = 2 (bersiap melayani konsumen yang kedua
untuk Truk-1) dan counter_node = 1 + 1 = 2
Pheromone trail (0,1) = (1-0.1)(1/(5x110)) + 0.1(1/(5x510)) = 1.64 x 10 -3 +
3.92 x 10-5 = 1.68 x 10-3
Truk-1 berada di Toko-1
Cek apakah counter_node <= n 2 <=5
Cek apakah counter_konsumen <= n 2 <= 5
Cek id_konsumen = 1 ada di rute ya
Id_konsumen =1+1 = 2
Cek apakah id_konsumen = 2 ada di rute belum
Tambahkan id_konsumen = 2 pada himpunan NIK anggota_NIK = 0 +
1=1
Cek apakah jam kerja (variabel Counter_jam) tiap konsumen berada
diantara waktu TW-Awal dan TW-Akhir konsumen berikutnya dan sisa
muatan (variabel Muatan) truk masih mencukupi untuk melayani
konsumen berikut. Counter_jam=110; TW Awal konsumen Toko-2 = 200;
TW Akhir Toko-2 = 420; Muatan=75 > 50 (demand Toko-2) ya,semua
syarat terpenuhi
Menghitung Delivery Time ke Toko-2; Delta Time ke Toko-2; Distance
Gudang ke Toko-2; Closeness Gudang ke Toko-2; Nilai Akhir Gudang ke
Toko-2; Jumlah Nilai Akhir.
Delivery Time ke Toko-2 = max{110 + (60/60) X 60 menit = 170,
200} = 200
Delta Time ke Toko-2 = 200 – 110 = 90
Distance Gudang ke Toko-2 = 90 x (420-110) = 27900
Distance Gudang ke Toko-2 = max{ 1, 27900-0} = 27900
Closeness Gudang ke Toko-2 = 1/27900 = 3.58 x 10-5
Nilai Akhir Gudang ke Toko-2 = [1/(5x510)] x 3.58 x 10 -5 = 1.4 x
10-8
Jumlah Nilai Akhir = 0 + 1.4 10-8 = 1.4 x 10-8
Menambahkan id_konsumen = 2+1 = 3
Mengecek apakah id_konsumen<=jumlah konsumen 3 <= 5
Cek apakah id_konsumen = 3 ada di rute belum
Tambahkan id_konsumen = 3 pada himpunan NIK anggota_NIK = 1
+1 = 2
Cek apakah jam kerja (variabel Counter_jam) tiap konsumen berada
diantara waktu TW-Awal dan TW-Akhir konsumen berikutnya dan sisa
muatan (variabel Muatan) truk masih mencukupi untuk melayani
konsumen berikut. Counter_jam = 110; TW Awal konsumen Toko-3 =
120; TW Akhir Toko-3 = 600; Muatan=75 > 50 (demand Toko-3)
ya,semua syarat terpenuhi
Menghitung Delivery Time ke Toko-3; Delta Time ke Toko-3; Distance
Gudang ke Toko-3; Closeness Gudang ke Toko-3; Nilai Akhir Gudang ke
Toko-3; Jumlah Nilai Akhir.
Delivery Time ke Toko-3 = max{110 + (80/60) X 60 menit = 190,
120} = 190
Delta Time ke Toko-3 = 190 – 110 = 80
Distance Gudang ke Toko-3 = 80 x (600-110) = 39200
Distance Gudang ke Toko-3 = max{ 1, 39200-0} = 39200
Closeness Gudang ke Toko-3 = 1/39200 = 2.55 x 10-5
Nilai Akhir Gudang ke Toko-3 = [1/(5x510)] x 2.55 x 10-5= 1 x 10-8
Jumlah Nilai Akhir = 1.4 x 10-8 + 1 x 10-8 = 2.4 x 10-8
Menambahkan id_konsumen = 3+1 = 4
Mengecek apakah id_konsumen<=jumlah konsumen 4 <= 5
Cek apakah id_konsumen = 4 ada di rute, belum ada rute yang dipilih
tidak
Tambahkan id_konsumen = 4 pada himpunan NIK anggota_NIK = 2 +
1=3
Cek apakah jam kerja (variabel Counter_jam) tiap konsumen berada
diantara waktu TW-Awal dan TW-Akhir konsumen berikutnya dan sisa
muatan (variabel Muatan) truk masih mencukupi untuk melayani
konsumen berikut. Counter_jam=110; TW Awal konsumen Toko-4 = 180;
TW Akhir Toko-4 = 600; Muatan=75 > 10 (demand Toko-4) ya,semua
syarat terpenuhi
Menghitung Delivery Time ke Toko-4; Delta Time ke Toko-4; Distance
Gudang ke Toko-4; Closeness Gudang ke Toko-4; Nilai Akhir Gudang ke
Toko-4; Jumlah Nilai Akhir.
Delivery Time ke Toko-4 = max{110 + (50/60) X 60 menit = 160,
180} = 160
Delta Time ke Toko-4 = 160 – 110 = 50
Distance Gudang ke Toko-4 = 50 x (600-110) = 24500
Distance Gudang ke Toko-4 = max{ 1, 24500-0} = 24500
Closeness Gudang ke Toko-4 = 1/24500 = 4.08 x 10-5
Nilai Akhir Gudang ke Toko-4 = [1/(5x510)] x 4.08 x 10-5= 1.6 x 10-
8
Jumlah Nilai Akhir = 2.4 x 10-8 + 1.6 x 10-8 = 4 x 10-8
Menambahkan id_konsumen = 4+1 = 5
Mengecek apakah id_konsumen<=jumlah konsumen 5 <= 5
Cek apakah id_konsumen = 5 ada di rute belum ada rute yang dipilih
tidak
Tambahkan id_konsumen = 5 pada himpunan NIK anggota_NIK = 3 +
1=4
Cek apakah jam kerja (variabel Counter_jam) tiap konsumen berada
diantara waktu TW-Awal dan TW-Akhir konsumen berikutnya dan sisa
muatan (variabel Muatan) truk masih mencukupi untuk melayani
konsumen berikut. Counter_jam=110; TW Awal konsumen Toko-5 = 330;
TW Akhir Toko-5 = 540; Muatan=100 > 15 (demand Toko-5) ya,semua
syarat terpenuhi
Menghitung Delivery Time ke Toko-5; Delta Time ke Toko-5; Distance
Gudang ke Toko-5; Closeness Gudang ke Toko-5; Nilai Akhir Gudang ke
Toko-5; Jumlah Nilai Akhir.
Delivery Time ke Toko-5 = max{110 + (120/60) X 60 menit = 230,
330} = 330
Delta Time ke Toko-5 = 330 – 110 = 220
Distance Gudang ke Toko-5 = 220 x (540-110) = 94600
Distance Gudang ke Toko-5 = max{ 1, 94600-0} = 94600
Closeness Gudang ke Toko-5 = 1/94600 = 1.057 x 10-5
Nilai Akhir Gudang ke Toko-5 = [1/(5x510)] x 1.057 x 10 -5 = 4.14 x
10-9
Jumlah Nilai Akhir = 4 x 10-8 + 4.14 x 10-9 = 4.14 x 10-8
Menambahkan id_konsumen = 5+1 = 6
Mengecek apakah id_konsumen<=jumlah konsumen 6 > 5
Cek apakah anggota_NIK=0 tidak, anggota_NIK = 4
Random_pilih_node = 0.03
Cek apakah random_pilih_node <= 0.9 0.03 <=0.9 eksploitasi
Pilih toko dengan Nilai Akhir Tertinggi Toko-3 (1 x 10-8)
Cek apakah jam kerja (variabel Counter_jam) waktu sampai ke tujuan
belum melewati TW-Akhir konsumen berikut dan sisa muatan (variabel
Muatan) truk masih mencukupi untuk melayani Toko-3 Tidak ada
pergantian mobil, tetap melanjutkan rute untuk Truk-1
Simpan rute(1,2)= Toko-3
Anggota_NIK = 0; Counter_NIK = 1; random_pilih_node = 0
Counter_jam Truk-1 = 110 + (80/60) X 60 menit = 190 > TW-Awal Toko-
3 Bisa Langsung Dilayani karena Toko-3 sudah buka
Truk-1 selesai dilayani oleh Toko-3 pada saat counter_jam Truk-1 = 190 +
waktu pelayanan 10 menit = 200
Update nilai Total Travel Time = 110 + 200 = 320
Update nilai Total Travel Distance = 100 + 80 = 180
Sisa Demand Toko-3 = 25 < Muatan Truk-1 = 100 sehingga : Sisa
Demand Toko-3 = 50 – 50 = 0 dan Muatan Truk-1 = 100 – 75 = 25
Counter_konsumen = 2 + 1 = 3 (bersiap melayani konsumen yang ketiga
untuk Truk-1) dan counter_node = 2 + 1 = 3
Pheromone trail (0,1) = (1-0.1)(1/(5x320)) + 0.1(1/(5x510)) = 5.625 x 10-4
+ 3.92 x 10-5 = 6.017 x 10-4
Truk-1 berada di Toko-3
Cek apakah counter_node <= n 3 <=5
Cek apakah counter_konsumen <= n 3 <= 5
Cek id_konsumen = 1 ada di rute ya
Id_konsumen =1+1 = 2
Cek apakah id_konsumen = 2 ada di rute belum
Tambahkan id_konsumen = 2 pada himpunan NIK anggota_NIK = 0 +
1=1
Cek apakah jam kerja (variabel Counter_jam) tiap konsumen berada
diantara waktu TW-Awal dan TW-Akhir konsumen berikutnya dan sisa
muatan (variabel Muatan) truk masih mencukupi untuk melayani
konsumen berikut. Counter_jam=320; TW Awal konsumen Toko-2 = 200;
TW Akhir Toko-2 = 420; Muatan=25 < 50 (demand Toko-2) tidak, 1 syarat
tidak terpenuhi
Id_konsumen =2+1 = 3
Cek apakah id_konsumen = 3 ada di rute sudah
Id_konsumen =3+1 = 4
Cek apakah id_konsumen = 4 ada di rute belum
Tambahkan id_konsumen = 4 pada himpunan NIK anggota_NIK = 1 +
1=2
Cek apakah jam kerja (variabel Counter_jam) tiap konsumen berada
diantara waktu TW-Awal dan TW-Akhir konsumen berikutnya dan sisa
muatan (variabel Muatan) truk masih mencukupi untuk melayani
konsumen berikut. Counter_jam=320; TW Awal konsumen Toko-4 = 180;
TW Akhir Toko-4 = 600; Muatan=25 > 10 (demand Toko-4) ya,semua
syarat terpenuhi
Menghitung Delivery Time ke Toko-4; Delta Time ke Toko-4; Distance
Gudang ke Toko-4; Closeness Gudang ke Toko-4; Nilai Akhir Gudang ke
Toko-4; Jumlah Nilai Akhir.
Delivery Time ke Toko-4 = max{320 + (50/60) X 60 menit = 370,
180} = 370
Delta Time ke Toko-4 = 370 – 320 = 50
Distance Gudang ke Toko-4 = 50 x (600-320) = 14000
Distance Gudang ke Toko-4 = max{ 1, 14000-0} = 14000
Closeness Gudang ke Toko-4 = 1/14000 = 7.14 x 10-5
Nilai Akhir Gudang ke Toko-4 = [1/(5x510)] x 7.14 x 10-5= 2.8 x 10-
8
Jumlah Nilai Akhir = 0 + 2.8 x 10-8 = 2.8 x 10-8
Menambahkan id_konsumen = 4+1 = 5
Mengecek apakah id_konsumen<=jumlah konsumen 5 <= 5
Cek apakah id_konsumen = 5 ada di rute belum
Tambahkan id_konsumen = 5 pada himpunan NIK anggota_NIK = 2 +
1=3
Cek apakah jam kerja (variabel Counter_jam) tiap konsumen berada
diantara waktu TW-Awal dan TW-Akhir konsumen berikutnya dan sisa
muatan (variabel Muatan) truk masih mencukupi untuk melayani
konsumen berikut. Counter_jam=320; TW Awal konsumen Toko-5 = 330;
TW Akhir Toko-5 = 540; Muatan=25 > 15 (demand Toko-5) ya,semua
syarat terpenuhi
Menghitung Delivery Time ke Toko-5; Delta Time ke Toko-5; Distance
Gudang ke Toko-5; Closeness Gudang ke Toko-5; Nilai Akhir Gudang ke
Toko-5; Jumlah Nilai Akhir.
Delivery Time ke Toko-5 = max{320 + (80/60) X 60 menit = 400,
330} = 400
Delta Time ke Toko-5 = 400 – 320 = 80
Distance Gudang ke Toko-5 = 80 x (540-320) = 17600
Distance Gudang ke Toko-5 = max{ 1, 17600-0} = 17600
Closeness Gudang ke Toko-5 = 1/17600 = 5.68 x 10-5
Nilai Akhir Gudang ke Toko-5 = [1/(5x510)] x 5.68 x 10-5 = 2.23 x
10-8
Jumlah Nilai Akhir = 2.8 x 10-8 + 2.23 x 10-8 = 5.03 x 10-8
Menambahkan id_konsumen = 5+1 = 6
Mengecek apakah id_konsumen<=jumlah konsumen 6 > 5
Cek apakah anggota_NIK=0 tidak, anggota_NIK = 3
Random_pilih_node = 0.45
Cek apakah random_pilih_node <= 0.9 0.45 <=0.9 eksploitasi
Pilih toko dengan Nilai Akhir Tertinggi Toko-4 (2.8 x 10-8)
Cek apakah jam kerja (variabel Counter_jam) waktu sampai ke tujuan
belum melewati TW-Akhir konsumen berikut dan sisa muatan (variabel
Muatan) truk masih mencukupi untuk melayani Toko-4 Tidak ada
pergantian mobil, tetap melanjutkan rute untuk Truk-1
Simpan rute(1,3)= Toko-4
Anggota_NIK = 0; Counter_NIK = 1; random_pilih_node = 0
Counter_jam Truk-1 = 320 + (50/60) X 60 menit = 370 > TW-Awal Toko-
4 Bisa Langsung Dilayani karena Toko-4 sudah buka
Truk-1 selesai dilayani oleh Toko-4 pada saat counter_jam Truk-1 = 370 +
waktu pelayanan 10 menit = 380
Update nilai Total Travel Time = 380
Update nilai Total Travel Distance = 180 + 50 = 230
Sisa Demand Toko-4 = 10 < Muatan Truk-1 = 25 sehingga : Sisa Demand
Toko-3 = 10 – 10 = 0 dan Muatan Truk-1 = 25 – 10 = 15
Counter_konsumen = 3 + 1 = 4 (bersiap melayani konsumen yang
keempat untuk Truk-1) dan counter_node = 3 + 1 = 4
Pheromone trail (0,1) = (1-0.1)(1/(5x380)) + 0.1(1/(5x510)) = 4.75 x 10 -4 +
3.92 x 10-5 = 5.13 x 10-4
Truk-1 berada di Toko-4
Cek apakah counter_node <= n 4 <=5
Cek apakah counter_konsumen <= n 4<= 5
Cek id_konsumen = 1 ada di rute ya
Id_konsumen =1+1 = 2
Cek apakah id_konsumen = 2 ada di rute belum
Tambahkan id_konsumen = 2 pada himpunan NIK anggota_NIK = 0 +
1=1
Cek apakah jam kerja (variabel Counter_jam) tiap konsumen berada
diantara waktu TW-Awal dan TW-Akhir konsumen berikutnya dan sisa
muatan (variabel Muatan) truk masih mencukupi untuk melayani
konsumen berikut. Counter_jam=320; TW Awal konsumen Toko-2 = 200;
TW Akhir Toko-2 = 420; Muatan=15 < 50 (demand Toko-2) tidak, 1 syarat
tidak terpenuhi
Menambahkan id_konsumen = 2+1 = 3
Mengecek apakah id_konsumen<=jumlah konsumen 3 <= 5
Cek apakah id_konsumen = 3 ada di rute sudah
Menambahkan id_konsumen = 3+1 = 4
Mengecek apakah id_konsumen<=jumlah konsumen 4 <= 5
Cek apakah id_konsumen = 4 ada di rute sudah
Menambahkan id_konsumen = 4+1 = 5
Mengecek apakah id_konsumen<=jumlah konsumen 5 <= 5
Cek apakah id_konsumen = 5 ada di rute belum
Tambahkan id_konsumen = 5 pada himpunan NIK anggota_NIK = 1 +
1=2
Cek apakah jam kerja (variabel Counter_jam) tiap konsumen berada
diantara waktu TW-Awal dan TW-Akhir konsumen berikutnya dan sisa
muatan (variabel Muatan) truk masih mencukupi untuk melayani
konsumen berikut. Counter_jam=380; TW Awal konsumen Toko-5 = 330;
TW Akhir Toko-5 = 540; Muatan=15 <= 15 (demand Toko-5) ya,semua
syarat terpenuhi
Menghitung Delivery Time ke Toko-5; Delta Time ke Toko-5; Distance
Gudang ke Toko-5; Closeness Gudang ke Toko-5; Nilai Akhir Gudang ke
Toko-5; Jumlah Nilai Akhir.
Delivery Time ke Toko-5 = max{380 + (60/60) X 60 menit = 440,
330} = 440
Delta Time ke Toko-5 = 440 – 380 = 60
Distance Gudang ke Toko-5 = 60 x (540-380) = 9600
Distance Gudang ke Toko-5 = max{ 1, 9600-0} = 9600
Closeness Gudang ke Toko-5 = 1/9600 = 1.042 x 10-4
Nilai Akhir Gudang ke Toko-5 = [1/(5x510)] x 1.042 x 10 -4 = 4.086
x 10-8
Jumlah Nilai Akhir = 0 + 4.086 x 10-8 = 4.086 x 10-8
Menambahkan id_konsumen = 5+1 = 6
Mengecek apakah id_konsumen<=jumlah konsumen 6 > 5
Cek apakah anggota_NIK=0 tidak, anggota_NIK = 2
Random_pilih_node = 0.76
Cek apakah random_pilih_node <= 0.9 0.76 <=0.9 eksploitasi
Pilih toko dengan Nilai Akhir Tertinggi Toko-5 (4.086 x 10-8)
Cek apakah jam kerja (variabel Counter_jam) waktu sampai ke tujuan
belum melewati TW-Akhir konsumen berikut dan sisa muatan (variabel
Muatan) truk masih mencukupi untuk melayani Toko-5 Tidak ada
pergantian mobil, tetap melanjutkan rute untuk Truk-1
Simpan rute(1,4)= Toko-5
Anggota_NIK = 0; Counter_NIK = 1; random_pilih_node = 0
Counter_jam Truk-1 = 380 + (60/60) X 60 menit = 440 > TW-Awal Toko-
5 Bisa Langsung Dilayani karena Toko-5 sudah buka
Truk-1 selesai dilayani oleh Toko-5 pada saat counter_jam Truk-1 = 380 +
waktu pelayanan 10 menit = 390
Update nilai Total Travel Time = 390
Update nilai Total Travel Distance = 230 + 60 = 290
Sisa Demand Toko-5 = 15 <= Muatan Truk-1 = 15 sehingga : Sisa
Demand Toko-5 = 15 – 15 = 0 dan Muatan Truk-1 = 15 – 15 = 0
Muatan Truk-1 sudah habis, maka diganti dengan Truk-2
Counter_konsumen = 4 + 1 = 5 (bersiap melayani konsumen yang kelima
untuk Truk-2) dan counter_node = 4 + 1 = 5
Pheromone trail (0,1) = (1-0.1)(1/(5x390)) + 0.1(1/(5x510)) = 4.615 x 10-4
+ 3.92 x 10-5 = 5.01 x 10-4
Truk-1 berada di Toko-5
V_terpakai=1+1=2
Cek apakah jumlah truk yang dibutuhkan tersedia ya (karena
perusahaan punya truk sejumlah 2 unit)
Id_kendaraan = 1+1=2
Cek apakah counter_node <= n 5 <=5
Cek apakah counter_konsumen <= n 5 <= 5
Cek id_konsumen = 1 ada di rute ya
Id_konsumen = 1+1 =2
Cek id_konsumen = 2 ada di rute belum
Cek apakah id_konsumen = 2 ada di rute belum
Tambahkan id_konsumen = 2 pada himpunan NIK anggota_NIK = 0 +
1=1
Cek apakah jam kerja (variabel Counter_jam) tiap konsumen berada
diantara waktu TW-Awal dan TW-Akhir konsumen berikutnya dan sisa
muatan (variabel Muatan) truk masih mencukupi untuk melayani
konsumen berikut. Counter_jam=0; TW Awal konsumen Toko-2 = 200;
TW Akhir Toko-2 = 420; Muatan=100 > 50 (demand Toko-2) ya,semua
syarat terpenuhi
Menghitung Delivery Time ke Toko-2; Delta Time ke Toko-2; Distance
Gudang ke Toko-2; Closeness Gudang ke Toko-2; Nilai Akhir Gudang ke
Toko-2; Jumlah Nilai Akhir.
Delivery Time ke Toko-2 = max{0 + (180/60) X 60 menit = 180,
200} = 200
Delta Time ke Toko-2 = 200 – 0 = 200
Distance Gudang ke Toko-2 = 200 x (420-0) = 84000
Distance Gudang ke Toko-2 = max{ 1, 84000-0} = 84000
Closeness Gudang ke Toko-2 = 1/84000 = 1.19 x 10-5
Nilai Akhir Gudang ke Toko-2 = [1/(5x510)] x 1.19 x 10 -5 = 4.67 x
10-9
Jumlah Nilai Akhir = 0 + 4.67 x 10-9 = 4.67 x 10-9
Id_konsumen = 2+1 =3
Cek id_konsumen = 3 ada di rute sudah
Id_konsumen = 3+1 =4
Cek id_konsumen = 4 ada di rute sudah
Id_konsumen = 4+1 =5
Cek id_konsumen = 5 ada di rute sudah
Id_konsumen = 5+1 =6
Mengecek apakah id_konsumen<=jumlah konsumen 6 > 5
Cek apakah anggota_NIK=0 tidak, anggota_NIK = 1
Random_pilih_node = 0.06
Cek apakah random_pilih_node <= 0.9 0.06 <=0.9 eksploitasi
Pilih toko dengan Nilai Akhir Tertinggi Toko-2 (4.67 x 10-9)
Cek apakah jam kerja (variabel Counter_jam) waktu sampai ke tujuan
belum melewati TW-Akhir konsumen berikut dan sisa muatan (variabel
Muatan) truk masih mencukupi untuk melayani Toko-2 Tidak ada rute
selanjtunya
Simpan rute(2,1)= Toko-2
Anggota_NIK = 0; Counter_NIK = 1; random_pilih_node = 0
Counter_jam Truk-1 = 0 + (180/60) X 60 menit = 180 > TW-Awal Toko-
2 Bisa Langsung Dilayani karena Toko-2 sudah buka
Truk-2 selesai dilayani oleh Toko-2 pada saat counter_jam Truk-1 = 180 +
waktu pelayanan 10 menit = 190
Update nilai Total Travel Time = 190+390=580
Update nilai Total Travel Distance = 180+290=470
Sisa Demand Toko-2 = 50 <= Muatan Truk-2 = 100 sehingga : Sisa
Demand Toko-2 = 50 – 50 = 0 dan Muatan Truk-2 = 100– 50 = 0
Pheromone trail (0,1) = (1-0.1)(1/(5x580)) + 0.1(1/(5x510)) = 3.44 x 10 -4 +
3.92 x 10-5 = 3.84 x 10-4
Truk-2 berada di Toko-2
V_terpakai=2+1=3
Cek apakah v_terpakai <= v 3<2
Total visited konsumen =5
Counter node=0
Muatan truk dan sisa demand konsumen dikembalikan menjadi nilai asal.
Nilai Ψk adalah v_terpakai=2, total travel time = 580, total travel
distance=470, total visited konsumen = 5
Cek apakah node(1) ada di rute ada
Id_konsumen = 1+1=2
Cek apakah node(2) ada di rute ada
Id_konsumen = 2+1=3
Cek apakah node(3) ada di rute ada
Id_konsumen = 3+1=4
Cek apakah node(4) ada di rute ada
Id_konsumen = 4+1=5
Cek apakah node(5) ada di rute ada
Id_konsumen = 5+1=6
Cek apakah id_konsumen <=n 6>5 tidak;id_konsumen =1
Cek apakah Ψk > ΨVEI v_VEI =2; total total visited konsumen =
5
Bukan solusi terbaik untuk ACS-VEI
Pheromone trail (0,1) = (1-0.1)(1/(5x180)) + 0.1(1/(5x580)) = 1 x 10-3 +
3.45 x 10-5 = 1.0392 x 10-3
Pheromone trail (1,3) = (1-0.1)(1/(5x320)) + 0.1(1/(5x580)) = 5.625 x 10-4
+ 3.45 x 10-5 = 5.974 x 10-4
Pheromone trail (3,4) = (1-0.1)(1/(5x380)) + 0.1(1/(5x580)) = 4.75 x 10 -4 +
3.45 x 10-5 = 5.095 x 10-4
Pheromone trail (4,5) = (1-0.1)(1/(5x390)) + 0.1(1/(5x580)) = 4.615 x 10-4
+ 3.45 x 10-5 = 4.96 x 10-4
Pheromone trail (5,2) = (1-0.1)(1/(5x580)) + 0.1(1/(5x580)) = 3.1 x 10 -4 +
3.45 x 10-5 = 3.55 x 10-4
ACS-TIME
Dilakukan modul new ant sama dengan hasil ASC-VEI
Cek apakah total travel time Ψk < total travel time Ψgb 580 > 510
Hasil total travel time tidak diperbarui menggunakan total travel time
nearest neigbor
MACS
Cek hasil total travel time,jumlah v_terpakai, total travel distance hasil
perhitungan dengan hasil nearest neigbor lebih baik hasil nearest
neigbor
Lakukan iterasi lagi (ACS-VEI dan ACS Time)