Es sieht so aus, als würden Sie versuchen, eine Hypergraph-Transversale der Größe zu berechnen . Das heißt, { T 1 , … , T m } ist Ihr Hypergraph und S ist Ihr Transversal. Eine Standardübersetzung besteht darin, die Klauseln so auszudrücken, wie Sie sie haben, und dann die Längenbeschränkung in eine Kardinalitätsbedingung zu übersetzen.k{T1,…,Tm}S
So nutzen Sie Ihre bestehende Codierung, dh und dann Klauseln hinzufügen kodieren Σ 1 ≤ i ≤ n x i ≤ k .⋀1≤j≤m⋁i∈Tjxi∑1≤i≤nxi≤k
ist ein Kardinalität constraint. Es gibt verschiedene Übersetzungen von Kardinalitätsbeschränkungen in SAT.∑1≤i≤nxi≤k
Die einfachste, aber ziemlich große Kardinalitätsbeschränkungsübersetzung ist nur . Auf diese Weise repräsentiert jede Disjunktion die Bedingung ¬ ⋀ i ∈ X x i - für alle Teilmengen X von { 1 , … , n }⋀X⊆{1,…,n},|X|=k+1⋁i∈X¬xi¬⋀i∈XxiX{1,…,n}der Größe k + 1. Das heißt, wir stellen sicher, dass auf keinen Fall mehr als k Variablen festgelegt werden können. Beachten Sie, dass dies keine Polynomgröße in k
Einige Links zu Artikeln über platzsparendere Kardinalitätsbeschränkungsübersetzungen mit Polynomgröße in k :
- Übersetzung pseudo-boolescher Constraints in SAT - Niklas Eén und Niklas Sörensson, JSAT Bd. 2 (2006), S. 1-26 (eine gute Übersicht).
- Effiziente CNF-Codierung von booleschen Kardinalitätsbeschränkungen - Olivier Bailleux und Yacine Boufkhad, Verfahren und Praxis der Constraint-Programmierung 2003, LNCS Band 2833, S. 108-122 (eine nette, recht einfach zu implementierende Übersetzung).
- Auf dem Weg zu einer optimalen CNF-Codierung von booleschen Kardinalitätsbeschränkungen - Carsten Sinz - Vorgehensweise bei Prinzipien und Praktiken der Beschränkungsprogrammierung 2005, LNCS 3709, S. 827-831.
- Auf dem Weg zu robusten CNF-Kodierungen für Kardinalitätsbeschränkungen - Joao Marques-Silva und Inês Lynce, Verfahren und Praxis der Beschränkungsprogrammierung 2007, LNCS 4741, S. 483-497.
Wenn Sie tatsächlich an der Lösung solcher Probleme interessiert sind, ist es vielleicht besser, sie als pseudo-boolesche Probleme zu formulieren (siehe Wiki-Artikel über pseudo-boolesche Probleme ) und pseudo-boolesche Löser zu verwenden (siehe pseudo-boolesche Konkurrenz ). Auf diese Weise sind die Kardinalitätsbedingungen nur pseudo-boolesche Bedingungen und Teil der Sprache - hoffentlich behandelt der pseudo-boolesche Löser sie dann direkt und damit effizienter.