Apa itu Nilai Terkecil-Kendalikan?

11

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?

zstewart
sumber
AI: AMA (hlm. 228) menyebutkan bahwa nilai heuristik yang paling tidak membatasi dikemukakan oleh Haralick dan Elliot (1980). Makalah ( ditemukan di sini ) menggunakan bahasa yang jauh berbeda dari yang digunakan dalam AI: AMA dan saya mengalami kesulitan menentukan bagian mana yang merujuk pada heuristik LCV.
ryan

Jawaban:

3

lihat tautan ini:

https://people.cs.pitt.edu/~wiebe/courses/CS2710/lectures/constraintSat.example.txt

Pertama memilih variabel "O" dan kemudian menguji "O" dengan semua nilai-nilai hukumnya "i" untuk melihat jumlah pengurangan pada tetangga "O" "N". Itu menambah mereka semua. dan memilih "i" yang menyebabkan pengurangan lebih sedikit:

   sums = {0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0}
   For i from 0 to 9:  
     plug "o=i" into the constraint formulas
     For each neighbor "N" of "o" in the constraint graph:
       sums[i] += the number of values remaining for "N"

Itu mengambil "i" sehingga:

sums[i] = MAX{sums[i] | for all "i" that is a member of "O",s valid values}

Saya harap ini dapat membantu Anda menemukan jawaban Anda!

HsnVahedi
sumber
1
Ini tidak menjawabexplain how that version of least-constraining-value would actually yield an improvement?
skrtbhtngr
1

Saya berpikir bahwa hal utama di sini adalah bahwa heuristik ini diterapkan tergantung pada tugas yang ditulis pemecah. Dan jika ada kemungkinan bahwa jika nilai yang dipilih dari suatu variabel tidak meninggalkan nilai tunggal dalam domain variabel lain (katakanlah kita memiliki masalah yang sangat terbatas dengan hanya satu solusi), maka solusi akan terhenti . Dan pencarian acak bisa berjalan di jalur yang benar menuju ke keputusan dan yang salah. Dan jika itu salah, Anda harus melakukan backtracking (lihat backjumping yang diarahkan pada konflik), dan itu membutuhkan waktu komputasi. Tetapi algoritma yang menggunakan heuristik LCV lebih cenderung mengikuti jalur yang lebih benar dan tidak diperlukan pengembalian. Tetapi jika ada masalah yang tidak dibatasi saya pikir itu akan seperti pencarian acak.

Yan
sumber