Ich untersuche verschiedene SAT-Löser und versuche zu verstehen, wie sie funktionieren und warum sie auf bestimmte Weise entworfen wurden. (Aber ich bin im Moment nicht an einer Universität und kenne niemanden, der Professor ist. Also poste ich hier in der Hoffnung, dass mir jemand helfen kann. Ich würde es wirklich schätzen.)
In Chaff wird BCP (Boolean Constraint Propagation) anders als die ursprüngliche DPLL implementiert : Es werden zwei Literale gleichzeitig betrachtet (eine Technik, die sich geringfügig von der ursprünglich in SATO: An Efficient Propositional Prover vorgeschlagenen unterscheidet ). Spreu: Entwicklung eines effizienten SAT-Lösers . In diesem Artikel wird jedoch keine reine wörtliche Eliminierung erwähnt.
In Die Komplexität der reinen wörtlichen Eliminierung schrieb Jan Johannsen
Die derzeit besten Implementierungen von DLL-SAT-Solvern wie Chaff oder BerkMin opfern diese Heuristik, um die Effizienz der Einheitenausbreitung zu steigern.
wobei "diese Heuristik" sich auf die reine wörtliche Eliminierung bezieht. Mein Verständnis dessen, was reine wörtliche Eliminierung bewirkt, ist, dass es
- sucht nach allen einpolaren (oder reinen) Literalen
- weist ihnen einen booleschen Wert zu, so dass jeder ergibt
True
- In diesem Fall können wir jetzt alle Klauseln löschen, die sie enthalten
Hier ist meine Frage:
Wie ist das Opfer notwendig? Gibt es einen guten Grund, warum es in DPLL-basierten Algorithmen wie Chaff keine reine wörtliche Eliminierung gibt? Können wir nicht einfach in jeder Entscheidungsebene eine reine wörtliche Eliminierung durchführen (oder zumindest zu Beginn vor der Verzweigung)?