Algoritma GSAT sebagian besar lurus ke depan: Anda mendapatkan rumus dalam bentuk normal konjungtif dan membalikkan literal klausa hingga Anda menemukan solusi yang memenuhi rumus atau Anda mencapai batas max_tries / max_flips dan tidak menemukan solusi.
Saya menerapkan algoritma berikut:
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
Saya mengalami kesulitan menafsirkan baris berikut:
V <- the variable whose flip yield the most important raise in the number of satisfied clauses;
Bukankah jumlah klausa puas maksimum yang kita cari? Menurut saya, kami mencoba menggunakan solusi atau perkiraan untuk menemukan solusi.
Saya telah memikirkan beberapa cara untuk melakukan ini tetapi akan lebih baik untuk mendengar sudut pandang lain (Asumsinya adalah bahwa sekali variabel dibalik setelah dipilih.):
- Hasilkan ruang keadaan dengan semua kemungkinan membalik dan cari ruang untuk literal yang menghasilkan perkiraan terbaik untuk keadaan tujuan.
- Pilih secara acak variabel yang akan saya flip mulai dengan literal yang lebih umum.
- Pilih literal acak.