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


25

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

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

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

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

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

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

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

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

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

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

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

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

Чи є якісь інші методи, яких я не помітив? Який я повинен використовувати? Хтось тестував це, чи пробував їх експериментально, чи хтось із цим має досвід? Чи кількість пропозицій та / або кількість нових булевих змінних є хорошим показником для оцінки впливу цього на продуктивність вирішувача 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=lgn(x1xn)2lgnxi¬yjxiyjji

knx1,,xny1,,ynykyk+1O(nlg2n)O(nlg2n)

Папір є

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

nkn

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

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