Alle mir bekannten # SAT-Löser, z. B. RelSat, C2D, geben nur die Anzahl der erfüllbaren Instanzen zurück. Aber ich möchte jede dieser Instanzen kennen?
Gibt es einen solchen # SAT-Solver oder wie sollte ich einen verfügbaren # SAT-Solver ändern, um dies zu tun?
Vielen Dank.
Antworten:
Sie suchen einen SAT-Löser für ALL-SAT oder alle Lösungen. Dies ist ein anderes Problem als #SAT. Sie müssen nicht alle Lösungen aufzählen, um sie zu zählen.
Ich kenne kein Tool, das Ihr Problem löst, da die Leute diese Algorithmen zusätzlich zu vorhandenen SAT-Solvern hinzufügen, diese Erweiterungen jedoch selten zu veröffentlichen scheinen. Im Folgenden finden Sie zwei Artikel, die Ihnen beim Ändern eines CDCL-Lösers zur Implementierung von ALL-SAT helfen sollen.
Speichereffizienter SAT-Löser für alle Lösungen und seine Anwendung auf die Erreichbarkeit , O. Grumberg, A. Schuster, A. Yadgar, FMCAD 2004
Hier ist ein kürzlich veröffentlichter Artikel über arXiv.
Erweiterung moderner SAT-Löser zur Aufzählung aller Modelle , Said Jabbour, Lakhdar Sais, Yakoub Salhi, 2013
Sie können versuchen, diese Autoren für ihre Implementierung zu kontaktieren.
quelle
Ich habe auf einer VLSI-Konferenz ein neueres (2014) Papier über All-SAT gefunden, das sich also definitiv an der praktischen Seite orientiert (was hier im Einklang mit der Frage des OP zu stehen scheint, wenn auch weniger mit cstheory.SE im Allgemeinen):
Für diejenigen ohne IEEE-Abonnement gibt es eine kostenlose Kopie auf der Princeton-Webseite von Subramanyan . (Er verwendet einen Filesharing-Dienst, um Kopien seiner Papiere zu speichern / zu verteilen, und ich bin mir nicht sicher, wie stabil diese URLs sind, daher dieser Kreisverkehr-Link.)
Der Kern dieses Papiers scheint zu sein:
Ihre Implementierung baut auf MiniSat auf. Der Quellcode für ihre Erweiterung scheint jedoch nicht öffentlich verfügbar zu sein. Leider scheint dies eine Gewohnheit auf dem Gebiet von All-SAT zu sein, so dass Papiere in diesem Bereich, die experimentelle Ergebnisse enthalten, nur einen mehr oder weniger einfach zu schlagenden Strohmann-Algorithmus aufstellen und selten direkt verglichen werden können (experimentell) Ergebnisse) mit jedem anderen veröffentlichten Algorithmus für All-SAT. Das Papier von Jabbour et al. von Vijay D erwähnt ist auch von dieser Art.
Da ich es in der anderen Antwort nicht erwähnt sehe (aber nur im Kommentar von András Salamon), wurde die [ziemlich beliebte] Sperrklausel-Technik eingeführt in:
quelle