Convertendo problemas (matemáticos) em instâncias SAT

22

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.

Dchris
fonte
1
SAT não têm métodos eficientes ... mas dê uma olhada nessas lâminas
Fayez Abdlrazaq deab
por favor, dê uma olhada aqui: cs.stackexchange.com/questions/12135/convert-problem-to-cnf
Dchris
Apenas uma solução rápida e suja antes de tentar qualquer outra coisa, caso você queira apenas testar algo: cryptlogver . A ferramenta diz que está focada em criptografia, mas fará o truque. Além disso, a sintaxe do idioma que você usará é muito parecida com a de que você não terá muitos problemas. A instalação não é difícil, mas o quartus é grande, portanto, tome uma xícara de café.
absinthe_minded
1
Consulte também a pergunta relacionada cs.stackexchange.com/q/30790
András Salamon

Respostas:

20

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.

András Salamon
fonte
13

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,

Kyle Jones
fonte
2
você sugere algum solucionador smt específico?
Dchris 18/05
5

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.

elluser
fonte
Parece que o CBMC não converte um programa C arbitrário em um CNF; ele cria um CNF baseado no programa C que executa uma análise estática para estouros de número inteiro, estouros de buffer e similares.
vy32