WalkSAT ve GSAT , Boole memnuniyetini çözmek için iyi bilinen ve basit yerel arama algoritmalarıdır. GSAT algoritması için sözde kod GSAT algoritmasını uygulama sorusundan kopyalanır - Döndürülecek değişmezi nasıl seçilir? ve aşağıda sunulmuştur.
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
Burada memnun cümle sayısını en üst düzeye çıkaran değişkeni çeviriyoruz. Bu nasıl verimli bir şekilde yapılır? Naif yöntem, her değişkeni çevirmek ve her adım için tüm cümleleri çevirmek ve kaç tanesinin tatmin olduğunu hesaplamaktır. Bir cümle sabit zamanda tatmin edilebilirlik için sorgulanabilse bile, saf yöntem hala zamanında çalışacaktır , burada değişken sayısı ve cümle sayısıdır. Eminim daha iyisini yapabiliriz, dolayısıyla soru:
Birçok yerel arama algoritması, değişkenin atamasını tatmin edici cümleciklerin sayısını en üst düzeye çıkarır. Uygulamada, bu işlem hangi veri yapılarıyla verimli bir şekilde desteklenmektedir?
Bu ders kitaplarının sık sık atladığını hissettiğim bir şey. Bir örnek ünlü Russell & Norvig kitabı bile .