Implementieren des GSAT-Algorithmus - Wie wähle ich das zu spiegelnde Literal aus?

20

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.
Daniel
quelle

Antworten:

12

Ist die maximale Anzahl zufriedener Klauseln nicht das, wonach wir suchen?

Ja, wir suchen nach einer Aufgabe, die die maximale Anzahl von Klauseln erfüllt (das sind vorzugsweise alle). Und zu diesem Zweck fragen wir uns: "Welche einzelne Variable bringt uns diesem Ziel am nächsten, wenn wir es umdrehen?" und dann umdrehen.

Es scheint mir, dass wir versuchen, die Lösung oder Annäherungen daran zu verwenden, um die Lösung zu finden.

Die Lösung wäre, wenn wir fragen würden: "Welche Kombination mehrerer Flips würde das beste Ergebnis liefern?" oder einfach "Welche Aufgabe wäre die beste?". Das ist jedoch nicht das, was wir tun, wir schauen nur einen Schritt voraus. Eine Annäherung der Lösung scheint eine genaue Beschreibung zu sein. Daran ist jedoch nichts auszusetzen. So funktionieren gierige Strategien.

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.

Recht.

sepp2k
quelle