Download do #SAT Solver


21

Alguém poderia apontar para um ou mais sites onde é possível fazer o download de uma implementação de trabalho de um solucionador #SAT? Estou interessado em retornar a contagem exata da solução, não em uma aproximação.


2
Olá Walter, sua pergunta está próxima à fronteira do que seria oficialmente "tópico" para este site. No entanto, se você não tiver nenhum outro lugar para fazer essa pergunta e pudermos respondê-la, talvez não seja tão ruim ... (Como o site ainda está em desenvolvimento, acho que estamos sendo mais abertos do que outros sites). que o objetivo deste comentário não é "repreender" ou "avisar", é apenas um aviso amigável.
Ryan Williams

Olá Ryan, obrigado pelo seu aviso. Sinto muito se esta pergunta está perto da fronteira. Pesquisei na web e não encontrei nada: apenas alguns solucionadores SAT, mas não #SAT. Por isso perguntei aqui. É claro que sei que posso escrever meu próprio código que usa um solucionador SAT como um mecanismo para contar soluções, mas estava procurando por algo já feito e pronto para uso.
Giorgio Camerani

12
Eu gostaria de discordar. Eu acho que essas questões estão dentro do escopo, e deveriam estar!
Suresh Venkat

concordar com seu escopo. fyi / imho não é muito prático construir um solucionador #SAT a partir de um solucionador SAT, a menos que se tenha o código fonte e, mesmo nesse caso, não seja tão prático, exceto por fórmulas muito pequenas, por causa de uma explosão exponencial muito ruim. técnicas normalmente especiais únicos para #SAT e não SAT seria necessário ...
vzn

Respostas:



16

Você também pode tentar o resolvedor #SAT "sharpSAT" ( site , github ) para contar o número de atribuições satisfatórias de fórmulas CNF.


11

Uma opção é usar uma biblioteca BDD, como JavaBDD . Todas essas bibliotecas têm uma função que conta as soluções rapidamente ou, pelo menos, facilitam a gravação dessa função. A desvantagem, no entanto, é que a construção do BDD será lenta em muitos casos e poderá exigir muita memória.

Caso sua entrada seja na CNF, uma heurística simples que acelera a construção do BDD é a seguinte. Primeiro, crie um pequeno BDD para cada cláusula e coloque-os em uma fila prioritária cuja raiz seja o menor BDD. Segundo, coloque dois BDDs, calcule AND entre eles e empurre o resultado para a fila de prioridade. Aqui está a idéia: como a computação AND entre BDDs de tamanho e leva na teoria, mas na prática, minimizar o tempo de execução é o mesmo que encontrar um código de Huffman.n O ( m n ) m + nmnO(mn)m+n


7

Tópico relacionado: Melhor SAT Solver .


11
Obrigado Sadeq. O tópico que você indicou parece ser teórico. Ele lista vários trabalhos sobre a redução do limite superior. É muito interessante, mas eu estava procurando uma implementação de trabalho pronta para uso.
Giorgio Camerani

2
Você é muito bem-vindo. Entre os links citados, havia um que era puramente prático: satcompetition.org . Eu acho que você pode encontrar implementações muito boas lá.
MS Dousti



5

Escrevi um modelo pequeno / enumerador implicante principal . Isso já pode ser usado para a contagem de modelos com a enumeração de modelos, mas isso não é muito prático. Se alguém estiver interessado, eu posso estendê-lo para que ele conte modelos dos principais implicantes.


2

O site BeyondNP contém um bom inventário das ferramentas existentes para resolver o #SAT (e outros problemas complexos relacionados às fórmulas CNF). Você também pode encontrar uma lista de ferramentas para contagem aproximada de modelos e compilação de conhecimento (a tarefa de transformar o CNF em uma estrutura de dados esperançosamente sucinta que geralmente oferece suporte à contagem polinomial de modelos de tempo).

Você também pode encontrar uma lista de ferramentas para o pré-processamento de fórmulas CNF que podem ser úteis para melhorar o desempenho dos contadores de modelos e vários benchmarks .



Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.