Parece que está tratando de calcular una hipergrafía transversal de tamaño . Es decir, { T 1 , ... , T m } es su hipergrafía, y S es su transversal. Una traducción estándar es expresar las cláusulas como lo ha hecho, y luego traducir la restricción de longitud en una restricción de cardinalidad.k{ T1, ... , Tmetro}S
Por lo tanto, utilice su codificación existente, es decir, y luego agregue cláusulas que codifiquen ∑ 1 ≤ i ≤ n x i ≤ k .⋀1 ≤ j ≤ m⋁i ∈ TjXyo∑1 ≤ i ≤ nXyo≤ k
es una restricción de cardinalidad. Hay varias traducciones de restricciones de cardinalidad diferentes al SAT.∑1 ≤ i ≤ nXyo≤ k
La traducción de restricción de cardinalidad más simple pero bastante grande es solo . De esta manera, cada disyunción representa la restricción ¬ ⋀ i ∈ X x i - para todos los subconjuntos X de { 1 , ... , n }⋀X⊆ { 1 , ... , n } , | XEl | =k+1⋁i ∈ X¬ xyo¬ ⋀i ∈ XXyoX{ 1 , ... , n }de tamaño k + 1. Es decir, nos aseguramos de que no haya forma de que se puedan establecer más de k variables. Tenga en cuenta que este no es un tamaño polinómico en k
Algunos enlaces a documentos sobre traducciones de restricciones de cardinalidad más eficientes en espacio que son de tamaño polinómico en k :
- Traducción de restricciones pseudobooleanas a SAT - Niklas Eén y Niklas Sörensson, JSAT vol 2 (2006), pg 1-26 (una buena encuesta).
- Eficaz codificación CNF de restricciones de cardinalidad booleana : Olivier Bailleux y Yacine Boufkhad, Proceedings of Principles and Practice of Restraint Programming 2003, LNCS vol 2833, pg 108-122 (una traducción agradable, bastante fácil de implementar).
- Hacia una codificación CNF óptima de restricciones de cardinalidad booleana - Carsten Sinz - Procedimientos de principios y práctica de programación de restricciones 2005, LNCS 3709, pg 827-831.
- Hacia robustas codificaciones CNF de restricciones de cardinalidad - Joao Marques-Silva e Inês Lynce, Procedimientos de principios y práctica de programación de restricciones 2007, LNCS 4741, pg 483-497.
Si realmente está interesado en resolver tales problemas, tal vez sea mejor formularlos como problemas pseudo-booleanos (vea el artículo wiki sobre problemas pseudo-booleanos ) y use solucionadores pseudo-booleanos (vea competencia pseudo-booleana ). De esa manera, las restricciones de cardinalidad son solo restricciones pseudobooleanas y son parte del lenguaje; es de esperar que el solucionador pseudobooleano las maneje directamente y, por lo tanto, de manera más eficiente.