Solucionador SAT Multicore

12

Estou tentando resolver um problema de SAT de 5k de cláusulas de 25k. Como está em funcionamento há uma hora (precosat) e gostaria de resolver os maiores depois, estou procurando um SAT-Solver com vários núcleos.

Como parece haver muitos SAT-Solvers, estou bastante perdido.

Alguém poderia me indicar o melhor para o meu caso?

Eu também ficaria feliz se alguém pudesse me dar o tempo aproximado (se possível).

multsatsolv
fonte
1
Você está procurando programas prontos? Então este não é o melhor site para perguntar. Você quer aprender sobre resolução de SAT? Bem-vinda! Você diz que pesquisou; o que você achou? O que te confunde?
Raphael
Bem, observei o número de threads relacionados ao SAT em vários fóruns do StackExchange. Acabei tendo também que escolher entre CS teórico e CS (e escolher o mais tarde). Onde eu deveria ter pedido um programa de nomes prontos? Obrigado.
multsatsolv

Respostas:

8

Veja os resultados da competição SAT 2013 deste ano . Com base nesses resultados, definitivamente experimente o Lingeling . Plingeling é a variante paralela.

Se você não precisa provar a insatisfação (talvez saiba que a instância é satisfatória e precisa conhecer uma tarefa que a torne SAT), você também pode tentar métodos de pesquisa local.

Juho
fonte
Obrigado. Vou dar uma olhada no (P) Lingeling. Além disso, não tenho idéia se é satisfatório (embora seja melhor, caso contrário, estou preso).
multsatsolv
+1. Com base em nossa experiência, certamente é o que você deve tentar primeiro (pelo menos se você tiver um único computador com vários núcleos e muita memória). Para obter ainda mais desempenho, tente encontrar um cluster de computação com o maior número possível de nós e execute várias instâncias de lingeling (ou plingeling) com diferentes sementes aleatórias.
Jukka Suomela
4

Não tenho certeza da existência de solucionadores de satélites multicore práticos, mas existem alguns projetos e documentos:

Também achei esse ponto interessante: você pode executar um solucionador de satélites regular várias vezes com sementes diferentes no mesmo problema em paralelo, para obter um efeito de vários núcleos.

Edit: Incorporando meus comentários sobre a idéia de vzn aqui:

k2k


(Eu também ficaria feliz se alguém pudesse me dar o tempo aproximado (se possível) para resolver um problema SAT das variáveis ​​Y das cláusulas X.)

mnm,n

Realz Slaw
fonte
Obrigado pelos links. Vou ler alguns deles. Espero que meu problema não seja muito difícil de resolver.
precisa
@multsatsolv depende do problema. Também depende da codificação. Os solucionadores SAT podem lidar com diferentes codificações do mesmo problema de maneira diferente. E diferentes solucionadores de SAT podem ser melhores em uma codificação que em outra; não existe ciência para isso (bem, existe, mas vale a pena tentar entender, na rápida evolução dos solucionadores SAT): a única coisa a fazer é tentar diferentes combinações de codificações e solucionadores.
Realz Slaw
3

Na verdade, existe uma maneira muito simples de transformar qualquer solucionador SAT em uma versão paralela porque o SAT é embaraçosamente paralelo no sentido a seguir.

2nn2n

vzn
fonte
nk
3
Essa abordagem não parece funcionar muito bem na prática. Para instâncias positivas, a abordagem a seguir normalmente é muito melhor se você tiver muitos computadores: simplesmente execute, por exemplo, trabalhando com a mesma instância, mas com sementes aleatórias diferentes e aguarde até que um dos solucionadores encontre uma solução.
Jukka Suomela
n
1
@ vzn: A abordagem que você sugeriu. Para ver por que não funciona muito bem, experimente com instâncias do mundo real e compare com o que sugeri. :) Sua abordagem faria muito sentido se você estivesse lidando com um algoritmo de pesquisa de retrocesso ingênuo, mas os solucionadores SAT modernos são muito mais do que a pesquisa de retrocesso ingênuo.
Jukka Suomela
bem, mas você pode explicar em palavras qual é o problema ? sua abordagem pode funcionar para instâncias satisfatórias, mas não levaria exatamente o mesmo tempo em paralelo para descobrir uma instância insatisfatória, não importa quantas instâncias separadas sejam executadas? se não, talvez haja uma ref citar na subj ...
vzn