Чи міг би хтось вказати на один або кілька веб-сайтів, де можна завантажити робочу реалізацію вирішувача #SAT? Мене цікавлять ті, хто повертає точний підрахунок рішення, а не наближення.
Чи міг би хтось вказати на один або кілька веб-сайтів, де можна завантажити робочу реалізацію вирішувача #SAT? Мене цікавлять ті, хто повертає точний підрахунок рішення, а не наближення.
Відповіді:
Це можна зробити за допомогою SAT4J , просто перебравши всі моделі: http://www.sat4j.org/howto.php#models . Я думаю, що більшість вирішувачів SAT мають цю здатність.
Один із варіантів - використовувати бібліотеку BDD, наприклад, JavaBDD . Усі такі бібліотеки або мають функцію, яка швидко підраховує рішення, або, принаймні, вони полегшують запис такої функції. Недоліком, однак, є те, що побудова BDD у багатьох випадках буде повільною і може зажадати багато пам'яті.
Пов'язана тема: Кращий SAT Solver .
Найкраще, що я знайшов - "компілятор c2d". http://reasoning.cs.ucla.edu/c2d/
Він використовує d-DNNF, і вам потрібна опція -count .
MBound Solver, наведений тут http://www.cs.cornell.edu/~sabhar/, може давати підрахунки моделі з імовірнісними гарантіями. Це набагато швидше, ніж перераховувати всі рішення.
Я написав невелику модель / основний імплікатор . Це вже можна використовувати для підрахунку моделі з перерахуванням моделі, але це не дуже практично. Якщо когось цікавить, я можу продовжити це, щоб він рахував моделі від головних прихильників.
Веб-сайт BeyondNP містить хороший опис існуючих інструментів для вирішення #SAT (та інших пов'язаних з цим важких проблем у формулах CNF). Ви також можете знайти список інструментів для приблизного підрахунку моделі та складання знань (завдання перетворення CNF у сподіванусь стильну структуру даних, яка часто підтримує поліноміальний підрахунок моделі часу).
Ви також можете знайти список інструментів для попередньої обробки формул CNF, які можуть бути корисними для покращення продуктивності лічильників моделей та різних еталонів .
Ось один під назвою tensorCSP і заснований на інструменті під назвою тензорні мережі. Це пояснено в цій роботі .
Глюкоза - це дуже ефективний розчинник SAT, розроблений в університеті Бордо.