Формула в КНФ - Laboratory of Mathematical Logic | of PDMI RAS

advertisement
Формула в КНФ
Определение
Пропозициональной или Булевой (propositional, Boolean)
переменной называется переменная, принимающая значения true
(1) и false (0).
Литералом (literal) называется Булева переменная x или ее
отрицание ¬x.
Клозом (clause) называется дизъюнкция конечного множества
литералов, не содержащего одновременно переменной и ее
отрицания.
k-клозом (k-clause) называется клоз, содержащий ровно k
литералов.
Формулой в конъюнктивной нормальной форме (КНФ) (formula in
conjunctive normal form, CNF) называется конъюнкция конечного
множества клозов.
В данной лекции мы рассмотрим задачу выполнимости булевых
формул в КНФ. Формула в КНФ представляет собой конюънкцию
клозов, клоз есть дизъюнкция литералов, а литерал есть булева
переменная или ее отрицание.
Меры сложности формул
n(F ), N(F ) — кол-во различных переменных в F .
m(F ), K (F ) — кол-во клозов в F .
l (F ), L(F ) — кол-во литералов в (длина) F .
Именно относительно этих стандартных мер сложности формул, как
правило, оценивается время работы алгоритмов для задачи
выполнимости.
Задача выполнимости
Определение
Задача пропозициональной выполнимости (Boolean satisfiability
problem, SAT): определить, выполнима ли данная формула в
КНФ, то есть существует ли набор Булевых значений переменным
формулы, выполняющий формулу. Такой набор называют
выполняющим (satisfying assignment), а формулу, для которой
такой набор существует, — выполнимой (satisfiable).
Задача максимальной выполнимости (maximum satisfiability
problem, SAT): по данной формуле определить, какое
максимальное количество ее клозов может быть выполнено.
k-SAT, MAX-k-SAT — частные случаи соответствующих задач,
когда все клозы входной формулы содержат не более k литералов.
Задача выполнимости заключается в проверке выполнимости данной
формулы в КНФ. Задача маскимальной выполнимости — более
общий вариант задачи выполнимости, в которой нас интересует не
просто ответ на вопрос, могут ли ве клозы данной формулы быть
одновременно выполнены, а точное максимальное количество
клозов, которые могут быть одновременно выполнены.
Пример
Пример
F1 = (x ∨ y ∨ ¬z) ∧ (¬x) ∧ (¬y ∨ z)
I
I
n(F1 ) = 3, m(F1 ) = 3, l (F1 ) = 6
F1 выполнима: x = 0, y = 1, z = 1
F2 = (x ∨ y ) ∧ (x ∨ ¬y ) ∧ (¬x ∨ y ) ∧ (¬x ∨ ¬y )
I
I
n(F2 ) = 2, m(F2 ) = 4, l (F1 ) = 8
F2 невыполнима, но три клоза можно выполнить
Два простейших примера, необходимых лишь для проверки
понимания только что данных определений.
NP-трудность
Первая известная NP-полная задача (Кук, 1971).
3-SAT тоже NP-полна.
2-SAT может быть решена за линейное время.
MAX-2-SAT NP-трудна, даже если каждая переменная
встречается в формуле не более трех раз.
SAT является одной из известнейших NP-полных задач. В то время
как 2-SAT может быть решена за линейное время, 3-SAT является
NP (доказывается сведением SAT к 3-SAT). А вот задача
максимальной выполнимости остается NP-трудной, даже если
каждый клоз входной формлуы содержит не более двух переменных,
а каждая переменная входит в формулу не более трех раз.
Важность задачи
http://www.satisfiability.org/ — The International
Conferences on Theory and Applications of Satisfiability Testing.
http://www.satcompetition.org/ — The international SAT
Competitions web page.
http://www.isa.ewi.tudelft.nl/Jsat — Journal on Satisfiability,
Boolean Modeling and Computation.
http://www.satlib.org/ — The Satisfiability Library.
http://www.satlive.org/ — Up-to-date links for the Satisfiability
Problem.
http://www.qbflib.org/ — The Quantified Boolean Formulas
Satisfiability Library.
Ввиду большой теоретической и практической важности задачи SAT
существует большое количество ресуросов в интернете, посвященных
этой задаче. Первый сайт содержит информацию по ежегодной
международной конференции, посвященной SAT. Второй — по
ежегодным соревнованиям программ, решающих SAT (т.н.
SAT-солверов). Третий — сайт научного журнала, публикующего
статьи о SAT. Четвертый — каталог ресурсов (солверы, бенчмарки,
генераторы бенчмарок и т.п.). Пятый — сайт новостей.
Сведения
Многие известные задачи из NP очень просто сводятся к SAT или
MAX-SAT.
Сведя задачу к SAT, на практике можно воспользоваться
SAT-солвером.
Такой подход иногда помогает, иногда — нет.
Язык SAT является довольно естественным: формула в КНФ, на
самом деле, просто записывает тот факт, что некоторое множество
ограничений должно быть выполнено. Поэтому многие задачи из NP
довольно просто запиысваются в терминах SAT. Таким образом,
получив пример некоторой сложной задачи, мы можем записать его
на языке SAT и воспользоваться каким-нибудь эффективным
солвером. Как мы, однако, увидим на одном из следующих слайдов,
сведение может хоть и полиномиально, но довольно сильно раздуть
задачу, после чего напускать на нее солвер будет проблематично.
Японские кроссворды
Определение
Решение японского кроссворда (japanese puzzle) заключается в
восстановлении картинки по длинам блоков подряд идущих
закрашенных клеток в строках и столбцах.
Первый простой пример — японские кроссворды.
Сведение к SAT
дано поле n × m
достаточно научиться кодировать тот факт, что в i-й строке
закрашены блоки длины a1 , . . . , at
введем такие переменные:
I
I
xij — клетка (i, j) закрашена
yijp — p-й блок строки i начинается в клетке j
Ограничения в данной задаче — длины блоков подряд закрашенных
клеток. Ясно, что нам достаточно научиться записывать такое
ограничение в виде множества клозов для одной строки (после чего
мы можем просто записать формулу, состоящую из такого
множества клозов для каждой строки и каждого столбца входного
поля). Введем для этого два типа переменных. Первый из них будет
кодировать тот факт, что конкретная клетка закрашена, второй —
что конкретный блок конкретной строки или столбца начинается в
конкретной клетке.
Сведение к SAT (продолжение)
итак, дана строка i с блоками a1 , . . . , at
p-й блок начинается ровно в одной клетке:
(yi1p ∨ yi2p ∨ · · · ∨ yimp ) ∧ {(¬yijp ∨ ¬yikp )}j6=k
(p + 1)-й блок начинается позже конца p-го:
{(¬yij(p+1) ∨ ¬yi(j+k)p )}k≥0
если p-й блок начинается в клетке j, то соответствующие ap
клеток закрашены:
{(¬yijp ∨ xi(j+k) )}0≤k<ap
если клетка не принадлежит ни одному из блоков, то она не
закрашена:
(yi(j−a1 +1)1 ∨ · · · ∨ yij1 ∨ · · · ∨ yi(j−at +1)p ∨ · · · ∨ yijt ∨ ¬xij )
Для записи необходимого нам ограничения сперва запишем тот
факт, что yijp — честные переменные, то есть то, что каждый блок
начинается ровно в одной клетке. Дальше закодируем то, что блоки
идут последовательно. Далее, если в какой-то клетке начинается
блок, то соответствующее (то есть равное длине этого блока)
количество клеток закрашено. И наконец, если клетка не попадает
ни в какой блок, то она не должна быть закрашена.
Замечание
если какой-то индекс “вылезает”, то соответствующим
переменным просто присваиваем значение 0
можно сводить более эффективно
Легко видеть, что представленное на предыдущем слайде сведение
дано не совсем формально: не учитывается, например, что блок
длины больше 1 не может начинаться в самой последней клетке (в
таком случае он не может поместиться физически). Но на самом
деле, эта проблема легко решается присваиванием значения 0
соответствующим переменным (например, если ap = 4, то добавляем
клозы (¬yinp ), (¬yi(n−1)p ), (¬yi(n−2)p )). Более того, видно, что
количество клозов можно уменьшить.
Игра Eternity
Определение
Нужно замостить квадрат заданным набором доминошек так, чтобы
узоры на граничащих частях доминошек совпадали.
На сайте www.eternity2.com представлена игра, в которой
требуется в квадрате 16 × 16 расположить 256 заданных доминошек
так, что не нарушался узор. Создатели игры гарантируют, что
решение у данной задачи существует, и обещают первому
решившему два миллиона долларов.
Сведение к SAT
дан квадрат n × n и n2 доминошек
перенумеруем все клетки и доминошки числами от 1 до n2
заводим два типа переменных:
I
I
xij — в i-й клетке стоит j-я доминошка
yjk — j-я доминошка в “положении” k, 1 ≤ k ≤ 4 (например, так:
k = 1 — не повернута, k = 2 — повернута на π/2 по часовой,
k = 3 — на π, k = 4 — на π/2 против часовой)
Для сведения этой задачи к SAT опять введем два типа переменных.
Первый из них будет кодировать тот факт, что конкретная
доминошка поставлена в конкретную клетку, второй будет содержать
информацию о том, как именно повернута доминошка.
Сведение к SAT
каждая доминошка находится ровно в одном “положении”:
(yj1 ∨ yj2 ∨ yj3 ∨ yj4 ) ∧ {(¬yjp ∨ ¬yjq )}p6=q
каждая доминошка стоит хотя бы в одной клетке:
{(x1j ∨ x2j ∨ · · · ∨ xn2 j )}j∈[n2 ]
в каждой клетке стоит хотя бы одна доминошка:
{(xi1 ∨ xi2 ∨ · · · ∨ xin2 )}i∈[n2 ]
доминошка не стоит в двух клетках одновременно:
{(¬xpj ∨ ¬xqj )}p6=q
Первым делом записываем тот факт, что переменные yjk —
“честные”. Далее установим взаимнооднозначное соответствие
между доминошками и клетками.
Сведение к SAT (продолжение)
в клетке одновременно не стоят две доминошки:
{(¬xip ∨ ¬xiq )}p6=q
две доминошки должны граничить равными ребрами:
{(¬xi1 j1 ∨ ¬xi2 j2 ∨ ¬yi1 k1 ∨ ¬yi2 k2 )},
если клетки i1 и i2 — соседи и при постановке туда доминошек j1
и j2 в “положениях”, соответственно, k1 и k2 нарушается узор
Суть же задачи кодируется последним множеством клозов,
кодирующим тот факт, что в двух соседних клетках не может стоять
двух конкретных доминошек, если при этом нарушается узор.
Не все так просто, тем не менее
итак, мы записали игру Eternity в виде задачи выполнимости
конкретной формулы при помощи полиномиального сведения
осталось напустить на полученную формулу какой-нибудь
эффективный SAT-солвер
но в чем же тогда подвох?
давайте примерно оценим длину полученной формулы
Итак, мы записали игру в виде задачи выполнимости. Проблема же
в том, что полученная формула, на самом деле, будет огромна.
Оценка длины
(yj1 ∨ yj2 ∨ yj3 ∨ yj4 ) ∧ {(¬yjp ∨ ¬yjq )}p6=q
(4 + 2 · 6)n2
{(x1j ∨ x2j ∨ · · · ∨ xn2 j )}j∈[n2 ]
n2 · n2
{(xi1 ∨ xi2 ∨ · · · ∨ xin2 )}i∈[n2 ]
n2 · n2
n2 · n2
n2 · n2
{(¬xpj ∨ ¬xqj )}p6=q
{(¬xip ∨ ¬xiq )}p6=q
{(¬xi1 j1 ∨ ¬xi2 j2 ∨ ¬yi1 k1 ∨ ¬yi2 k2 )}
∼ n2 · n2 · n2
Итого, порядок длины формулы будет n6 , что при n = 16 составляеят
166 = 224 = 16 777 216.
Оценив очень приблизительно длину формулы, мы получили
16 777 216.
Задача о максимальном разрезе
Определение
Задача о максимальном разрезе (maximum cut, MAX-CUT)
заключается в нахождении такого разбиения вершин графа на две
части, при котором количество ребер, концы которых принадлежат
разным частям, максимально.
NP-трудность
Одна из знаменитых 21-й NP-полной задачи Карпа.
Остается NP-полной даже на графах степени 3.
В предыдущих двух примерах мы рассматривали задачи разрешения.
Давайте теперь рассмотрим пример оптимизационной задачи, а
именно, задачу о максимальном разрезе. Как и многие известные
задачи на графах, она довольно просто сводится к MAX-2-SAT.
Сведение к MAX-2-SAT
каждой вершине u графа G (V , E ) поставим в соответствие
переменную xu (xu = 1 — вершина u принадлежит первой части)
для каждого ребра (u, v ) запишем два клоза (xu ∨ xv ), (¬xu ∨ ¬xv )
видно, что набор значений переменным u, v выполняет оба клоза,
когда u и v в разных частях, и выполняет только один из них —
когда в одной
таким образом, максимальное количество одновременно
выполнимых клозов полученной формулы равно
|E | + |MAX-CUT(G )|
По каждому ребру графа мы записываем два клоза так, что оба этих
клоза выполнены, если ребро попадает в разрез, а если не
попадает — то выполнен ровно один. Нетрудно видеть, что, зная
максимальное кол-во одновременно выполнимых клозов полученной
формулы, мы легко найдем размер максимального разреза
исходного графа.
Download