O que eu quero fazer é transformar um problema de matemática que possuo em um problema de satisfação booleana (SAT) e resolvê-lo usando um SAT Solver. Gostaria de saber se alguém conhece um manual, guia ou qualquer coisa que me ajude a converter meu problema em uma instância SAT.
Além disso, quero resolver isso em um tempo melhor que exponencial. Espero que um SAT Solver me ajude.
algorithms
reductions
satisfiability
Dchris
fonte
fonte
Respostas:
O Capítulo 2 do Manual do SAT (de Steven Prestwich) aborda como transformar problemas discretos de decisão em CNF, em alguma profundidade. (Infelizmente, eu não acho que há um projecto de versão on-line - provavelmente melhor consultar sua biblioteca local.) Várias das outras referências citadas em peculiares Visão geral de Magnus Björk de sucesso Técnicas SAT codificação também são úteis.
Se seus problemas são contínuos ou você está especialmente interessado em sistemas de desigualdades, é mais provável que outros tipos de solucionadores sejam úteis. Como Kyle salienta, os solucionadores SMT (como Z3 , Yices ou OpenSMT ) podem ser úteis, embora tradicionalmente as teorias SMT tendam a se concentrar na verificação de software, os solucionadores SMT geralmente têm um grande suporte para coisas como expressões que envolvem intervalos de números inteiros , mas pode ter um desempenho ruim nas restrições de injetividade. Para problemas que são naturalmente expressos como sistemas de desigualdades, o CPLEX é o único a superar (costumava estar disponível para uso acadêmico de graça, e ainda pode estar). Para alguns problemas de decisão combinatória (como encontrarpacotes de retângulos em um quadrado ), solucionadores de restrições como o Minion superam os solucionadores SAT e geralmente são mais fáceis de usar.
fonte
A menos que você esteja traduzindo problemas matemáticos para instâncias do SAT como um exercício de aprendizado, seu tempo será muito mais proveitoso aprendendo sobre teorias de módulos de satisfação . O SMT permitirá que você expresse equações e outras restrições muito mais naturalmente do que nas instâncias Sool booleanas. Alguns solucionadores SMT suportam quantificadores existenciais e universais, permitindo que você vá além do NP e expresse problemas do PSPACE.
Além de serem mais expressivos, os solucionadores SMT são mais rápidos. Não P = NP mais rápido, mas mais eficiente, pois um bom solucionador SMT não descarta informações estruturais específicas da teoria que ajudam a guiar o solucionador pelo espaço de pesquisa. Fazer uma redução de Karp diretamente em uma instância SAT força o solucionador SAT a reaprender toda essa estrutura, geralmente a um custo exponencial. Por exemplo, o fato de a adição ser comutativa é perdido nos solucionadores SAT baseados em DPLL e em pesquisa local; o solucionador não está ciente de que está lidando com números! Para evitar tentar todas as permutações de x + y + z = 10, um solucionador SAT precisa de código de quebra de simetria, o que requer detecção de automorfismo gráfico. Os melhores algoritmos atuais de reconhecimento de automorfismo gráfico exigem tempo exponencial ao número de vértices, na pior das hipóteses,
fonte
Duas ferramentas que convertem idiomas de alto nível para SMT ou CNF.
CVC A sintaxe é próxima ao CAS.
CBMC Converte um programa C em CNF, permitindo afirmações. As asserções são sempre verdadeiras ou, se falsa, uma entrada de contra-exemplo for encontrada. O CBMC desenrola loops, portanto, certos programas C têm CNF / SMT exponencialmente grande.
fonte