Heuristik adalah sebuah teknik yang
mengembangkan efisiensi dalam proses pencarian, namum dengan kemungkinan
mengorbankan kelengkapan (completeness). Fungsi heuristik digunakan untuk
mengevaluasi keadaan-keadaan problema individual dan menentukan seberapa jauh
hal tersebut dapat digunakan untuk mendapatkan solusi yang diinginkan.
Jenis-jenis Heuristic Searching:
- Generate and Test
- Metode ini merupakan penggabungan antara depth-first search dengan pelacakan mundur (backtracking), yaitu bergerak ke belakang menuju pada suatu keadaan awal.
- Algoritma :
1. Bangkitkan suatu kemungkinan solusi (membangkitkan suatu tititk tertentu atau lintasan tertentu dari keadaan awal).
2. Uji untuk melihat apakah node tersebut benar-benar merupakan solusinya dengan cara membandingkan node terebut atau node akhir dari suatu lintasan yang dipilih dengan kumpulan tujuan yang diharapkan.
3. Jika solusi ditemukan, keluar. Jika tidak, ulangi kembali langkah pertama.
- HillClimbing
- Metode ini hampir sama dengan metode pembangkitan dan pengujian, hanya saja proses pengujian dilakukan dengan menggunakan fungsi heuristic. Pembangkitan keadaan berikutnya tergantung pada feedback dari prosedur pengetesan. Tes yang berupa fungsi heuristic ini akan menunjukkan seberapa baiknya nilai terkaan yang diambil terhadap keadaan-keadaan lainnyayang mungkin.
- Algoritma:
1. Cari operator yang belum pernah digunakan; gunakan operator ini untuk mendapatkan keadaan yang baru.
a) Kerjakan langkah-langkah berikut sampai solusinya ditemukan atau sampai tidak ada operator baru yang akan diaplikasikan pada keadaan sekarang : Cari operator yang belum digunakan; gunakan operator ini untuk mendapatkan keadaan yang baru.
b) Evaluasi keadaan baru tersebut : – Jika keadaan baru merupakan tujuan, keluar – Jika bukan tujuan, namun nilainya lebih baik daripada keadaan sekarang, maka jadikan keadaan baru tersebut menjadi keadaan sekarang. – Jika keadaan baru tidak lebih baik daripada keadaan sekarang, maka lanjutkan iterasi.
- Best First Search
- Metode ini merupakan kombinasi dari metode depthfirst search dan breadth-first search. Pada metode best-first search, pencarian diperbolehkan mengunjungi node yang ada di level yang lebih rendah, jika ternyata node pada level yang lebih tinggi ternyata memiliki nilai heuristic yang lebih buruk.
- Fungsi Heuristik yang digunakan merupakan prakiraan (estimasi) cost dari initial state ke goal state, yang dinyatakan dengan :
- f’ = Fungsi evaluasi
- g = cost dari initial state ke current state
- h’ = prakiraan cost dari current state ke goal state
f’(n) = g(n) + h’(n)
- Alpha Beta Prunning,Means-End-Anlysis,Constraint Satisfaction, Simulated Anealing, dll
SMA * Search (Simplified Memory-Bounded) A*
Simplified Memory-Bounded A* atau biasa
disebut SMA* merupakan algoritma pencarian yang dapat menggunakan semua memori
yang tersedia untuk melakukan pencarian. Menggunakan lebih banyak memori hanya
dapat meningkatkan efisiensi pencarian, salah satunya bisa selalu mengabaikan
ruang tambahan, tetapi biasanya lebih baik untuk mengingat node daripada harus
membuatnya kembali bila diperlukan.
SMA* memiliki gambaran berikut :
- Dia akan memanfaatkan memori apa pun yang tersedia untuk nya.
- Dia menghindari pernyataan berulang sejauh memori memungkinkan.
- Dia selesai jika memori yang tersedia cukup untuk menyimpan jalur solusi dangkal.
- Dia optimal jika tersedia cukup memori untuk menyimpan jalur solusi dangkal optimal. Jika tidak, dia mengembalikan solusi terbaik yang dapat dicapai, dengan memori yang tersedia.
Algoritma SMA* ini merupakan sebuah
algoritma yang dikembangkan dari algoritma A* (A Star). Algoritma A* sendiri
adalah variasi dari algoritma Branch and Bound. Jadi secara tidak langsung,
algoritma SMA* itu sendiri merupakan salah satu variasi pengembangan dari
algoritma Branch and Bound. Menggunakan algoritma SMA* berarti kita
memperhitungkan biaya sebenarnya ditambah dengan biaya perkiraan. Biaya
sebenarnya dinotasikan dengan g(n). Sedangkan biaya perkiraan dinotasikan
dengan h(n). Jadi kita memperhitungkan g(n) + h(n).
Algoritma A*
Algoritma A* adalah algoritma pencarian
yang merupakan pengembangan dari kelas algoritma Greedy. Seperti halnya pada
Greedy, untuk menemukan solusi, A* juga dilakukan oleh fungsi heuristik, yang
menentukan urutan titik mana yang akan dikunjungi terlebih dahulu. Heuristik
merupakan penilai yang memberi harga pada tiap verteks yang memandu A* mendapatkan
solusi yang diinginkan. Algoritma A* menyelesaikan masalah yang menggunakan graph
untuk perluasan ruang statusnya.
Dengan kata
lain digunakan untuk menyelesaikan permasalah yang bisa direpresentasikan dengan graph. Algoritma A* adalah sebuah algoritma yang
telah dikembangkan. Dengan menerapkan fungsi heuristik, algoritma ini membuang
langkah-langkah yang tidak perlu dengan pertimbangan bahwa langkah-langkah yang
dibuang sudah pasti merupakan langkah yang tidak akan mencapai solusi yang diinginkan.
Secara informal, algoritma bekerja dalam banyak cara yang sama seperti pada
algoritma Dijkstra. Daripada selalu mempertimbangkan verteks
terbuka dengan nilai terendah, lebih baik memilih verteks yang paling mungkin
untuk mengarahkan pencarian ke arah
tujuan dengan nilai terkecil. Semuanya dikendalikan oleh sebuah fungsi
heuristik. Jika fungsi tersebut akurat, maka algoritma akan efisien dan rute
terpendek akan segera ditemukan jika memang ada.
Fungsi Heuristik
Heuristic digunakan untuk mengevaluasi keadaan-keadaan problema individual dan menentukan seberapa jauh hal tersebut dapat digunakan untuk mendapatkan solusi yang diinginkan.
Simulated annealing
Simulated annealing (SA) adalah salah satu
algoritma untuk untuk optimisasi yang bersifat generik. Berbasiskan
probabilitas dan mekanika statistik, algoritma ini dapat digunakan untuk
mencari pendekatan terhadap solusi optimum global dari suatu permasalahan.
Masalah yang membutuhkan pendekatan SA adalah masalah-masalah optimisasi
kombinatorial, di mana ruang pencarian solusi yang ada terlalu besar, sehingga
hampir tidak mungkin ditemukan solusi eksak terhadap permasalahan itu.
Publikasi tentang pendekatan ini pertama kali dilakukan oleh S. Kirkpatrick, C.
D. Gelatt dan M. P. Vecchi, diaplikasikan pada desain optimal hardware
komputer, dan juga pada salah satu masalah klasik ilmu komputer yaitu Traveling
Salesman Problem.
Annealing adalah satu teknik yang dikenal
dalam bidang metalurgi, digunakan dalam mempelajari proses pembentukan kristal
dalam suatu materi. Agar dapat terbentuk susunan kristal yang sempurna,
diperlukan pemanasan sampai suatu tingkat tertentu, kemudian dilanjutkan dengan
pendinginan yang perlahan-lahan dan terkendali dari materi tersebut. Pemanasan
materi di awal proses annealing, memberikan kesempatan pada atom-atom dalam
materi itu untuk bergerak secara bebas, mengingat tingkat energi dalam kondisi
panas ini cukup tinggi. Proses pendinginan yang perlahan-lahan memungkinkan atom-atom
yang tadinya bergerak bebas itu, pada akhirnya menemukan tempat yang optimum,
di mana energi internal yang dibutuhkan atom itu untuk mempertahankan posisinya
adalah minimum.
Simulated Annealing berjalan berdasarkan
analogi dengan proses annealing yang telah dijelaskan di atas. Pada awal proses
SA, dipilih suatu solusi awal, yang merepresentasikan kondisi materi sebelum
proses dimulai. Gerakan bebas dari atom-atom pada materi, direpresentasikan
dalam bentuk modifikasi terhadap solusi awal/solusi sementara. Pada awal proses
SA, saat parameter suhu (T) diatur tinggi, solusi sementara yang sudah ada
diperbolehkan untuk mengalami modifikasi secara bebas.
Kebebasan ini secara relatif diukur
berdasarkan nilai fungsi tertentu yang mengevaluasi seberapa optimal solusi
sementara yang telah diperoleh. Bila nilai fungsi evaluasi hasil modifikasi ini
membaik (dalam masalah optimisasi yang berusaha mencari minimum berarti
nilainya lebih kecil/downhill) solusi hasil modifikasi ini akan digunakan
sebagai solusi selanjutnya. Bila nilai fungsi evaluasi hasil modifikasi ini
memburuk, pada saat temperatur annealing masih tinggi, solusi yang lebih buruk
(uphill) ini masih mungkin diterima, sedangkan pada saat temperatur annealing
sudah relatif rendah, solusi hasil modifikasi yang lebih buruk ini mungkin
tidak dapat diterima. Dalam tahapan selanjutnya saat temperatur sedikit demi
sedikit dikurangi, maka kemungkinan untuk menerima langkah modifikasi yang
tidak memperbaiki nilai fungsi evaluasi semakin berkurang. Sehingga kebebasan
untuk memodifikasi solusi semakin menyempit, sampai akhirnya diharapkan dapat
diperoleh solusi yang mendekati solusi optimal. Pada temperatur rendah ini, SA
biasanya menggunakan konsep Hill-Climbing.
Genetic Algorithm
Genetic Algorithm(atau GA) adalah teknik
pencarian dalam bidang komputasi untuk menemukan solusi benar atau pendekatan
untuk masalah optimasi dan pencarian. Teknik dalam GA didasarkan pada biologi
evolusioner seperti pewarisan, mutasi, seleksi dan crossover.
GA diimplementasikan sebagai proses
simulasi yang dijabarkan sebagai berikut: Populasi dari representasi abstrak
(disebut kromosom, genotip, atau genom) dari candidate solution (disebut
individual, atau fenotip) dari optimasi yang berevolusi ke solusi yang lebih
baik. Biasanya solusi direpresentasikan ke dalam string biner. Evolusi dimulai
dari populasi dari individu yang dihasulkan secara random dan terjadi dalam
generasi. Di setiap generasi, fitness dari setiap individu dalam populasi
dievaluasi, beberapa individu dipilih secara stokastik(berdasarkan fitness) dan
dimodifikasi(crossover dan kemungkinan mutasi) untuk membentuk populasi baru.
Populasi baru lalu dimanfaatkan untuk iterasi selanjutnya. Secara umum, algoritma
selesai jika telah menghasilkan generasi maksimum atau hasil dalam populasi
dirasa memuaskan (berdasarkan berbagai parameter).
Dalam GA biasanya ada 2 hal yang harus
didefinisikan:
- Representasi genetis dari domain solusi
- Fungsi fitness untuk mengevaluasi solusi domain.
Representasi standar dari solusi adalah
array of bits, karena memudahkan operasi crossover. Fungsi fitness
didefinisikan dari representasi genetis dan kualitas dari representasi solusi.
Setelah keduanya didefinisikan, GA berlanjut ke inisialisasi populasi dari
solusi secara acak, lalu berkembang lewat perulangan aplikasi mutasi, crossover
dan seleksi.
Inisialisasi
Awalnya, beberapa solusi individual
dihasilkan secara acak untuk membentuk populasi awal yang ukurannya tergantung
sifat dari masalah.
Seleksi
Dalam setiap generasi baru, proporsi dari
populasi yang ada dipilih untuk menghasilkan generasi selanjutnya. Solusi
individual dipilih lewat proses fitness, dimana solusi yang lebih baik (diukur
dari fungsi fitness) lebih mungkin dipilih. Metode seleksi yang umum dipakai
adalah roulette wheel dan tournament.
Reproduksi
Langkah selanjutnya adalah menghasilkan
generasi selanjutnya dari populasi solusi dari hasil seleksi lewat operasi
genetik crossover (atau rekombinasi) dan/atau mutasi
Terminasi
Proses ini diulang sampai tercapai kondisi
akhir. Kondisi akhir yang umum antara lain:
- Solusi yang ditemukan memenuhi kriteria minimum
- Jumlah generasi tertentu telah tercapai
- Telah mencapai waktu komputasi tertentu
- Tidak dapat dihasilkan hasil yang lebih baik
- Inspeksi manual
- Kombinasi dari kondisi di atas.
Pseudo-code
1. Pilih populasi awal
2. Evaluasi fitness dari tiap individu
dalam populasi
3. Iterasi:
- Pilih individu terbaik untuk reproduksi
- Hasilkan generasi baru lewat crossover dan mutasi dan menghasilkan anak
- Evaluasi fitness dari setiap individu anak
- Ganti bagian populasi terburuk dengan anak
4. Sampai kondisi akhir tercapai
No comments:
Post a Comment