Реалізація алгоритму 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

Чи не максимальна кількість задоволених пропозицій, що ми шукаємо?

Так, ми шукаємо завдання, яке задовольняє максимальну кількість пунктів (тобто всі вони, бажано). І для цього ми запитуємо себе: "Яка єдина змінна наблизить нас до цієї мети, коли її перевернемо?" а потім переверніть його.

Мені здається, що ми намагаємось використати рішення чи наближення до нього, щоб знайти рішення.

Використання рішення було б, якби ми запитали "Яка комбінація декількох фліпів дала б найкращий результат?" або просто "Яке завдання було б найкращим?". Однак це не те, що ми робимо, ми дивимось лише на крок вперед. Використання апроксимації рішення виглядає як точний опис. Однак у цьому немає нічого поганого. Ось як працюють жадібні стратегії.

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

Правильно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.