Implémentation de l'algorithme GSAT - Comment sélectionner le littéral à retourner?

20

L'algorithme GSAT est, pour la plupart, simple: vous obtenez une formule sous forme normale conjonctive et retournez les littéraux des clauses jusqu'à ce que vous trouviez une solution qui satisfasse la formule ou que vous atteigniez la limite max_tries / max_flips et ne trouviez aucune solution.

J'implémente l'algorithme suivant:

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

J'ai du mal à interpréter la ligne suivante:

V <- the variable whose flip yield the most important raise in the number of satisfied clauses;

N'est-ce pas le nombre maximum de clauses satisfaites que nous recherchons? Il me semble que nous essayons d'utiliser la solution ou des approximations pour trouver la solution.

J'ai pensé à quelques façons de le faire, mais ce serait bien d'entendre d'autres points de vue (l'hypothèse est qu'une fois la variable retournée une fois qu'elle est sélectionnée.):

  • Générez un espace d'état avec tous les retournements possibles et recherchez dans l'espace un littéral qui donne la meilleure approximation de l'état de l'objectif.
  • Sélectionnez au hasard la variable que je retournerai en commençant par les littéraux les plus courants.
  • Choisissez un littéral aléatoire.
Daniel
la source

Réponses:

12

N'est-ce pas le nombre maximum de clauses satisfaites que nous recherchons?

Oui, nous recherchons une affectation qui satisfait le nombre maximum de clauses (c'est-à-dire toutes, de préférence). Et à cette fin, nous nous demandons "Quelle variable unique nous rapprochera le plus de cet objectif lorsque nous le retournerons?" puis retournez-le.

Il me semble que nous essayons d'utiliser la solution ou des approximations pour trouver la solution.

L'utilisation de la solution serait si nous demandions "Quelle combinaison de plusieurs flips donnerait le meilleur résultat?" ou simplement "Quelle mission serait la meilleure?". Cependant, ce n'est pas ce que nous faisons, nous ne cherchons qu'une longueur d'avance. L'utilisation d'une approximation de la solution semble être une description précise. Mais il n'y a rien de mal à cela. Voilà comment fonctionnent les stratégies gourmandes.

Générez un espace d'état avec tous les retournements possibles et recherchez dans l'espace un littéral qui donne la meilleure approximation de l'état de l'objectif.

Droite.

sepp2k
la source