Перетворення (математика) проблем на екземпляри SAT


22

Що я хочу зробити, це перетворити математичну задачу, яку я маю, на булеву задачу задоволеності (SAT), а потім вирішити її за допомогою SAT Solver. Цікаво, чи хтось знає посібник, посібник чи щось, що допоможе мені перетворити мою проблему на екземпляр SAT.

Також я хочу вирішити це в кращий, ніж експоненційний час. Я сподіваюся, що SAT Solver допоможе мені.


1
SAT не мають ефективних методів ... але подивіться на ці слайди
Fayez Abdlrazaq Deab

будь ласка, також подивіться тут: cs.stackexchange.com/questions/12135/convert-problem-to-cnf
Дхріс

Просто швидке та брудне рішення перед тим, як спробувати щось інше, на випадок, якщо ви просто хочете щось перевірити: cryptlogver . Інструмент говорить, що він орієнтований на криптовалюту, але це зробить трюк. Більше того, синтаксис мови, який ви будете використовувати, дуже схожий, тому у вас не буде багато проблем. Установка не є складною, але кварт великий, тому отримайте чашку кави.
absinthe_minded

1
Дивіться також пов’язане питання cs.stackexchange.com/q/30790
András Salamon

Відповіді:


20

Розділ 2 Посібника про САТ (Стівен Прествіч) розповідає про те, як певну глибину перетворити дискретні проблеми вирішення в CNF. (На жаль, я не думаю , що є проект версія онлайн - ймовірно , найкраще звернутися до місцевої бібліотеки.) Деякі з інших цитованих посилань в химерних оглядових Magnus Бьорк Успішних методів СБ кодування також корисні.

Якщо ваші проблеми безперервні, або вас особливо цікавлять системи нерівностей, швидше за все корисні будуть інші види вирішувачів. Як вказує Кайл, розв'язувачі SMT (наприклад, Z3 , Yices або OpenSMT ) можуть бути корисними, хоча традиційно теорії SMT, як правило, орієнтовані на перевірку програмного забезпечення комп'ютера, тому розв'язувачі SMT зазвичай мають велику підтримку для таких речей, як вирази, що включають інтервали цілих чисел. , але може погано виконувати обмеження щодо ін’єктивності. Для проблем, які, природно, виражаються як системи нерівностей, CPLEX - це та, яку потрібно перемогти (вона раніше була доступна для академічного використання безкоштовно, і все ще може бути). Для деяких комбінаторних проблем вирішення (наприклад, знаходженняупаковки прямокутників у квадрат ), вирішувачі обмежень, такі як Minion, перевершують SAT-розв'язувачі, які часто простіші у використанні.


13

Якщо ви не перекладете математичні проблеми на екземпляри SAT як навчальну вправу, ваш час буде набагато плідніше витрачений на вивчення теорій задоволення модулів . SMT дозволить висловити рівняння та інші обмеження набагато природніше, ніж як булеві екземпляри SAT. Деякі вирішувачі SMT підтримують екзистенційні та універсальні кількісні показники, що дозволяють вийти за межі NP та виразити проблеми PSPACE.

Крім того, що вони більш експресивні, розв'язувачі SMT є швидшими. Не P = NP швидше, але ефективніше в тому, що хороший SMT-вирішувач не відкидає структурну інформацію, що відповідає теорії, що допомагає провести вирішувач через простір пошуку. Здійснення скорочення Карпа безпосередньо на екземплярі SAT змушує вирішувач SAT вивчити всю цю структуру, часто за експоненціальну ціну. Наприклад, той факт, що додавання є комутативним, втрачається як на базі DPLL, так і на локальному пошуку, що базується на SAT; вирішувач не знає, що він має справу з цифрами взагалі! Щоб уникнути спроб усіх перестановок x + y + z = 10, для розв'язувача SAT потрібен код розбиття симетрії, який вимагає виявлення автоматизованого графіку графіків. Найкращі алгоритми розпізнавання автоматичних графіків поточного графіка вимагають експоненціальної кількості вершин у гіршому випадку,


2
Ви пропонуєте якісь конкретні SMT-рішення?
Дхріс

5

Два інструменти, які перетворюють мови високого рівня в SMT або CNF.

CVC Синтаксис близький до CAS.

CBMC Це перетворить програму C на CNF, дозволяючи твердити. Твердження або завжди є істинними, або якщо виявлено помилковим вхід контрприкладу. CBMC розгортає петлі, тому деякі програми С мають експоненціально велику CNF / SMT.


Схоже, що CBMC не перетворює довільну програму C в CNF; він створює CNF на основі програми C, яка виконує статичний аналіз на цілі переповнення, переповнення буфера тощо.
vy32
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.