Solucionador multinúcleo SAT


12

Estoy tratando de resolver un problema SAT de 25k cláusulas 5k variables. Como ha estado funcionando durante una hora (precosat) y me gustaría resolver los más grandes después, estoy buscando un SAT-Solver multinúcleo.

Como parece haber muchos solucionadores SAT, estoy bastante perdido.

¿Alguien podría señalarme el mejor para mi caso?

También sería feliz si alguien me pudiera dar el tiempo aproximado (si es posible).


1
¿Estás buscando programas listos? Entonces este no es el mejor sitio para preguntar. ¿Quieres aprender sobre la resolución de SAT? ¡Bienvenido! Dices que has buscado; ¿que encontraste? ¿Qué te confunde?
Raphael

Bueno, miré la cantidad de hilos relacionados con SAT en varios foros de StackExchange. Terminé teniendo también que elegir entre CS teórico y CS (y elegir el posterior). ¿Dónde debería haber pedido un programa de nombre listo? Gracias.
multsatsolv

Respuestas:


8

Echa un vistazo a los resultados de la competencia SAT 2013 de este año . En base a estos resultados, definitivamente pruebe Lingeling . Plingeling es la variante paralela de la misma.

Si no necesita demostrar su insatisfacción (tal vez sepa que la instancia es satisfactoria y solo necesita conocer una tarea que la haga SAT), también puede probar los métodos de búsqueda locales.


Gracias. Echaré un vistazo a (P) Lingeling. Además, no tengo idea si es satisfactoria (aunque es mejor que sea, de lo contrario estoy atascado).
multsatsolv

+1. Según nuestra experiencia, el plingeling es lo que debe probar primero (al menos si tiene una sola computadora con múltiples núcleos y mucha memoria). Para obtener aún más rendimiento, intente encontrar un clúster informático con tantos nodos como sea posible y ejecute varias instancias de lingeling (o plingeling) con diferentes semillas aleatorias.
Jukka Suomela

4

No estoy seguro de la existencia de prácticos solucionadores de satélite multinúcleo, pero hay algunos proyectos y documentos:

También encontré este punto interesante: puede ejecutar un solucionador de satélites regular varias veces con diferentes semillas en el mismo problema en paralelo, para obtener un efecto multinúcleo.

Editar: Incorporando mis comentarios sobre la idea de vzn aquí:

Un método alternativo similar es simplemente elegir una sola variable, establecer su valor en verdadero y enviarlo a una instancia de solucionador. Establezca su valor en falso y envíelo a otra instancia de solucionador. Puede hacer esto para variables, y ejecutar procesos simultáneamente. Elegir las variables para establecer podría ser un poco complicado, es decir. si dependen directamente el uno del otro, entonces no tiene sentido elegir uno y luego otro. Puede ser necesario un paso de simplificación para tomar decisiones sucesivas / recursivas.2 kk2k


(También estaría contento si alguien me pudiera dar el tiempo aproximado (si es posible) para resolver un problema SAT de las variables X de las cláusulas Y).

Nadie puede darle un tiempo aproximado basado en variables, cláusulas, porque algunos problemas SAT son extremadamente difíciles de resolver (léase: no sucederán), incluso con un relativamente pequeño ; mientras que otras instancias enormes se pueden resolver relativamente rápido (y es para estas instancias que los solucionadores de satélites son útiles).n m , nmnm,n


Gracias por los enlaces. Leeré algunos de ellos. Sin embargo, espero que mi problema no sea demasiado difícil de resolver.
multsatsolv

@multsatsolv depende del problema. También depende de la codificación. Los solucionadores SAT pueden manejar diferentes codificaciones del mismo problema de manera diferente. Y diferentes solucionadores SAT podrían ser mejores en una codificación que en otra; no hay ciencia para esto (bueno, lo hay, pero vale la pena intentar comprenderlo, en la rápida evolución de los solucionadores de SAT): lo único que hay que hacer es probar diferentes combinaciones de codificaciones y solucionadores.
Realz Slaw

3

En realidad, hay una manera muy simple de convertir cualquier solucionador SAT en una versión paralela porque SAT es vergonzosamente paralelo en el siguiente sentido.

Elija un poder de dos para dividirlo por . Luego elija variables y asigne todos los valores booleanos posibles. Habrá fórmulas SAT resultantes después de las asignaciones. Resuelve cada uno por separado (en paralelo). Existe una solución general si existe una de las soluciones separadas y la solución completa es exactamente la unión de todas las soluciones separadas. n 2 n2nn2n


nk

3
Este enfoque no parece funcionar demasiado bien en la práctica. Para casos positivos, el siguiente enfoque suele ser mucho mejor si tiene muchas computadoras: simplemente ejecute, por ejemplo, lingeling con la misma instancia pero diferentes semillas aleatorias y espere hasta que uno de los solucionadores encuentre una solución.
Jukka Suomela

n

1
@vzn: El enfoque que sugirió. Para ver por qué no funciona demasiado bien, pruébelo con instancias del mundo real y compárelo con lo que sugerí. :) Su enfoque tendría mucho sentido si se tratara de un algoritmo de búsqueda de retroceso ingenuo, pero los solucionadores de SAT modernos son mucho más que una búsqueda de retroceso ingenua.
Jukka Suomela

bien, pero ¿puedes explicar con palabras cuál es el problema ? su enfoque puede funcionar para instancias satisfactorias, pero ¿no tomaría exactamente el mismo tiempo en paralelo descubrir una instancia insatisfactoria sin importar cuántas instancias separadas se ejecuten? si no, tal vez haya una referencia para citar en el subj ...
vzn
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.