WalkSAT dan GSAT adalah algoritma pencarian lokal yang terkenal dan sederhana untuk memecahkan masalah kepuasan Boolean. Pseudocode untuk algoritma GSAT disalin dari pertanyaan Menerapkan algoritma GSAT - Bagaimana memilih literal mana yang akan dibalik? dan disajikan di bawah ini.
procedure GSAT(A,Max_Tries,Max_Flips)
A: is a CNF formula
for i:=1 to Max_Tries do
S <- instantiation of variables
for j:=1 to Max_Iter do
if A satisfiable by S then
return S
endif
V <- the variable whose flip yield the most important raise in the number of satisfied clauses;
S <- S with V flipped;
endfor
endfor
return the best instantiation found
end GSAT
Di sini kita membalik variabel yang memaksimalkan jumlah klausa yang puas. Bagaimana ini dilakukan secara efisien? Metode naif adalah membalik setiap variabel, dan untuk setiap langkah melalui semua klausa dan menghitung berapa banyak dari mereka yang puas. Bahkan jika suatu klausa dapat ditanyakan untuk kepuasan dalam waktu konstan, metode naif akan tetap berjalan dalam waktu , di mana adalah jumlah variabel dan jumlah klausa. Saya yakin kita bisa melakukan yang lebih baik, maka pertanyaannya:
Banyak algoritma pencarian lokal membalik tugas variabel yang memaksimalkan jumlah klausa yang puas. Dalam praktiknya, dengan struktur data apa operasi ini didukung secara efisien?
Ini adalah sesuatu yang saya rasa seperti buku teks yang sering kali dihilangkan. Salah satu contohnya adalah buku Russell & Norvig yang terkenal .