BAB IV PEMBAHASAN
4.1 Prosedur Algoritma IACO
Berdasarkan Bin et al (2009), prosedur dari algoritma IACO ditunjukkan
pada Gambar 4.1.
Prosedur Algoritma IACO
mulai
inisialisasi()
untuk t dari 1 sampai dengan iterasi_max
lakukan konstruksi_rute() lakukan cek nilai_random ≤ Pm(t)
lakukan mutasi() lakukan local_search()
lakukan update_pheromone()
jika (t < iterasi_max) maka,
kembali ke proses konstruksi_rute() jika (t = iterasi_max) maka,
cetak solusi terbaik selesai
selesai
Gambar 4.1 Prosedur algoritma IACO
4.1.1 Prosedur Inisialisasi
Prosedur inisialisasi terdiri dari pengisian parameter dan pengisian data
pelanggan yang disajikan pada Gambar 4.2.
Prosedur inisialisasi
mulai
pengisian parameter() pengisian data pelanggan() selesai
Gambar 4.2 Prosedur inisialisasi
Dalam prosedur pengisian parameter, nilai E atau jarak tempuh maksimum
kendaraan mempunyai dua kemungkinan. Kemungkinan yang pertama adalah
nilai E = 0, artinya dalam pemilihan kota yang akan dikunjungi hanya
memperhatikan batasan kapasitas maksimum kendaraan (W), dan W pasti positif
(W > 0). Kemungkinan yang kedua adalah nilai E positif (E > 0), artinya dalam
pemilihan kota yang akan dikunjungi, batasan yang harus diperhatikan adalah
kapasitas maksimum kendaraan (W) dan total jarak tempuh maksimum kendaraan
(E). Pada parameter service duration, nilai tersebut berarti bahwa durasi
pelayanan pada setiap kota yang dikunjungi, dan nilai tersebut diimplementasikan
atau ditambahkan ke dalam jarak di setiap kota. Prosedur pengisian parameter
disajikan pada Gambar 4.3.
Prosedur pengisian parameter
mulai
jumlah kendaraan = nV
jarak tempuh maksimum kendaraan = E
kapasitas maksimum kendaraan = W
pengendali intensitas jejak semut = alpha
pengendali visibilitas jejak semut = beta
konstanta pengontrol kecepatan penguapan jejak semut = rho
konstanta Q = Q
feromon awal = thau
total iterasi = iterasi_max
service duration = serviceDuration
selesai
Prosedur pengisian data pelanggan dibedakan menjadi 2 tipe, yakni posisi
pelanggan dengan koordinat x dan y, dan posisi pelanggan yang tidak ditentukan
dengan koordinat x dan y. Posisi pelanggan yang tidak ditentukan dengan
koordinat x dan y berarti jarak antar pelanggan sudah diketahui. Prosedur
pengisian data pelanggan disajikan pada Gambar 4.4.
Prosedur pengisian data pelanggan
mulai
jumlah pelanggan = nC
jika (posisi pelanggan = koordinat (x,y)) maka, untuk i dari 0 sampai dengan nC
posisi pelanggan i pada koordinat X = xi
posisi pelanggan i pada koordinat Y = yi
permintaan pelanggan i = qi
set matriks jarak() selesai
jika yang lain maka,
untuk i dari 0 sampai dengan nC
permintaan pelanggan i = qi
untuk j dari 0 sampai dengan nC
jika (i = j) maka,
jarak pelanggan i ke pelanggan j = d(i,j) = 0 jika yang lain maka,
jarak pelanggan i ke pelanggan j = d(i,j) > 0 selesai
selesai selesai
Gambar 4.4 Prosedur pengisian data pelanggan
4.1.2 Prosedur Konstruksi Rute
Prosedur konstruksi rute bertujuan untuk membentuk rute-rute pada setiap
kendaraan dengan memperhatikan batasan kapasitas kendaraan dan total jarak rute
kendaraan yang diinputkan. Prosedur ini meliputi proses hitung P
ij(k), cek
konstrain, dan pembentukan rute yang disajikan pada Gambar 4.5.
Prosedur konstruksi rute mulai hitung nilai Pij(k)() cek konstrain() pembentukan rute() selesai
Gambar 4.5 Prosedur konstruksi rute
P
ij(k) adalah suatu nilai probabilitas untuk semut k memilih kota j setelah
mengunjungi kota i. Prosedur hitung nilai P
ij(k) bertujuan untuk menghitung nilai
probabilitas P
ij(k) setiap pelanggan yang belum terpilih dan nantinya nilai tersebut
dijumlahkan secara komulatif. Setelah itu, dibangkitkan satu nilai random riil
antara 0 sampai dengan 1. Jika nilai random tersebut masuk dalam area P
ij(k)
komulatif, maka pilih kota dengan nilai P
ij(k) terpilih tersebut. Prosedur hitung
P
ij(k) disajikan pada Gambar 4.6
Prosedur hitung nilai Pij(k)
mulai
nAvCity = kota yang belum terpilih set kotaAwal = 0
untuk i dari 0 sampai dengan nAvCity-1 hitung nilai PijkAvCity sumPIJK += PijkAvCity
RANDOM = nilai random antara 0 sampai dengan 1 jika RANDOM <= sumPIJK maka
kotaTujuan = i selesai
selesai selesai
Gambar 4.6 Prosedur hitung nilai Pij(k)
Pada prosedur hitung nilai P
ij(k), formula yang digunakan dalam
perhitungan nilai PijkAvCity adalah
∑
, dengan
adalah feromon jarak
kota i ke kota j,
adalah visibilitas dari jarak kota i ke kota j
≤ dan
nilai
diperoleh dari
dimana d
ijadalah jarak kota i ke kota j, dan adalah
masing-masing pengendali intensitas jejak semut dan pengendali visibilitas jarak
kota i ke kota j ( ≥ 0, ≥ 0) , dan adalah himpunan dari kota-kota yang
tidak boleh dipilih oleh semut k.
Prosedur cek konstrain bertujuan untuk memeriksa apakah pelanggan yang
terpilih dari proses hitung P
ij(k) memenuhi batasan kapasitas kendaraan dan total
jarak maksimal kendaraan yang diinputkan. Jika pelanggan yang terpilih tidak
melanggar batasan atau konstrain yang diinputkan maka pelanggan tersebut
terpilih untuk dilayani oleh kendaraan. Proses cek konstrain disajikan pada
Gambar 4.7.
Prosedur cek konstrain
mulai
jika (E > 0) maka
untuk i dari 0 sampai dengan nAvCity-1 kotaTujuan = indexRW[PijkAvCity]
jika (mJarak[kotaAwal][kotaTujuan]+serviceDuration < E dan q[kotaTujuan] ≤ W dan (E - (mJarak[kotaAwal][kotaTujuan] + serviceDuration)) ≥ (mJarak[kotaTujuan][0])) maka
E mJarak[kotaAwal][kotaTujuan]+serviceDuration W q[kotaTujuan]
jika (q[kotaTujuan] > W dan mJarak[kotaAwal][kotaTujuan] + serviceDuration > E) maka
set kotaTujuan = 0 selesai
selesai
jika yang lain (E = 0) maka
untuk I dari 0 sampai dengan nAvCity-1 kotaTujuan = indexRW[PijkAvCity]
jika (q[kotaTujuan] < W) maka W q[kotaTujuan]
jika yang lain (q[kotaTujuan] > W) maka set kotaTujuan = 0
selesai selesai
selesai
Pada prosedur cek konstrain di atas, variabel
mJarak[kotaAwal][kotaTujuan] adalah jarak antara kota saat ini (kotaAwal) ke
kota yang akan dikunjungi (kotaTujuan). Variabel q[kotaTujuan] adalah variabel
yang menunjukkan demand kota yang akan dikunjungi (kotaTujuan). Syarat
mJarak[kotaAwal][kotaTujuan] + serviceDuration < E berarti jarak kota tujuan
tidak boleh melebihi atau sama dengan total jarak maksimum kendaraan saat ini.
Syarat q[kotaTujuan] ≤ W berarti demand kota tujuan tidak boleh melebihi
kapasitas kendaraan saat ini. Syarat E − (mJarak[kotaAwal][kotaTujuan] +
serviceDuration) ≥ mJarak[kotaTujuan][0] berarti total jarak maksimum
kendaraan setelah mengunjungi kota tujuan harus lebih dari atau sama dengan
jarak kota tujuan ke depot. Variabel kotaTujuan = indexRW[PijkAvCity] berarti
kota tujuan diperoleh dari prosedur hitung nilai P
ij(k) yaitu kotaTujuan = i.
Prosedur pembentukan rute bertujuan untuk list pelanggan-pelanggan yang
terpilih untuk dilayani oleh setiap kendaraan. List ini disebbut dengan rute-rute
yang terbentuk pada proses konstruksi rute. Proses pembentukan rute disajikan
pada Gambar 4.8.
Prosedur pembentukan rute
mulai
set solusi = linkedlist baru set ant = linkedlist baru set kotaAwal = 0
AvCIty = kota-kota yang belum terpilih kotaTujuan = konstrain(AvCity, kotaAwal) jika (kotaTujuan != 0) maka
ant.add(kotaTujuan)
AvCity.remove(AvCity.indexOf(kotaTujuan)) kotaAwal = kotaTujuan
selesai
ketika (kotaTujuan != 0) lakukan solusi.add(ant)
selesai selesai
Gambar 4.8 Prosedur pembentukan rute
4.1.3 Prosedur Cek nilai_random ≤ Pm(t)
Pada proses ini, dilakukan pengecekan apakah terdapat nilai random riil
yang dibangkitkan kurang dari atau sama dengan Pm. Jika ada, maka proses akan
dilanjutkan ke proses mutasi. Jika tidak ada, maka proses akan dilanjutkan pada
proses local search. Variabel-variabel yang digunakan adalah rute1, rute2,
random01, kota_rute1, kota_rute2, Pm. Variabel rute1 adalah rute kesatu hasil
pemilihan secara acak pada hasil konstruksi_rute(), dan variabel rute2 adalah rute
kedua hasil pemilihan secara acak pada hasil konstruksi_rute(). Variabel
random01 adalah nilai random riil antara 0 sampai dengan 1 sebanyak kota pada
dua rute terpilih. Variabel kota_rute1 adalah kota-kota yang ada pada rute1, dan
kota_rute2 adalah kota-kota yang ada pada rute2. Prosedur cek nilai_random ≤
Prosedur cek nilai_random ≤ Pm(t)
mulai
proses hitung Pm(t)
untuk i dari 1 sampai n_rute1
untuk j dari 1 sampai n_rute2
kota_rute1(i) = random(0,1)
kota_tute2(j) = random(0,1) jika kota_rute1(i) ≤ Pm(t) maka,
jika kota_rute2(j) ≤ Pm(t) maka,
pilih index_kota_rute1(i)
pilih index_kota_rute2(j)
proses mutasi()
jika yang lainnya maka,
proses local_search()
selesai
selesai selesai
Gambar 4.9 Prosedur cek nilai_random ≤ Pm(t)
Pada prosedur cek nilai_random ≤ Pm(t) di atas, terdapat variabel Pm(t),
dimana variabel tersebut adalah probabilitas nilai mutasi. Perhitungan variabel Pm(t)
menggunakan suatu formula yang akan disajikan pada prosedur Pm(t). Prosedur Pm(t)
bertujuan untuk menghitung nilai Pm(t) pada setiap iterasi yang nantinya digunakan
untuk memeriksa apakah ada nilai random yang dibangkitkan pada proses mutasi yang
kurang dari atau sama dengan Pm(t). Prosedur Pm(t) disajikan pada Gambar 4.10.
Prosedur Pm(t)
mulai
untuk t dari 1 sampai dengan iterasi_max
hitung nilai Pm(t)
selesai
Gambar 4.10 Prosedur Pm(t)
Pada prosedur Pm(t) di atas, formula yang digunakan untuk perhitungan
Pm(t) adalah
(
)
, dengan nC adalah jumlah semua kota,
diketahui bahwa nilai Pm(t) pada setiap iterasi tidak akan sama karena bergantung
pada nilai t.
4.1.4 Prosedur Mutasi
Proses mutasi dilakukan jika pada proses 4.1.3 terdapat nilai_random yang
kurang dari atau sama dengan Pm(t). Proses mutasi ini bertujuan untuk
memperbaiki dan menemukan kemungkinan adanya solusi yang lebih optimal
daripada solusi yang terbentuk pada proses konstruksi rute. Prosedur mutasi
disajikan pada Gambar 4.11.
Prosedur mutasi()
mulai
untuk i dari 1 sampai n_rute1 untuk j dari 1 sampai n_rute2
kota_rute1(i) = random(0,1)
kota_tute2(j) = random(0,1) jika kota_rute1(i) ≤ Pm(t) maka,
jika kota_rute2(j) ≤ Pm(t) maka,
pilih index_kota_rute1(i) pilih index_kota_rute2(j) swap1 = index_kota_rute1(i) swap2 = index_kota_rute2(j) swap1 = swap2 swap2 = swap1
hitung total Demand rute baru 1 & 2
jika totalDemand[ruteBaru 1 & 2] > W maka
clear proses mutasi lakukan local search () selesai
selesai selesai
Gambar 4.11 Prosedur mutasi
4.1.5 Prosedur Local Search
Prosedur local search bertujuan untuk menCari dan menemukan susunan
rute yang lebih optimal daripada susunan rute pada proses mutasi dengan menukar
posisi pelanggan hasil dari swap pada proses mutasi dengan posisi pelanggan pada
masing-masing rute. Prosedur local search disajikan pada Gambar 4.12.
Prosedur local search
mulai
untuk i dari 0 sampai dengan n_rute1
untuk j dari 0 sampai dengan n_rute2
tukar posisi swap1 dengan posisi pelanggan pada rute2
hingga semua kemungkinan posisi swap1 habis
tukar posisi swap2 dengan posisi pelanggan pada rute1 hingga semua kemungkinan posisi swap2 habis hitung total jarak rute1 dan rute2 setiap perubahan
posisi pelanggan
pilih posisi dan total rute terkecil pada rute1 dan rute2
selesai
selesai
Gambar 4.12 Prosedur local search
Prosedur local search ini dilakukan setelah proses mutasi dan dilakukan
jika tidak ada nilai random yang kurang dari atau sama dengan Pm(t) pada proses
cek nilai_random ≤ Pm(t).
4.1.6 Prosedur Update Pheromone
Prosedur update pheromone ini bertujuan untuk memperbaharui
pheromone pada garis yang menghubungkan tiap-tiap pelanggan. Prosedur update
pheromone disajikan pada Gambar 4.13.
Prosedur update pheromone
mulai
untuk i dari 0 sampai dengan nV
untuk j dari 0 sampai dengan nV
jika pelanggan j tidak dilayani dari pelanggan i maka
hitung nilai feromonBaru1
j
ika pelanggan j dilayani dari pelanggan i makahitung nilai feromonBaru2
selesai
selesai
selesai
Gambar 4.13 Prosedur update pheromone
Pada prosedur update pheromone di atas, formula untuk perhitungan
feromonBaru1 adalah
dan untuk perhitungan feromonBaru2 adalah
∑