Кодування обмеження 1-з-п для вирішувачів SAT


25

Я використовую розв'язувач SAT для кодування проблеми, і як частина примірника SAT, у мене є булеві змінні x1,x2,…,xn де передбачається, що саме одна з них повинна бути правдою, а решта повинна бути помилковим. (Я іноді бачив, як це описано як "гаряче" кодування.)

Я хочу кодувати обмеження "рівно один з x1,…,xn повинен бути істинним" в SAT. Який найкращий спосіб кодувати це обмеження, щоб змусити SAT вирішувач працювати максимально ефективно?

Я бачу багато способів кодування цього обмеження:

  • Парні обмеження. Я можу додати парні обмеження для всіх i , j, щоб переконатися, що щонайменше один x i є істинним, а потім додати x 1 ∨ x 2 ∨ ⋯ ∨ x n, щоб переконатися, що принаймні одна правда.¬xi∨¬xji,jxix1∨x2∨⋯∨xn

    Це додає пунктів і ніяких зайвих бульових змінних.Θ(n2)

  • Бінарне кодування. Я міг би ввести нових булевих змінних i 1 , i 2 , … , i lg n, щоб представляти (у двійковій) ціле число i таке, що 1 ≤ i ≤ n (додавання декількох булевих обмежень для того, щоб я знаходився в бажаному діапазоні ). Тоді я можу додати обмеження, що підтверджують, що x i - дерево, а всі інші x j - хибні. Іншими словами, для кожного j ми додаємо пропозиції, що підтверджують, що i = jlg⁡ni1,i2,…,ilg⁡ni1≤i≤nixixjj .i=j⇔xj

    Це додає пропозицій, і я не знаю, скільки зайвих булевих змінних.Θ(nlg⁡n)

  • Порахуйте кількість справжніх значень. Я міг би реалізувати дерево булевих схем суматорів і вимагати, щоб , розглядаючи кожне x i як 0 або 1 замість помилкового або істинного, і використовувати перетворення Цеїтіна для перетворення схеми в SAT пункти. Дерева напівсубарів достатньо: обмежте вихідний показник кожної половини додавача на 0 і обмежте кінцевий вихід остаточного додавача в дереві рівним 1. Дерево може бути обрано будь-якої форми ( збалансоване бінарне дерево, або незбалансоване, або будь-що інше).x1+x2+⋯+xn=1xi

    Це може бути зроблено в ворота і , таким чином , додає thetas ; ( п ) положення і Θ ( п ) нові логічні змінні.Θ(n)Θ(n)Θ(n)

    Особливим випадком такого підходу є введення булевих змінних з ідеєю, що y i має містити значення x 1 ∨ x 2 ∨ ⋯ ∨ x i . Цей намір можна реалізувати, додавши пункти y i ∨ ¬ x i , y i ∨ ¬ y i - 1 , і ¬ y i ∨ x i ∨ y i -y1,…,ynyix1∨x2∨⋯∨xiyi∨¬xiyi∨¬yi−1 (де ми розглядаємо y 0 як синонім помилкового) дляi=1,…,n. Далі ми можемо додати обмеження¬ y i ∨¬ x i + 1 дляi=1,2,…,n-1. Це в основному еквівалент трансформації Цеїтіна дерева, що наполовину додає, де дерево має максимально незбалансовану форму.¬yi∨xi∨yi−1y0i=1,…,n¬yi∨¬xi+1i=1,2,…,n−1

  • Метелик мережа Я міг би побудувати мережу метеликів на бітах, обмежити n- бітовий вхід на 000 ⋯ 01 , обмежити n- бітний вихід на x 1 x 2 ⋯ x n і розглянути кожне 2-бітове затвор метелика як незалежний затвор що або поміняє місцями, або не поміняє своєю інформацією на рішення, що робити на основі нової нової булевої змінної, яка не обмежується. Тоді я можу застосувати перетворення Цеїтіна для перетворення схеми на пропозиції SAT.nn000⋯01nx1x2⋯xn

    Для цього потрібні ворота і, таким чином, додаються Θ ( n lg n ) пропозиції та Θ ( n lg n ) нові булеві змінні.Θ(nlg⁡n)Θ(nlg⁡n)Θ(nlg⁡n)

Чи є якісь інші методи, яких я не помітив? Який я повинен використовувати? Хтось тестував це, чи пробував їх експериментально, чи хтось із цим має досвід? Чи кількість пропозицій та / або кількість нових булевих змінних є хорошим показником для оцінки впливу цього на продуктивність вирішувача SAT, чи ні, який би ви використовували?


Я щойно помітив, що у цій відповіді є деякі посилання на забезпечення обмежень кардинальності для SAT, тобто на виконання обмеження, що саме з n змінних є істинним. Отже, моє запитання зводиться до особливого випадку, коли k = 1 . Можливо, література про обмеження кардинальності допоможе пролити світло на моє запитання.knk=1


Більшість сучасних вирішувачів SAT підтримують положення про кардинальність та інші спеціальні обмеження (не для CNF).
— Давид Хорват

Відповіді:


12

Для особливого випадку k з n змінних правдиво, де k = 1, існує кодування змінної команди, як описано в Efficient Encoding CNF для вибору від 1 до N об'єктів Klieber та Kwon. Спрощено: розділіть змінні на невеликі групи та додайте пункти, які спричиняють стан змінної команди зазначати, що група змінних або є всіма помилковими, або всіма-але-одна хибними. Потім рекурсивно застосуйте той же алгоритм до змінних командирів. В кінці процесу вимагають, щоб саме одна з жменьки остаточних змінних командира була правдивою. Результатом є O (n) нові пропозиції та O (n) нові змінні.

Враховуючи всюдислісність двох дивіться-літералів у рішеннях на базі DPLL, я думаю, що зростання пропозиції O (n) є вирішальною перевагою перед схемами кодування, які б додали більше пропозицій.


2
Якщо "мала група" має розмір два, то це лише бінарне доповнення, де "командир" є бітом результатів, а перенос вважається помилковим. Виконаний рекурсивно, цей метод є повністю загальним (працює для 1 з N) і справді практично здійсненний.
— d8d0d65b3f7cf42

3

Документ Магнуса Бьорка описує дві методики, які варто варто спробувати.

nx1,…,xny1,…,ybb=lg⁡n(x1∨⋯∨xn)2lg⁡nxi⟹¬yjxi⟹yjji

knx1,…,xny1,…,ynykyk+1O(nlg2⁡n)O(nlg2⁡n)

Папір є

Магнус Бьорк. Успішні методи кодування SAT . 25 липня 2009 року.

nkn

Алан М. Фріш, Пол А. Джаннарос. Кодування SAT обмеження At-Most-k: деякі старі, деякі нові, деякі швидкі, деякі повільні . ModRef 2010.

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