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.
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.
Respostas:
Você pode fazer isso com o SAT4J , simplesmente repetindo todos os modelos: http://www.sat4j.org/howto.php#models . Eu imagino que a maioria dos solucionadores de SAT tem essa capacidade.
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 + n
Tópico relacionado: Melhor SAT Solver .
O melhor que encontrei é o "compilador c2d". http://reasoning.cs.ucla.edu/c2d/
Ele usa d-DNNF e você precisa da opção -count .
O MBound Solver fornecido aqui http://www.cs.cornell.edu/~sabhar/ pode fornecer contagens de modelos com garantias probabilísticas. É muito mais rápido do que enumerar todas as soluções.
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.
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 .
Aqui está um chamado tensorCSP e baseado em uma ferramenta chamada redes tensoras. É explicado neste artigo .
A glicose é um solucionador SAT muito eficiente desenvolvido na universidade de Bordeaux.