Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Альтернативы
Недавние
Show all languages
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

Из Википедии — свободной энциклопедии

Алгоритм CDCL (англ. conflict-driven clause learning — «управляемое конфликтами обучение дизъюнктам») — основанный на алгоритме DPLL эффективный решатель (NP-полных) задач выполнимости булевых формул (SAT-решатель). Основная структура данных в CDCL-решателях — импликационный граф, фиксирующий назначения переменным, а другой особенностью является использование нехронологического возврата и запоминание дизъюнктов в ходе анализа конфликта.

Алгоритм был предложен Жуаном Маркесом-Сильвой (англ. João Marques-Silva) и Каремом Сакаллой (англ. Karem A. Sakallah) в 1996 году[1] и независимо Роберто Байярдо (англ. Roberto J. Bayardo) и Робертом Шрагом (англ. Robert C. Schrag) в 1997 году[2][3].

Описание

DPLL-алгоритм, лежащий в основе CDCL-алгоритма, использует поиск с возвратом на конъюнктивных нормальных формах, на каждом шаге которого происходит выбор переменной и присвоения ей значения (0 или 1) для последующего ветвления, заключающегося в присваивании значения переменной, после чего упрощённая формула проходит рекурсивную проверку на выполнимость. В случае, когда встречается конфликт, то есть, полученная формула является невыполнимой, включается механизм возврата (бэктрекинга), при котором отменяются ветвления, в которых для переменной были опробованы оба значения. Если поиск возвращается к ветвлению первого уровня, вся формула объявляется невыполнимой. Такой возврат, свойственный алгоритму DPLL, называется хронологическим[3].

Дизъюнкты, используемые в алгоритме, делятся на выполнимые (satisfied), когда среди входящих в дизъюнкт значений есть 1, невыполнимые (unsatisfied) — все значения нулевые, единичные (unit) — все нули, кроме одной переменной, которой значение ещё не присвоено, и неразрешённые (unresolved) — все остальные. Одной из важнейших составляющих SAT-решателей является правило единичного дизъюнкта, при котором выбор переменной и её значения однозначен. (Следует напомнить, что в дизъюнкт входят как переменные, так и их отрицания.) Процедура распространения переменной (англ. unit propagation) (в современных CDCL-решателях она почти всегда основывается на правиле единичного дизъюнкта) производится после ветвления для вычисления логических следствий сделанного выбора[3].

В дополнение к DPLL и его механизму поиска с возвратом, CDCL использует некоторые другие приёмы[3]:

  • запоминание новых дизъюнктов в ходе поиска с возвратом.
  • использование структуры конфликтов для получения и запоминания новых дизъюнктов.
  • применение ленивых структур данных для представления формул.
  • эвристики ветвления имеют низкие затраты вычислительных ресурсов и получают обратную связь от поиска с возвратами.
  • периодический перезапуск поиска с возвратами.
  • политики удаления для выученных дизъюнктов.
  • другие виды оптимизации.

Схема алгоритма

С каждой переменной проверяемой на выполнимость формулы в CDCL-алгоритме связаны несколько вспомогательных значений[3]:

  • значение переменных ν(vi)∈{0,u,1} для всех переменных vi, где u служит для обозначения ещё не назначенной переменной
  • уровень решения, на котором переменной было присвоено значение от −1 (не присвоено) до количества переменных.
  • предпосылка (antecendent) — единичный дизъюнкт формулы, на основе которого последовало значение переменной по правилу единичного дизъюнкта. Для ещё неназначенных переменных и переменных, по которым было принято решение, имеет значение None.

Схематично типичный CDCL-алгоритм можно представить следующим образом[3]:

   Алгоритм CDCL(φ, ν)
   вход: 
     φ - формула (КНФ)
     ν - отображение значений переменных в виде множества пар
   выход:
     SAT (формула выполнима) или UNSAT (невыполнима)
   если UnitPropagationConflict(φ, ν)
   то 
     возврат UNSAT
   L := 0                                    -- уровень решения
   пока NotAllVariablesAssigned(φ, ν)
     (x, v) := PickBranchingVariable(φ, ν)   -- принятие решения
     L := L + 1
     ν := ν ∪ {(x, v)}
     если UnitPropagationConflict(φ, ν)      -- вывод последствий
     то
       β := ConflictAnalysis(φ, ν)           -- диагностика конфликта
       если β < 0
       то
         возврат UNSAT
       иначе
         Backtrack(φ, ν, β)                  -- возврат (бэктрекинг)
         L := β
   возврат SAT

В этом алгоритме использовано несколько подпрограмм, которые помимо возврата значений могут изменять и переданные им по ссылке переменные φ, ν[3]:

  • UnitPropagationConflict итеративно применяет правило единичного дизъюнкта, возвращая значение Истина в случае нахождения невыполнимого дизъюнкта.
  • NotAllVariablesAssigned проверяет, есть ли ещё неназначенные переменные.
  • PickBranchingVariable выбирает переменную и назначаемое значение (1 или 0).
  • ConflictAnalysis анализирует возникший конфликт, запоминает новый дизъюнкт и даёт уровень решения, к которому необходимо вернуться.
  • Backtrack производит возврат к уровню, вычисленному в ходе анализа конфликта.

