• Tidak ada hasil yang ditemukan

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_randomPm(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

ij

adalah 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_randomPm(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_randomPm(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_randomPm(t)

Pada prosedur cek nilai_randomPm(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_randomPm(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 maka

hitung 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

,dengan

adalah feromon jarak pelanggan (kota) i ke

pelanggan (kota) j sebelum diupdate, adalah konstanta yang mengontrol

kecepatan evaporasi dan , k menunjukkan suatu rute ke-k, K adalah

jumlah semua rute pada solusi dan K > 0, Q adalah sebuah konstanta positif (Q >

0), L adalah total jarak semua rute pada solusi, adalah total jarak pada rute

ke-k,

adalah jarak pelanggan i ke pelanggan j, dan adalah banyaknya

pelanggan pada rute ke-k.

Dokumen terkait