Multicore-SAT-Löser

12

Ich versuche, ein SAT-Problem mit 25k Klauseln und 5k Variablen zu lösen. Da es seit einer Stunde läuft (Precosat) und ich später größere Probleme lösen möchte, suche ich einen Mehrkern-SAT-Solver.

Da es anscheinend viele SAT-Solver gibt, bin ich ziemlich verloren.

Könnte mir jemand das beste für meinen Fall nennen?

Ich würde mich auch freuen, wenn mir jemand die ungefähre Zeit geben könnte (falls möglich).

multsatsolv
quelle
1
Sie suchen fertige Programme? Dann ist dies nicht die beste Seite, um danach zu fragen. Sie möchten mehr über SAT-Lösungen erfahren? Herzlich willkommen! Sie sagen, Sie haben gesucht; was hast du gefunden? Was verwirrt dich?
Raphael
Nun, ich habe mir die Anzahl der SAT-bezogenen Threads in mehreren StackExchange-Foren angesehen. Am Ende hatte ich auch die Wahl zwischen theoretischem CS und CS (und wähle das spätere). Wo hätte ich nach einem Ready-Name-Programm fragen sollen? Vielen Dank.
multsatsolv

Antworten:

8

Schauen Sie sich die Ergebnisse des diesjährigen SAT-Wettbewerbs 2013 an . Versuchen Sie es auf jeden Fall mit Lingeling . Plingeling ist die parallele Variante davon.

Wenn Sie keine Unzufriedenheit nachweisen müssen (vielleicht wissen Sie, dass die Instanz zufriedenstellend ist, und Sie müssen nur eine Zuweisung kennen, die sie zum SAT macht), können Sie auch lokale Suchmethoden ausprobieren.

Juho
quelle
Vielen Dank. Ich werde einen Blick auf (P) Lingeling werfen. Außerdem habe ich keine Ahnung, ob es befriedigend ist (obwohl es besser ist, sonst stecke ich fest).
Multsatsolv
+1. Aus unserer Erfahrung heraus sollten Sie zuerst das Plingeln ausprobieren (zumindest, wenn Sie einen einzelnen Computer mit mehreren Kernen und viel Speicher haben). Um noch mehr Leistung zu erzielen, sollten Sie versuchen, einen Computercluster mit so vielen Knoten wie möglich zu finden und mehrere Instanzen von Lingeling (oder Plingeling) mit verschiedenen zufälligen Seeds auszuführen.
Jukka Suomela
4

Ich bin mir nicht sicher, ob es praktische Multicore-Sat-Solver gibt, aber es gibt einige Projekte und Artikel:

Ich fand auch diesen interessanten Punkt: Sie können einen regulären Sat-Solver mehrmals mit verschiedenen Seeds auf demselben Problem parallel ausführen, um einen Multi-Core-Effekt zu erzielen.

Bearbeiten: Einfügen meiner Kommentare zu vzns Idee hier:

k2k


(Ich würde mich auch freuen, wenn mir jemand die ungefähre Zeit geben könnte (falls möglich), um ein SAT-Problem mit X-Klauseln und Y-Variablen zu lösen.)

mnm,n

Realz Slaw
quelle
Danke für die Links. Ich werde einige von ihnen lesen. Ich hoffe, mein Problem ist nicht zu schwer zu lösen.
multsatsolv
@multsatsolv es kommt auf das problem an. Das hängt auch von der Kodierung ab. SAT-Löser können unterschiedliche Kodierungen desselben Problems unterschiedlich behandeln. Und verschiedene SAT-Löser sind möglicherweise bei einer Codierung besser als bei einer anderen. Dazu gibt es keine Wissenschaft (na ja, aber es lohnt sich nicht zu versuchen, dies in der rasanten Entwicklung der SAT-Löser zu verstehen): Das einzige, was Sie tun können, ist, verschiedene Kombinationen von Kodierungen und Lösern auszuprobieren.
Realz Slaw
3

Es gibt tatsächlich eine sehr einfache Möglichkeit, einen SAT-Solver in eine parallele Version umzuwandeln, da SAT im folgenden Sinne peinlich parallel ist .

2nn2n

vzn
quelle
nk
3
Dieser Ansatz scheint in der Praxis nicht allzu gut zu funktionieren. Für positive Instanzen ist der folgende Ansatz in der Regel viel besser, wenn Sie viele Computer haben: Führen Sie einfach z. B. Lingeling mit derselben Instanz, aber verschiedenen zufälligen Seeds aus und warten Sie, bis einer der Löser eine Lösung findet.
Jukka Suomela
n
1
@vzn: Der von Ihnen vorgeschlagene Ansatz. Um zu sehen, warum es nicht so gut funktioniert, probieren Sie es mit realen Instanzen aus und vergleichen Sie es mit dem, was ich vorgeschlagen habe. :) Ihr Ansatz wäre sehr sinnvoll, wenn Sie sich mit einem naiven Backtracking-Suchalgorithmus befassen würden, aber moderne SAT-Löser sind viel mehr als eine naive Backtracking-Suche.
Jukka Suomela
Gut, aber können Sie in Worten erklären, worum es geht ? Ihr Ansatz funktioniert möglicherweise für zufriedene Instanzen, aber würde es nicht genauso lange dauern, eine unzufriedene Instanz zu finden, unabhängig davon, wie viele separate Instanzen ausgeführt werden? wenn nicht, gibt es vielleicht einen Hinweis auf das Thema ...
vzn 16.11.13