Hier ist eine Möglichkeit, eine eindeutige SAT-Instanz zu generieren, vorausgesetzt, eine SAT-Instanz , von der Sie wissen, dass sie erfüllt werden kann . Betrachten Sie die Formel vonφ ψ ( x )kφψ ( x )
φ ( x ) ∧ h ( x ) = y,
Dabei ist eine Hash-Funktion, die eine Zuordnung zu einem Bit-Wert (für einen kleinen Wert von ) abbildet , und ist ein zufälliger Bit-Wert. Wenn ungefähr befriedigende Zuweisungen hat, nehmen wir (heuristisch) an, dass genau eine befriedigende Zuweisung hat (mit konstanter Wahrscheinlichkeit). Wir können testen, ob dies der Fall ist, indem wir einen SAT-Löser verwenden (nämlich testen, ob erfüllbar ist; wenn dies der Fall ist und eine erfüllende Zuweisung ist, testen Sie, ob erfüllbar ist). Wennx k k y k φ 2 k ψ ψ x 0 ψ ( x ) ∧ x ≠ x 0 k k k = 1 , 2 , ... , n n xhxkkykφ2kψψx0ψ ( x ) ∧ x ≠ x0kIst dies nicht bekannt, können Sie mit der binären Suche oder durch Iteration über jeden Kandidatenwert (wobei die Anzahl der booleschen Variablen in ) finden.kk = 1 , 2 , ... , nnx
Sie können die Hash-Funktion frei wählen. Sie werden es wahrscheinlich so einfach wie möglich machen wollen. Eine sehr einfache Konstruktion ist zu haben eine zufällige Teilmenge von auszusuchen Bits von . Eine etwas komplexere Konstruktion besteht darin, dass das te Bit von das oder von zwei zufällig ausgewählten Bits von (wobei für jedes unabhängig ein separates Paar von Bitpositionen gewählt wird ). Wenn Sie einfach halten, bleibt relativ einfach.k x i h ( x ) x i h ψhkxichh ( x )xichhψ
Diese Art der Transformation wird manchmal als Teil eines Schemas zum Schätzen der Anzahl zufriedenstellender Zuordnungen zu einer Formel verwendet / vorgeschlagen ; Ich habe es für Ihre besonderen Bedürfnisse angepasst.φ
Sie können im Internet viele Testbeds von SAT-Instanzen finden und diese Transformation auf alle anwenden, um eine Sammlung eindeutiger SAT-Instanzen zu erhalten.k
Eine andere Möglichkeit wäre, eindeutige SAT-Instanzen aus der Kryptographie zu generieren . Angenommen, ist eine kryptografische Einwegpermutation. Sei ein zufällig ausgewähltes Element von und sei . Dann ist die durch gegebene Formel eine eindeutige SAT-Instanz. Wählen Sie als weiteres Beispiel zwei große Primzahlen zufällig aus und lassen Sie . Dann ist die Formel gegeben durchf : { 0 , 1 } n → { 0 , 1 } n x { 0 , 1 } n y = f ( x ) φ ( x ) f ( x ) = y k p , q n = p q φ ( x , y ) x ≤ y = n ≤ x >kf:{0,1}n→{0,1}nx{0,1}ny=f(x)φ(x)f(x)=ykp,qn=pqφ(x,y)kx⋅y=n∧x>1∧y>1∧x≤y(mit der offensichtlichen Entsprechung zwischen Bitfolgen und ganzen Zahlen) ist eine eindeutige SAT-Instanz. Diese Konstruktionen scheinen jedoch kein nützlicher Weg zu sein, um Ihren Solver zu bewerten oder zu optimieren. Sie alle haben eine spezielle Struktur, und es gibt keinen Grund zu der Annahme, dass diese Struktur für Probleme der realen Welt repräsentativ ist. Insbesondere SAT-Instanzen, die aus kryptografischen Problemen stammen, sind bekanntermaßen extrem schwer, viel schwerer als SAT-Instanzen, die aus vielen anderen realen Anwendungen von SAT-Lösern stammen. Sie sind daher keine sehr gute Grundlage für das Benchmarking Ihres Lösers.k
Im Allgemeinen weisen alle in dieser Antwort erwähnten Techniken den Nachteil auf, dass sie eindeutige SAT-Instanzen mit einer bestimmten Struktur generieren , sodass sie möglicherweise nicht das sind, wonach Sie suchen - oder zumindest nicht vertrauen möchten nur auf Formeln, die auf diese Weise erzeugt werden. Ein besserer Ansatz wäre es, Anwendungen von Unique SAT zu identifizieren (von wem und zu welchem Zweck wird Ihr Solver verwendet?) Und dann zu versuchen, einige realistische Beispiele aus diesen Anwendungsdomänen zu erhalten.kkk
Zu einem verwandten Thema siehe auch Generieren interessanter kombinatorischer Optimierungsprobleme