В мой последний вопрос Я спросил, как я могу разобрать пропозициональное выражение, а затем найти все модели формулы с помощью библиотеки SBV. Я использовал библиотеку hatt для анализа логического выражения.
К сожалению, SBV кажется, что он либо не подходит для достаточно быстрого решения SAT, либо функция «allSat» для поиска всех моделей не реализована для скорости. Ведь SBV нацелена на решение SMT.
Я тестировал производительность пакета haskell SBV с помощью пруверов Z3 и CVC4 по сравнению с picosat. Я использовал пропозициональную формулу с 36 переменными и 840 действительными моделями. Результат для picosat - 0,5 секунды, Z3 - 3 минуты, а CVC4 - 6 минут. Либо есть некоторые уловки производительности с SBV и функцией "allSat", чтобы обрезать его для пропозициональных формул. Или какой-нибудь другой прувер может быть быстрее Z3.
Но теперь я предполагаю, что мне, вероятно, нужно использовать более быстрый вариант для решения SAT, и я хочу использовать PicoSAT или MiniSAT, поскольку у меня были хорошие результаты в прошлом, а результаты соревнований SAT кажутся хорошими.
Вопросы:
Есть ли привязка к Picosat или MiniSAT, которая подходит для поиска всех моделей (т. Е. На уровне C / C ++ для быстрых результатов) пропозициональной формулы? Например, привязки python к picosat имеют функцию itersolve, которая только и делает это. Но я не смог найти эту функцию для привязок haskell picosat или miniSAT (возможно, я их не заметил).
Как мне перейти от строки, которая анализируется с помощью пакета hatt, к "списку int", который можно сшить для picosat / miniSat. Таким образом, чтобы перейти от выражения типа
Expr
в библиотеке hatt к представлению формулы CNF в стиле, подходящем, например, для picosat. Picosat использует общий формат SAT списка целых чисел. Обратите внимание, что мои формулы, полученные из String, изначально уже находятся в CNF. Либо я перехожу прямо из hatt Expr в список int. В противном случае я использую код из мой последний вопрос в формат, подходящий дляallSat
функции SBV, и переопределить вариантallSAT
функции SBV для использования привязок hasekll для picosat / miniSAT.
Ссылки:
[1,-2,3]
, вы должны добавить предложение[-1,2,-3]
. - person Thomas M. DuBuisson   schedule 26.04.2014solveAll
, предложенная @ ThomasM.DuBuisson, была добавлена в последние привязки Picosat на Hackage. hackage.haskell.org/package/picosat-0.1.0.2/ docs / Picosat.html - person Stephen Diehl   schedule 27.04.2014