TABU SEARCH
Lutfi Hakim [2216202001]
Magister Telematika, Departemen Teknik Elektro, Fakultas Teknologi Elektro
Institut Teknologi Sepuluh Nopember Surabaya
Email: lutfi.hakim3003@gmail.com - lutfi.hakim16@mhs.its.ac.id
I. PENDAHULUAN
Kehidupan di dunia tak ubahnya membutuhkan suatu keseimbangan. Begitu halnya
dengan permasalahan. Dalam menjalani kehidupan di dunia, tak lepas dari dihadapkan
suatu permasalahan. Baik permasalahan yang ringan atau yang kompleks sekalipun.
Sebagai contoh transportasi yang mencakup pendistribusian suatu komoditas atau produk
dari produsen kepada berbagai tujuan. Tentunya suatu perusahaan pasti menginginkan
keuntungan dalam setiap transaksinya dengan menekan pengeluaran seminimum
mungkin, salah satunya dalam kegiatan distribusi komoditas. Perusahaan kecil seperti
usaha mebel mungkin tidak bingung melakukan scheduling pengiriman barang ini. Tapi
bagaimana dengan perusahaan besar seperti pertamina yang memiliki jumlah kendaraan,
driver dan SPBU yang sangat banyak yang terdistribusi di setiap daerah? Belum juga
dihadapkan dengan permasalahan rute jalan yang kompleks, karakteristik jalan yang
menanjak, kemacetan, efektifitas pengiriman. Tentunya akan sangat kewalahan jika
membuat scheduling secara manual. Entah membutuhkan waktu yang lama, jadwal yang
belum tentu akurat dan efektif, bentrok, biaya yang dikeluarkan relatif besar sekali
pengiriman dan lain sebagainya. Hal ini mungkin bisa terjadi karena satu akomodasi tidak
dijadwalkan dengan rute yang efektif. Misalkan Depo Tuban harus mengirimkan bahan
bakar ke Banyuwangi, dan lain sebagainya. Namun permasalahan tersebut dalam
dilakukan dengan mudah, efektif dan mungkin bisa menekan kuantitas pengeluaran yang
harus ditanggung oleh perusahaan. Salah satu jawabannya adalah dengan membuat sistem
scheduling menggunakan algoritma optimasi.
Setiap algoritma memiliki kelebihan dan kekurangan masing-masing dalam
menyelesaikan permasalahan. Hal ini dikarenakan tidak ada satupun algoritma yang
berlaku umum dan bisa digunakan untuk menyelesaikan semua jenis permasalahan.
Algoritma optimasi ini merupakan jenis algoritma untuk memaksimalkan solusi sebuah
permasalahan agar didapatkan sebuah hasil dan proses yang optimal. Menurut para ahli
algoritma optimasi terbagi menjadi dua, yakni algoritma deterministik dan probabilistik.
Perbedaan yang mendasar dari kedua jenis algoritma optimasi ini adalah setiap langkah
eksekusi di dalam algoritma optimasi deterministik hanya terdapat satu jalan untuk
diproses, namun jika tidak ada jalan makan algoritma dianggap selesai. Dengan demikian
algoritma ini selalu menghasilkan solusi yang tetap untuk suatu input yang diberikan.
Biasanya algoritma ini digunakan untuk suatu permasalahan dengan skala yang tidak
terlalu besar. Lain halnya dengan Algoritma Optimasi Probabilistik. Algoritma ini
digunakan untuk menyelesaikan masalah dengan ruang solusi yang lebih besar, bahkan
tak terbatas. Algoritma ini berusahan untuk menemukan solusi yang bagus tanpa melebihi
batasan waktu yang telah ditentukan. Solusi yang bagus ini belum tentu yang paling
optimal, namun sudah dapat diterima oleh user.
Algoritma deterministik dan probabilistik memiliki banyak turunan. Masing-
masing turunan memiliki karakteristik dan penggunaan yang berbeda-beda. Pada makalah
ini membahas mengenai dua jenis algoritma ini, namun hanya memilih masing-masing
satu sample algoritma per sample jenis algoritma optimasi. Algoritma optimasi
deterministik diwakilkan dengan algoritma Dynamic Programming, sedangkan algoritma
optimasi probabilistik diwakilkan dengan algoritma Tabu Search.
II. PEMBAHASAN
1. Algoritma Dynamic Programming
Dynamic Programming adalah salah satu jenis algoritma optimasi deterministik.
Algoritma ini mengandung prosedur matematis yang dirancang untuk memperbaiki
efisiensi perhitungan masalah matematis tertentu. Perbaikan ini dengan cara
menguraikan masalah tersebut menjadi bagian-bagian yang lebih kecil, sehingga
perhitungan tersebut dapat dilakukan dengan lebih sederhana. Permasalahan yang
diselesaikan dengan menggunakan algoritma ini dibagi dalam tahap-tahap. Setiap
tahap tersebut mewakili kemungkinan kapasitas dari setiap masalah yang diselesaikan.
Sedangkan banyaknya tahap yang terbagi ditentukan pada pendefinisian awal dynamic
programming. Selanjutnya kemungkinan kapasitas dimulai dengan mengambil
kemungkinan kapasistas minimal (bisa disebut 0) hingga kemungkinan kapasitas
maksimal (kemungkinan kapasitas yang tersedia). Sehingga programmer menentukan
sendiri tahap-tahapan yang terbagi dan kapasitas yang diinginkan.
Istilah dynamic programming didasarkan pada kecenderungan metode ini dalam
menganalisa dan mendokumentasikan hasil perhitungan pada setiap tahapnya. Pada
dasarnya, penerapan algoritma ini bertujuan untuk optimalisasi suatu permasalahan.
Seperti permasalahan yang dapat mempunyai banyak kemungkinan solusi. Masing-
masing solusi mempunyai sebuah nilai, dan berharap untuk menemukan sebuah solusi
dengan nilai yang optimal (minimum atau maksimum). Penyebutan solusi yang
optimal terhadap suatu permasalahan ini dikarenakan dari solusi tersebut mungkin
menjadi beberapa solusi yang dapat mencapai nilai optimal. Pemecahan masalah
dengan menggunakan dynamic programming mempunyai empat tahapan, diantaranya:
a. Menggolongkan struktur sebuah solusi optimal.
b. Pendefinisian nilai sebuah solusi yang optimal dengan semua kondisi dan
keadaan yang memungkinkan (secara recursive)
c. Menghitung nilai sebuah solusi optimal, biasanya dalam mode bawah-atas
(mundur dari tahapan terakhir dan memecahkan tiap tahap).
d. Mengkontruksi sebuah solusi optimal dari informasi yang dihitung. Solusi
optimal dari permasalahan didapatkan jika semua tahap sudah terpecahkan.
Langkah 1-3 bentuk dasar dari sebuah solusi dynamic programming terhadap
sebuah masalah. Langkah nomor 4 dapat terlewati jika hanya dibutuhkan satu nilai
solusi optimal, dan bukan solusi itu sendiri. Saat melakukan langkah 4, seringkali
memelihara informasi tambahan selama langkah 3sehingga dapat dengan mudah untuk
mengkonstruksi sebuah solusi yang optimal.
Buku B 27 20 2
Buku C 19 15 4
Buku D 33 35 3
Buku E 27 25 3
Buku F 29 40 2
Buku G 32 30 4
Buku H 38 50 1
Buku I 37 40 1
Buku J 21 20 2
Ketiga pola atau skema tersebut jika digambarkan seperti pada gambar flow di
bawah. Pemilihan kandidat solusi terbaik berdasarkan nilai fungsi tujuan. Pemeriksaan
nilai ini lebih didahulukan sebelum pemeriksaan status tabu. Apabila nilai fungsi
tujuan lebih baik, maka berpotensi untuk diterima sehingga perlu diperiksa status
tabunya. Urutan pemeriksaan nilai fungsi tujuan kemudian status tabu memberikan
kemungkinan proses penyelesaian program yang lebih cepat. Pemilihan kondidat
solusi terbaik menggunakan prinsip Global-Best Strategi (GB) yakni strategi dimana
algoritma akan mengganti solusi terbaik saat ini dengan solusi terbaik yang ada pada
neighborhood.
Skema Algoritma Tabu Search
▪ Menentukan posisi minimum dan maksimum dari fungsi yang akan dihitung. Jika
tidak ada batasan posisi, tentu saja posisi yang mendekati tak terhingga akan
terpilih karena akan mengembalikan nilai fungsi yang sangat besar. Diasumsikan
dalam kasus ini, posisi minimum adalah -2 dan maksimum adalah +2.
Const minPosisi As Double = -2
Const maksPosisi As Double = +2
Langkah-langkah penggunaan Algoritma Tabu Search adalah sebagai berikut.
1) Menentukan angka-angka koordinat X dan Y yang dipakai dalam perhitungan.
Diasumsikan bahwa semua angka di dalam batas posisi akan dipakai dengan jarak
antar titik adalah 0.05.
Dim daftarKoordinatX((maksPosisi - minPosisi) / 0.05) As Double
For i As Integer = 0 To daftarKoordinatX.Length - 1
daftarKoordinatX(i) = minPosisi + i * 0.05
Next
...
End Class
3) Menentukan indeks acak sebagai posisi awal titik mulai sebelum dilakukan
perhitungan. Kemudian membuat titik awal dengan posisi acak tersebut.
Dim rnd As New Random(0)
Dim idxAcakX As Integer = rnd.Next(daftarKoordinatX.Length)
Dim idxAcakY As Integer = rnd.Next(daftarKoordinatY.Length)
Dim titikAwal As New Titik(daftarKoordinatX(idxAcakX), daftarKoordinatY(idxAcakY))
4) Membuat daftar Tabu dengan jumlah maksimum sebanyak variabel ukuran daftar
Tabu. Kemudian masukkan titik awal mulai yang sudah ditemukan ke dalam
daftar Tabu tersebut.
Dim daftarTabu As New DaftarTabu(Of Titik)(ukuranDaftarTabu)
daftarTabu.TambahTabu(titikAwal)
...
End Class
▪ Gunakan fungsi berikut untuk menambahkan sebuah titik ke dalam daftar Tabu
Public Sub TambahTabu(t As Titik)
If daftarTitikTabu.Count() >= maksDaftarTabu Then daftarTitikTabu.Dequeue()
daftarTitikTabu.Enqueue(t)
End Sub
5) Melakukan proses pencarian posisi terbaik sebanyak jumlah iterasi. Penjelasan
lebih detail mengenai fungsi ini dapat dilihat pada penjelasan poin 5a-5c.
ts.CariPosisiTerbaik(titik, daftarTabu, daftarKoordinatX, daftarKoordinatY)
...
End Class
Hasil Akhirnya adalah sebagai berikut.
III. KESIMPULAN
▪ Algoritma optimasi terdiri dari dua jenis yaitu Algoritma deterministik dan
probabilistik. Kedua jenis algoritma tersebut memiliki turunan, salah satunya
adalah dynamic programming yang merupakan turunan dari algoritma
deterministik dan Tabu Search yang merupakan turunan dari algoritma
probabilistik.
▪ Pada algoritma deterministik, setiap langkah yang dieksekusi hanya terdapat satu
jalan untuk diproses, namun jika tidak ada jalan makan algoritma dianggap selesai.
Dengan demikian algoritma ini selalu menghasilkan solusi yang tetap untuk suatu
input yang diberikan. Sedangkan pada Algoritma Optimasi Probabilistik akan
berusaha untuk menemukan solusi yang bagus tanpa melebihi batasan waktu yang
telah ditentukan. Solusi yang bagus ini belum tentu yang paling optimal, namun
sudah dapat diterima oleh user.
▪ Algoritma dynamic programming mengandung prosedur matematis yang dirancang
untuk memperbaiki efisiensi perhitungan masalah matematis tertentu. Perbaikan ini
dengan cara menguraikan masalah tersebut menjadi bagian-bagian yang lebih kecil,
sehingga perhitungan tersebut dapat dilakukan dengan lebih sederhana.
Permasalahan yang diselesaikan dengan menggunakan algoritma ini dibagi dalam
tahap-tahap. Setiap tahap tersebut mewakili kemungkinan kapasitas dari setiap
masalah yang diselesaikan. Sedangkan algoritma Tabu Search berprinsip pada
penggunaan memori sebagai elemen esensial dalam pencariannya. Algoritma ini
tidak hanya menyimpan nilai sebuah solusi terbaik seperti kebanyakan metode
algoritma pencarian, namun juga menyimpan informasi selama pencarian melalui
solusi terakhir yang dikunjungi.
▪ Pemecahan masalah menggunakan dynamic programming mempunyai empat
tahapan, diantaranya: a) Menggolongkan struktur sebuah solusi optimal; b)
Pendefinisian nilai sebuah solusi yang optimal dengan semua kondisi dan keadaan
yang memungkinkan (secara recursive); c) Menghitung nilai sebuah solusi optimal,
biasanya dalam mode bawah-atas (mundur dari tahapan terakhir dan memecahkan
tiap tahap). d) Mengkontruksi sebuah solusi optimal dari informasi yang dihitung.
Solusi optimal dari permasalahan didapatkan jika semua tahap sudah terpecahkan.
▪ Pemecahan masalah menggunakan Tabu Search mempunyai beberapa tahapan
diantaranya: a) Memulai dengan sebuah solusi awal; b) Membuat suatu daftar
kandidat perpindahan (solusi); c) Evaluasi setiap kandidat solusi dan memilih
kandidat terbaik; d) Kriteria penghentian prosedur (Hentikan seluruh prosedur atau
transfer ke prosedur diversifikasi atau lanjutkan kondisi-kondisi penerimaan)
IV. REFERENSI
Cormen TH, Leiserson CE, Rivest RL, Stein C. 2001. Introduction to Algoritms,
Second Edition, Massachusetts Institute of Technology, MIT Press.
Glover, Fred (1990). Tabu Search – Part II. ORSA Journal on Computing. Vol. 2.
No.1
Mahmudy, Wayan Firdaus. 2013. Algoritma Evolusi. Modul Kuliah : Universitas
Brawijaya.
PipTools. 2015. Algoritma Tabu Search. Search(online)
(https://piptools.net/algoritma-tabu-search/, diakses 15 Mei 2017)
PipTools. 2015. Permasalahan Knapsack. Search(online)
(https://piptools.net/permasalahan-knapsack/, diakses 15 Mei 2017)
Suyanto S. 2010. Algoritma Optimasi Deterministik atau Probabilistik. Graha Ilmu :
Yogyakarta.
WongCilik. 2012. Metaheuristik: tabu search. Search(online)
(https://hindriyanto.wordpress.com/2012/09/03/metaheuristics-tabu-search/,
diakses 14 mei 2017)