Heuristik (ilmu komputer)

Dalam bidang optimasi matematika dan ilmu komputer, **heuristik** (bahasa Yunani: εὑρίσκω. "Saya menemukan") adalah teknik yang dirancang untuk memecahkan masalah dengan lebih cepat ketika metode klasik terlalu lambat untuk menemukan solusi pasti atau hampiran, atau ketika metode klasik gagal menemukan solusi yang pasti di ruang pencarian.  Hal ini dicapai dengan menukar keoptimalan, kelengkapan, akurasi, atau presisi dengan kecepatan.  Sedikit banyak, heuristik ini dapat dianggap sebagai jalan pintas.

Sebuah **fungsi heuristik**, atau secara sederhana disebut **heuristik**, adalah sebuah fungsi (matematika) yang mengurutkan alternatif-alternatif dalam algoritma pencarian pada setiap langkah percabangan berdasarkan informasi yang tersedia untuk menentukan cabang mana yang harus diikuti. Sebagai contoh, cabang tersebut mungkin menghampiri solusi yang tepat.

## Definisi dan Motivasi
Tujuan utama heuristik adalah menghasilkan solusi dalam waktu yang **wajar** dan **dapat diterima** untuk memecahkan masalah yang dihadapi. Solusi ini mungkin bukan yang optimal atau mungkin hanya merupakan hampiran dari solusi sebenarnya, tetapi cukup efektif untuk memberikan jawaban praktis dalam rentang waktu yang masuk akal.

Heuristik dapat bekerja secara mandiri untuk menghasilkan solusi atau diintegrasikan dengan algoritma optimasi untuk meningkatkan efisiensi. Sebagai contoh, heuristik dapat digunakan untuk menentukan nilai awal yang strategis (*seed value*) untuk mempercepat pencapaian solusi optimal dalam algoritma optimasi.

Pentingnya heuristik semakin mengemuka dalam menghadapi masalah **NP-hard** yang untuk menemukan solusi optimal dengan pendekatan komputasi klasik menjadi **tidak praktis** atau bahkan **tidak mungkin**. Dalam skenario tersebut, heuristik menjadi pilihan realistis untuk mendapatkan solusi berkualitas tinggi dalam waktu yang wajar.

Lebih lanjut, heuristik merupakan landasan bagi bidang Kecerdasan Buatan (AI) dan simulasi komputer untuk meniru proses berpikir manusia. Kemampuan heuristik untuk mengarahkan pencarian solusi dalam skenario tanpa algoritma yang pasti menjadikannya elemen vital dalam sistem AI yang adaptif dan cerdas.

## Kompromi
Meskipun menjanjikan solusi cepat dan efisien, heuristik memiliki kompromi yang perlu dipertimbangkan ketika akan menggunakan heuristik untuk memecahkan suatu masalah, sebagai berikut.
* *Optimalitas:* Ketika terdapat beberapa kemungkinan solusi dalam masalah yang diberikan, apakah algoritma heuristik tersebut dapat menjamin bahwa solusi terbaik dapat ditemukan? Apakah suatu keharusan untuk menemukan solusi terbaik?
* *Kelengkapan:* Ketika terdapat beberapa kemungkinan solusi dalam masalah yang diberikan, apakah algoritma heuristik mampu untuk menemukan semua solusi tersebut? Apakah semua solusi perlu untuk ditemukan? Sebab kebanyakan algoritma heuristik hanya dirancang untuk menemukan satu solusi.
* *Akurasi dan presisi:* Apakah algoritma heuristik tersebut dapat memberikan interval kepercayaan untuk solusi yang seharusnya? Apakah *error bar* pada solusi terlalu besar?
* *Waktu eksekusi*: Apakah algoritma heuristik yang digunakan merupakan algoritma terbaik yang diketahui sekarang untuk memecahkan masalah yang sedang dihadapi? Beberapa algoritma heuristik lebih cepat konvergen daripada yang lainnya. Beberapa heuristik hanya sedikit lebih cepat daripada metode klasik, dalam hal ini *overhead* dalam menghitung heuristik mungkin berdampak negatif.

Dalam beberapa kasus, mungkin sulit untuk memutuskan apakah solusi yang ditemukan oleh heuristik cukup baik karena teori yang mendasari heuristik tidak terlalu mendalam.

## Lihat juga
* Heuristik konstruktif
* Metaheuristik: Metode untuk mengontrol dan men-tuning algoritma heuristik dasar, biasanya dengan penggunaan memori dan proses pemelajaran.
* Mateuristik: Algoritma optimasi yang dibuat dengan interoperabilitas teknik metaheuristik dan pemrograman matematis (MP).
*Optimasi pencarian reaktif: Metode yang menggunakan prinsip-prinsip pemelajaran mesin daring untuk men-tuning heuristik secara mandiri.

## Referensi