2017-01-29 4 views
0

Verwandte: CNF simplification (in der Tat, ich glaube, die Einreicher dieser Frage nach gewesen sein könnte, was ich hier will)CNF Formel Vereinfachen während alle Lösungen Erhaltung wrt bestimmte Variablen

Eine Reihe von Tools zur Vereinfachung existieren (oder " Preprocessing "vor dem Lösen) DIMACS-Format CNF-Formeln, und die meisten SAT-Löser enthalten einige. Alles, was mir bekannt ist, vereinfacht jedoch eine trivial erfüllbare Formel in eine trivial erfüllbare CNF mit null oder einer Variablen, d.h. sie versuchen nur, die Erfüllbarkeit der Formel zu bewahren. Ich habe zumindest den Vorverarbeitungsmodus von SatELite und cryptominisat ausprobiert.

Um CNF eines großen Problems zu konstruieren, scheint mir jedoch, dass es sehr nützlich wäre, eine gut definierte Teilmenge des Problems zu einer Zeit zu vereinfachen, die dann eine große Anzahl von Mal wiederholt werden kann endgültiger CNF mit zusätzlichen Einschränkungen zwischen einigen Variablen in diesen Teilformeln.

Also, irgendwelche Werkzeuge existieren, oder können gewöhnliche SAT-Löser (oder andere Löser wie Z3, die ich benutze, um den CNF zu produzieren, den ich minimieren möchte) irgendwie mit etwas Klugheit verwendet werden, um eine CNF Formel zu vereinfachen während alle Lösungen für eine gegebene Menge von Variablen erhalten bleiben?

Antwort

1

Der Coprocessor SAT-Präprozessor kann tun, was Sie wollen. Es kann einen optionalen variablen Umfang erhalten und wird nur Äquivalenz-erhaltende Vereinfachungen in diesem Bereich anwenden. Außerhalb dieses Geltungsbereichs werden stärkere, erfügbarkeitserhaltende Vereinfachungen angewendet. Zumindest war das in Version 2 der Fall.

+0

Danke für den Zeiger. Es war sehr schwer, es zur Arbeit zu bringen. Es gibt einen Whitelist-Parameter, um Do-not-Touch-Variablen zu spezifizieren, und das Format dafür ist nicht dokumentiert (es braucht eine Datei, eine Variable pro Zeile oder einen Bereich pro Zeile wie in 1..10). Selbst dann ist es sehr empfindlich auf die Reihenfolge der Befehlszeilenparameter, stürzt auf interessante Weise im Hintergrund ab, wenn die Reihenfolge falsch ist, und schneidet die bereitgestellte Eingabe-.cnf-Datei im Prozess ab. Was für ein Stück Software: D –

1

Ein weiterer Ansatz ist die CNF in eine And-Inverter-Graph (AIG) und Anwendung von Methoden aus der Logiksynthese zur Umstrukturierung und Vereinfachung der AIG zu konvertieren.

Dies ist in der ABC Suite von Programmen, die an der Universität von Berkeley entwickelt. Eine Methode ist Strukturhashing: finden Sie gemeinsame (gleichwertige) Unterausdrücke innerhalb der AIG und binden Sie sie zusammen, um die Grafik zu beschneiden.

Die Universität Linz in Österreich stellt einen AIGER Werkzeugsatz zur Verfügung, der speziell den Und-Invertergraphen gewidmet ist.

Verwandte Themen