L'algoritmo GSAT è, per la maggior parte, semplice: ottieni una formula in forma congiuntiva normale e capovolgi i letterali delle clausole fino a trovare una soluzione che soddisfi la formula o raggiungi il limite max_tries / max_flips e non trovi alcuna soluzione.
Sto implementando il seguente algoritmo:
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
Ho problemi a interpretare la seguente riga:
V <- the variable whose flip yield the most important raise in the number of satisfied clauses;
Il numero massimo di clausole soddisfatte non è quello che stiamo cercando? Mi sembra che stiamo cercando di utilizzare la soluzione o approssimazioni per trovare la soluzione.
Ho pensato ad alcuni modi per farlo, ma sarebbe bello sentire altri punti di vista (Il presupposto è che una volta che la variabile viene capovolta una volta selezionata.):
- Genera uno spazio degli stati con tutti i possibili capovolgimenti e cerca nello spazio un valore letterale che dia la migliore approssimazione allo stato obiettivo.
- Seleziona in modo casuale la variabile che capovolgerò partendo dai valori letterali più comuni.
- Scegli un valore letterale casuale.