Dalam kendala masalah kepuasan, heuristik dapat digunakan untuk meningkatkan kinerja pemecah bactracking. Tiga heuristik yang biasa diberikan untuk solver backtracking sederhana adalah:
- Nilai sisa minimum (berapa banyak nilai masih valid untuk variabel ini)
- Derajat heuristik (berapa banyak variabel lain yang dipengaruhi oleh variabel ini)
- Least-constraining-value (nilai apa yang akan meninggalkan nilai paling lain untuk variabel lain)
Dua yang pertama cukup jelas dan mudah diterapkan. Pertama-tama pilih variabel yang memiliki nilai paling sedikit tersisa di domainnya, dan jika ada ikatan, pilih satu yang mempengaruhi sebagian besar variabel lainnya. Dengan cara ini jika langkah orang tua dalam solver mengambil tugas yang buruk, Anda cenderung untuk mengetahui lebih cepat dan dengan demikian menghemat waktu jika Anda memilih variabel dengan nilai paling kiri yang mempengaruhi sebagian besar hal lainnya.
Itu sederhana, jelas, dan mudah diimplementasikan.
Nilai pembatas terendah tidak didefinisikan dengan jelas, di mana pun saya melihat. Inteligensi Buatan: Suatu Pendekatan Modern (Russel & Norvig) hanya mengatakan:
Itu lebih suka nilai yang mengesampingkan pilihan paling sedikit untuk variabel tetangga dalam grafik kendala.
Mencari "nilai paling tidak membatasi" hanya menghasilkan banyak tampilan slide universitas berdasarkan buku teks ini, tanpa informasi lebih lanjut tentang bagaimana hal ini akan dilakukan secara algoritmik.
Satu-satunya contoh yang diberikan untuk heuristik ini adalah kasus di mana satu pilihan nilai menghilangkan semua pilihan untuk variabel tetangga, dan yang lainnya tidak. Masalah dengan contoh ini adalah bahwa ini adalah kasus sepele, yang akan dihilangkan segera ketika penugasan potensial diperiksa untuk konsistensi dengan kendala masalah. Jadi dalam semua contoh yang bisa saya temukan, heuristik dengan nilai paling tidak membatasi sebenarnya tidak menguntungkan kinerja pemecah dengan cara apa pun, kecuali untuk efek negatif kecil dari menambahkan cek berlebihan.
Satu-satunya hal lain yang dapat saya pikirkan adalah menguji kemungkinan penugasan variabel tetangga untuk setiap penugasan, dan menghitung jumlah penugasan yang mungkin dari tetangga yang ada untuk setiap penugasan yang mungkin dari variabel ini, kemudian memesan nilai untuk variabel ini. berdasarkan jumlah tugas tetangga yang tersedia jika nilai itu dipilih. Namun, saya tidak melihat bagaimana ini akan menawarkan peningkatan daripada urutan acak, karena ini membutuhkan pengujian berbagai kombinasi variabel dan pengurutan berdasarkan hasil dari penghitungan.
Adakah yang bisa memberikan deskripsi yang lebih berguna tentang nilai yang paling membatasi, dan menjelaskan bagaimana versi dengan nilai yang paling membatasi akan menghasilkan peningkatan?