Процедура анализа конфликта является центральной для CDCL алгоритма.

Основной структурой данных, используемой в CDCL-решателях, является импликационный граф (англ. implication graph), фиксирующий назначения переменным (как в результате решений, так и применением правила единичного дизъюнкта), в котором вершины соответствуют литералам формулы, а дуги фиксируют структуру импликаций[4][5].

Анализ конфликта

Процедура анализа конфликта (см. схему алгоритма) вызывается при обнаружении конфликта по правилу единичного дизъюнкта, и на её основе пополняется множество запомненных дизъюнктов. Процедура начинает с узла импликационного графа, в котором обнаружен конфликт, и охватывает уровни решения с меньшими номерами, переходя назад по импликациям пока не встречает самую свежую назначенную (в результате решения) переменную[3]. Запомненные дизъюнкты применяются в нехронологическом возврате (англ. non-chronological backtracking) — ещё одном характерном для CDCL-решателей приёме[6].

Для сравнения:

Идея использования структуры импликаций, приведших к конфликту, была развита в сторону применения UIP (англ. Unit Implication Points — «точки единичной импликации»). UIP — это доминатор импликационного графа, который у этого вида графа можно вычислить за линейное время. UIP представляет собой альтернативный вариант назначения переменных и дизъюнкт, запомненный в первой такой точке, гарантированно имеет наименьший размер и обеспечивает наибольшее уменьшение уровня решения. В связи с применением эффективных ленивых структур данных, авторы многих SAT-решателей, например, Chaff, применяют метод первого UIP для запоминания дизъюнктов (англ. first UIP clause learning)[3].

Корректность и полнота

Как и DPLL, алгоритм CDCL является корректным и полным SAT-решателем. Так, запоминание дизъюнктов не влияет на полноту и корректность, так как каждый запомненный дизъюнкт может быть выведен из начальных дизъюнктов и других запомненных дизъюнктов методом резолюции. Изменённый механизм возврата также не влияет на полноту и корректность, так как информация о возврате сохраняется в запомненном дизъюнкте[3].

Пример

Иллюстрация работы алгоритма:

Применения

SAT-решатели на основе CDCL-алгоритма находят применение в автоматическом доказательстве теорем, криптографии, проверке моделей и тестировании аппаратного и программного обеспечения, биоинформатике, определении зависимостей в системах управления пакетами и т. п.[3]

Примечания

  1. J. P. Marques-Silva and K. A. Sakallah. GRASP: A new search algorithm for satisfiability. In International Conference on Computer-Aided Design, pages 220—227, November 1996.
  2. R. Bayardo Jr. and R. Schrag. Using CSP look-back techniques to solve real-world SAT instances. In National Conference on Artificial Intelligence, pages 203—208, July 1997
  3. 1 2 3 4 5 6 7 8 9 10 11 Conflict-Driven Clause Learning SAT Solvers, 2008.
  4. A Generalized Framework for Conflict Analysis, 2008.
  5. Hamadi, 2013.
  6. Pradhan, Harris, 2009.

Литература

  • Armin Biere, Marijn Heule, Hans van Maaren and Toby Walsch. Chapter 4. Conflict-Driven Clause Learning SAT Solvers // Handbook of Satisfiability. — IOS Press, 2008.
  • Matthew W. Moskewicz; Conor F. Madigan; Ying Zhao; Lintao Zhang; Sharad Malik (2001). "Chaff: Engineering an Efficient SAT Solver". Annual ACM IEEE Design Automation Conference. pp. 530–535.{{cite conference}}: Википедия:Обслуживание CS1 (множественные имена: authors list) (ссылка)
  • Hamadi, Y. Combinatorial Search: From Algorithms to Systems. — Springer Berlin Heidelberg, 2013. — 152 p. — ISBN 9783642414824.
  • Audemard, Gilles; Bordeaux, Lucas; Hamadi, Youssef; Jabbour, Saïd; Sais, Lakhdar. A Generalized Framework for Conflict Analysis. — В: Lecture Notes in Computer Science // SAT. — Springer, 2008. — 21-27 с.
  • Pradhan, D.K. and Harris, I.G. Practical Design Verification. — Cambridge University Press, 2009. — P. 252-254. — ISBN 9780521859721.
  • Järvisalo, M.; Van Gelder, A. Theory and Applications of Satisfiability Testing. — SAT 2013: 16th International Conference, Helsinki, Finland, July 8-12, 2013. Proceedings. — Springer Berlin Heidelberg, 2013. — ISBN 9783642390715.

Ссылки


Эта страница в последний раз была отредактирована 19 декабря 2023 в 15:12.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).