Der GSAT-Algorithmus ist größtenteils unkompliziert: Sie erhalten eine Formel in konjunktiver Normalform und spiegeln die Literale der Klauseln, bis Sie eine Lösung finden, die der Formel entspricht, oder Sie die Grenze max_tries / max_flips erreichen und keine Lösung finden.
Ich implementiere den folgenden Algorithmus:
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
Ich habe Probleme beim Interpretieren der folgenden Zeile:
V <- the variable whose flip yield the most important raise in the number of satisfied clauses;
Ist die maximale Anzahl zufriedener Klauseln nicht das, wonach wir suchen? Es scheint mir, dass wir versuchen, die Lösung oder Annäherungen daran zu verwenden, um die Lösung zu finden.
Ich habe mir einige Möglichkeiten überlegt, dies zu tun, aber es wäre gut, andere Standpunkte zu hören (Die Annahme ist, dass die Variable nach Auswahl umgedreht wird.):
- Generieren Sie einen Zustandsraum mit allen möglichen Spiegeln und durchsuchen Sie den Raum nach einem Literal, das die beste Annäherung an den Zielzustand ergibt.
- Wählen Sie zufällig die Variable aus, die ich ausgehend von den am häufigsten verwendeten Literalen spiegeln möchte.
- Wählen Sie ein zufälliges Literal.
quelle