Реализация алгоритма GSAT - Как выбрать, какой литерал переворачивать?

20

Алгоритм GSAT по большей части прост: вы получаете формулу в соединительной нормальной форме и переворачиваете литералы предложений до тех пор, пока не найдете решение, удовлетворяющее формуле, или не достигнете предела max_tries / max_flips и не найдете решения.

Я реализую следующий алгоритм:

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

У меня проблемы с интерпретацией следующей строки:

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

Разве мы не ищем максимальное количество удовлетворенных предложений? Мне кажется, что мы пытаемся использовать решение или приближения к нему, чтобы найти решение.

Я подумал о некоторых способах сделать это, но было бы хорошо услышать другие точки зрения (Предполагается, что, как только переменная перевернута, когда она выбрана):

  • Создайте пространство состояний со всеми возможными переворотами и найдите пространство для литерала, который дает наилучшее приближение к целевому состоянию.
  • Случайно выберите переменную, которую я переверну, начиная с литералов, которые встречаются чаще.
  • Выберите случайный литерал.
Даниил
источник

Ответы:

12

Разве мы не ищем максимальное количество удовлетворенных предложений?

Да, мы ищем присваивание, которое удовлетворяет максимальному количеству предложений (это все они, предпочтительно). И с этой целью мы спрашиваем себя: «Какая единственная переменная приблизит нас к этой цели, если ее перевернуть?» а затем переверните его.

Мне кажется, что мы пытаемся использовать решение или приближения к нему, чтобы найти решение.

Использование решения было бы, если бы мы спросили: «Какая комбинация из нескольких сальто дала бы лучший результат?» или просто «Какое задание будет лучшим?». Однако это не то, что мы делаем, мы только на шаг впереди. Использование аппроксимации решения кажется точным описанием. Однако в этом нет ничего плохого. Вот как работают жадные стратегии.

Создайте пространство состояний со всеми возможными переворотами и найдите пространство для литерала, который дает наилучшее приближение к целевому состоянию.

Правильно.

sepp2k
источник