Wie verwende ich die kanonische Reihenfolge, um die Symmetrie bei der SAT-Codierung des Pigeonhole-Problems zu verringern?

8

In der Arbeit "Effiziente CNF-Codierung zur Auswahl von 1 aus N Objekten" stellen die Autoren ihre "Commander Variable" -Technik zur Codierung der Einschränkung vor und sprechen dann über das Pigeonhole-Problem.

Da mein Fehler möglicherweise im Verständnis auf niedrigerer Ebene besteht, möchte ich erklären, was ich zu wissen glaube, bevor ich die Frage stelle:

Sei und die Anzahl der Tauben und Löcher. Die naive Codierung verwendet eine Satzvariable , die wahr ist, wenn die Taube in das Loch gelegt werden soll. Die Klausel erzwingt, dass Taube 1 genau ein Loch besetzen muss; Für die anderen Tauben werden identische Klauseln hinzugefügt. Die Klausel erzwingt, dass nicht mehr als eine Taube Loch 1 besetzt; Für die verbleibenden Löcher werden identische Klauseln hinzugefügt.mnXi,jithjthExactlyOne(X1,1,X1,2,...,X1,n)AtMostOne(X1,1,X2,1,...,Xm,1)

Wenn es mehr Tauben als Löcher gibt (m> n), ist das Problem unlösbar (für Menschen offensichtlich), aber der SAT-Löser "sieht" diese Tatsache nicht. Wenn es keinen Weg findet, Tauben zu platzieren , sucht es einen Versuch mit Tauben . Es versteht nicht, dass die Reihenfolge der Tauben irrelevant ist. Das Papier nennt diese Symmetrie unter anderem.1,2,3,..,m2,1,3,...,m

Fälle, in denen ist, werden als anstrengender Test für die Fähigkeit eines SAT-Lösers verwendet, Unzufriedenheit festzustellen.m=n+1

Das Papier schlägt vor, die Symmetrie zu durchbrechen, indem die Ordnung der Tauben durchgesetzt wird. Die Taube muss in ein Loch vor dem Loch der Taube (dh die Taube in Loch muss eine kleinere Anzahl haben als die Taube in Loch ). Dann heißt es enttäuschenderweise: "Aus Platzgründen beschreiben wir die Codierung in kanonischer Reihenfolge nicht explizit im Detail, aber die Anzahl der generierten Klauseln liegt in der Größenordnung "ii+1jj+1O(nlog(n))

Meine Frage ist also: Was haben sie getan, um diese Ergebnisse zu erzielen?

Ich möchte die Variablen als Bitfolge behandeln, die numerisch die Auswahl der Taube angibt Loch 1 und so weiter. Folgen Sie diesem mit Komparatoren, um den Vorschlag des Papiers durchzusetzen. Meine naive Komparatorkonstruktion erfordert jedoch m Klauseln, eine für jedes Bit (von zunehmend hässlicher Größe). Hilfe! :) :){X1,1,X2,1,...,Xm,1}n1

Andrew Lamoureux
quelle

Antworten:

7

Sei die Anzahl der Tauben und die Anzahl der Löcher. Lassen Sie die Satzvariablen ... die binäre Darstellung von codieren, wenn die te Taube in das te Loch gelegt wird. (Beispiel: Wenn Taube 1 in Loch 10 platziert wurde, ist , was binär 1001 ist. Also = wahr, = falsch, = falsch und = wahr.)mnBi,0Bi,log(n)j1ijj1=9B1,3B1,2B1,1B1,0

Erzwingen Sie eine bestimmte Reihenfolge der Tauben in den Löchern, indem Sie verlangen, dass das von den Variablen codierte Loch kleiner als das von . Die Codierungen werden wie erwartet verglichen:BiBi+1

Bi,log(n) < ODER = UND < ODER = UND = UND < ODER ... Bi+1,log(n)

Bi,log(n)Bi+1,log(n)Bi,log(n)1Bi+1,log(n)1

Bi,log(n)Bi+1,log(n)Bi,log(n)1Bi+1,log(n)1Bi,log(n)2Bi+1,log(n)2

... nach dem Muster, dass die höchstwertigen Bits äquivalent sein dürfen, solange das nächste Bit rechts kleiner ist als das der nächsten Taube. Pro Komparator und -Komparatoren gibt es Konjunktionen , wodurch die erwarteten zusätzlichen Klauseln erhalten werden.O(log(n))O(m)O(mlog(n))

Die Variablenwerte müssen durch die -Werte impliziert werden. Jedes -Bit wird durch eine bestimmte Menge der gesetzten impliziert . Beispiel: Unter der Annahme von Sie:BXi,jBi,Xi,jn=16

ExactlyOne(X1,9,X1,10,X1,11,X1,12,X1,13,X1,14,X1,15,X1,16,B1,3¯)

erzwingt, dass wahr ist, wenn Taube 1 in eines der Löcher 9-16 gelegt wird. Andernfalls wird auf false gesetzt, um die Klausel zu erfüllen. Diese Klauseln setzen die verbleibenden Bits.B1,3B1,3Bi

ExactlyOne(X1,5,X1,6,X1,7,X1,8,X1,13,X1,14,X1,15,X1,16,B1,2¯) ExactlyOne(X1,3,X1,4,X1,7,X1,8,X1,11,X1,12,X1,15,X1,16,B1,1¯) ExactlyOne(X1,2,X1,4,X1,6,X1,8,X1,10,X1,12,X1,14,X1,16,B1,0¯)

Für jede Taube wird ein dieser Klauseln erstellt. Da es Tauben gibt, werden -Klauseln hinzugefügt.log(n)mmlog(n)

Kyle Jones
quelle
Vielen Dank für Ihre Antwort! Aber sind keine zusätzlichen Klauseln erforderlich, um die Binärcodierung selbst zu erzwingen? Anhand Ihres Beispiels, bei dem Taube 1 in Loch 10 platziert wird, sind meines Klauseln erforderlich, um zu zwingen . Dies wird zu -Klauseln in CNF erweitert. Und wir brauchen eins für jedes , was wieder zu Wachstum führt. l o g ( n ) , X i , j m * nX1,10B1,3B1,2¯B1,1¯B1,0log(n)Xi,jmn
Andrew Lamoureux
Ich werde die Antwort bearbeiten, um dies zu beheben.
Kyle Jones
Die Verwendung von zum "Komprimieren" der ausführlichen "Wenn die Taube hierher kommt, müssen die Bits diese sein" -Anweisungen sind einfach genial! Da diese Einschränkung Gegenstand ihres Papiers ist, besteht kein Zweifel daran, dass Ihre Lösung weggelassen wurde. Danke Kyle! ExactlyOne()
Andrew Lamoureux