¿Cómo uso el ordenamiento canónico para reducir la simetría en la codificación SAT del problema del casillero?

8

En el documento "Codificación eficiente de CNF para seleccionar 1 de N objetos", los autores presentan su técnica de "variable comandante" para codificar la restricción, y luego hablan sobre el problema del casillero.

Dado que mi error puede existir en la comprensión de nivel inferior, permítame declarar lo que creo que sé antes de plantear la pregunta:

Deje que y n es el número de palomas y agujeros. La codificación ingenua utiliza una variable proposicional X i , j que es verdadera cuando la paloma i t h debe colocarse en el agujero j t h . La cláusula E x un c t l y O n e ( X 1 , 1 , X 1 , 2 , . . . , X 1 , n )mnXi,jithjthExactlyOne(X1,1,X1,2,...,X1,n)impone que la paloma 1 debe ocupar exactamente un hoyo; Se añaden cláusulas idénticas para las otras palomas. La cláusula hace cumplir que no más de una paloma ocupa agujero 1; Se añaden cláusulas idénticas para los agujeros restantes.AtMostOne(X1,1,X2,1,...,Xm,1)

Cuando hay más palomas que agujeros (m> n), el problema es irresoluble (obvio para los humanos) pero el solucionador SAT no "ve" este hecho. Cuando no puede encontrar una manera de colocar las palomas buscará un intento con las palomas 2 , 1 , 3 , . . . , M . No entiende que el orden de las palomas es irrelevante. El periódico, entre otros, llama a esto simetría.1,2,3,..,m2,1,3,...,m

Instancias donde se utilizan como una prueba extenuante de la capacidad de un solucionador SAT para detectar la insatisfacción.m=n+1

El documento propone romper la simetría imponiendo el orden a las palomas. La paloma debe colocarse en un hoyo enfrente del hoyo de la paloma i + 1 (es decir, la paloma en el hoyo j debe tener un número menor que la paloma en el hoyo j + 1 ). Luego dice decepcionantemente: "Debido a las limitaciones de espacio, no describimos explícitamente en detalle la codificación de ordenamiento canónico, pero el número de cláusulas generadas es de orden O ( n l o g ( n ) ) ".ii+1jj+1O(nlog(n))

Entonces mi pregunta es: ¿qué hicieron para obtener estos resultados?

Quiero tratar las variables como una cadena de bits que, numéricamente, identifica la elección de qué paloma entró en el hoyo 1, y así sucesivamente. Siga esto con n - 1 comparadores para hacer cumplir la sugerencia del artículo. Sin embargo, mi ingenua construcción de comparación requiere m cláusulas, una para cada bit (de tamaño cada vez más feo). ¡Ayuda! :){X1,1,X2,1,...,Xm,1}n1

Andrew Lamoureux
fuente

Respuestas:

7

Sea el número de palomas yn sea ​​el número de agujeros. Supongamos que las variables proposicionales B i , 0 ... B i , l o g ( n ) codifican la representación binaria de j - 1 si la i th pigeon se coloca en el hoyo j . (Ejemplo, si la paloma 1 se colocara en el hoyo 10, j - 1 = 9 , que es binario 1001. Entonces B 1 , 3 = verdadero, B 1 , 2mnBi,0Bi,log(n)j1ijj1=9B1,3B1,2= falso, = falso y B 1 , 0 = verdadero.)B1,1B1,0

Haga cumplir un orden particular de las palomas en los agujeros al exigir que el agujero codificado por las variables sea ​​menor que el de B i + 1 . Las codificaciones se comparan como cabría esperar:BiBi+1

< B i + 1 , l o g ( n ) OR B i , l o g ( n ) = B i + 1 , l o g ( n ) Y B i , l o g ( n ) - 1 < B i + 1Bi,log(n)siyo+1,losol(norte)

siyo,losol(norte)siyo+1,losol(norte)siyo,losol(norte)-1 OR B i , l o g ( n ) = B i + 1 , l o g ( n ) Y B i , l o g ( n ) - 1 = B i + 1 , l o g ( n ) - 1 Y B isiyo+1,losol(norte)-1

siyo,losol(norte)siyo+1,losol(norte)siyo,losol(norte)-1siyo+1,losol(norte)-1 < B i + 1 , l o g ( n ) - 2 O ... siyo,losol(norte)-2siyo+1,losol(norte)-2

... siguiendo el patrón de permitir que los bits más significativos sean equivalentes siempre que el siguiente bit a la derecha sea menor que el de la próxima paloma. Habrá conjunciones por comparador y comparadores O ( m ) , dando las cláusulas adicionales O ( m l o g ( n ) ) esperadas .O(losol(norte))O(metro)O(metrolosol(norte))

Los valores de la variable deben estar implicados por los valores X i , j . Cada bit B i , está implicado por cualquiera de un conjunto particular de las variables X i , j que se establecen. Ejemplo: suponiendo que n = 16 , tendría:siXyo,jsiyo,Xyo,jnorte=dieciséis

miXunaCtlyOnortemi(X1,9 9,X1,10,X1,11,X1,12,X1,13,X1,14,X1,15,X1,dieciséis,si1,3¯)

lo que fuerza a verdadero si la paloma 1 se coloca en cualquiera de los agujeros 9-16. De lo contrario, B 1 , 3 se establece como falso para satisfacer la cláusula. Estas cláusulas establecen los bits B i restantes .si1,3si1,3siyo

E x a cmiXunaCtlyOnortemi(X1,5 5,X1,6 6,X1,7 7,X1,8,X1,13,X1,14,X1,15,X1,dieciséis,si1,2¯) E x a c t l y OmiXunaCtlyOnortemi(X1,3,X1,4 4,X1,7 7,X1,8,X1,11,X1,12,X1,15,X1,dieciséis,si1,1¯) miXunaCtlyOnortemi(X1,2,X1,4 4,X1,6 6,X1,8,X1,10,X1,12,X1,14,X1,dieciséis,si1,0 0¯)

Habrá de estas cláusulas para cada paloma. Como hay m palomas, se añaden cláusulas m l o g ( n ) .losol(norte)metrometrolosol(norte)

Kyle Jones
fuente
¡Gracias por su respuesta! ¿Pero no se requieren cláusulas adicionales para aplicar la codificación binaria en sí? Usando su ejemplo con la paloma 1 colocada en el hoyo 10, creo que se requieren cláusulas para obligar a . Esto se expande a las cláusulas l o g ( n ) en CNF. Y necesitamos uno para cada X i , j , lo que resulta en m X1,10si1,3si1,2¯si1,1¯si1,0 0losol(norte)Xyo,j crecimiento de nuevo. metronorte
Andrew Lamoureux
Editaré la respuesta para abordar esto.
Kyle Jones
Usando para "comprimir" lo detallado "si la paloma va aquí, los bits deben ser estas" declaraciones es simplemente brillante. Dado que esta restricción es el tema de su trabajo, no hay duda de que su solución es lo que se omitió. Gracias kyle miXunaCtlyOnortemi()
Andrew Lamoureux