Soluci ´on de Problemas con CCP restricci ´on de canal
slides basados en el curso “constraint Programming” de Christian Schulte2
Profesor: Camilo Rueda1
1Universidad Javeriana-Cali,
2KTH Royal Institute of Technology, Sweden
PUJ 2008
Restricci ´on de canal: problema
Dada una baraja de 52 cartas
pintas: espada, tr ´ebol, coraz ´on, diamante orden: As,2,3,4,5,6,7,8,9,10,J,Q,K Repartir las cartas as´ı:
poner el as de espadas en una sola pila (“hueco negro”) otras cartas: 17 pilas con tres cartas cada una
Movida
tomar carta del tope de una de las 17 pilas
moverla al hueco negro, siempre y cuando la carta sea adyacente a la del tope del hueco negro
Juego del “hueco negro”
Adyacente
independientemente de pinta
la siguiente mayor o menor (contin ´ua en ciclo) ejemplo: 9♣ ↔ 10♣, 9♣ ↔ 8♣, 9♥ ↔ 10♦, A♥ ↔ K ♣ Objetivo:
mover todas las cartas de las 17 pilas al hueco negro
Modelo: restricciones
A: las cartas deben estar adyacentes en la pila del hueco negro
asociar posici ´on en la pila con carta modelar el hecho de ser adyacente
B: las cartas deben tomarse en orden de las 17 pilas asociar carta con posici ´on en la pila de hueco negro modelar que las posiciones est ´an oredenadas
orden en la pila hueco negro: cartas movidas en orden de las 17 pilas
C: la primera carta en el hueco negro es el as de espadas.
Cartas adyacentes
numere las cartas de 0 a 51
♠ : 0 − 12, ♣ : 13 − 25, ♥ : 26 − 38, ♦ : 39 − 51 Adyacencia independiente de pinta: para la carta i, considere i mod 13
cartas i y j adyacentes
(i mod 13) − (j mod 13) = 1 ∨ (i mod 13) − (j mod 13) = 12 ∨ (j mod 13) − (i mod 13) = 1 ∨ (j mod 13) − (i mod 13) = 12
Modelar adyacencia
Gecode no tiene restricci ´on para m ´odulo ...usar entonces element
Element: arreglo m de 52 elementos inicialice: m[i] = i mod 13
el n ´umero de la carta es el ´ındice en el arreglo, su m ´odulo 13 es el valor
Entonces: adyacente(i, j) es
(i mod 13) − (j mod 13) ∈ {−12, −1, 1, 12}
crear variable d con dominio {−12, −1, 1, 12}
la diferencia debe ser igual a d
Modelo: restricci ´on A
Variables: cartas es un arreglo de 52 variables valores: {0, ..., 51}
asocia posici ´on en hueco negro con carta
Restricci ´on A: cartas en cada dos posiciones sucesivas deben ser adyacentes
adyacente(carta[i], carta[i + 1]) para 0 ≤ i < 51 C ´omo modelar la restricci ´on B?
Modelo: restricci ´on B
Variables: pos es un arreglo de 52 variables valores: {0, ..., 51}
asocia carta con posici ´on en hueco negro
Restricci ´on B: las posiciones deben estar en orden pos[i] < pos[i + 1] para 0 ≤ i < 51
C ´omo modelar la restricci ´on A?
Modelo: restricciones A y B
Tomar ambos: pos y carta: son duales por intercambiar valores y variables
carta[i] = j ⇔ pos[j] = i Incluir:
Restricci ´on A sobre variables carta Restricci ´on B sobre variables pos
Restricci ´on que liga valores de carta y pos: “channel”
Modelo: ajuste
Simetr´ıas: los colores son irrelevantes
Ramificac ´on: tratar de tomar cartas en el tope de cada pila
Restricci ´on “channel”
Suponga variables xi, yi (0 ≤ i < n) channel(xi,yi)se cumpe si
xi =j ⇔ yj =i (0 ≤ i < n)
Propagar “channel”
M ´etodo ingenuo: para un store s
si s(xi) = {j}, entonces s(yj)debe ser {i}
si s(yi) = {j}, entonces s(xj)debe ser {i}
Mejor (m ´etodo A): para un store s si j 6∈ s(xi)entonces elimine i de s(yj) si j 6∈ s(yi)entonces elimine i de s(xj) Existe algo mejor?
Propagar mejor “channel”
Observaci ´on: para que channel(xi,yi)se cumpla, distinct(xi)y distinct(yj)deben cumplirse
sponga que xi1 =j y que tambi ´en xi2 =j, donde i16= i2 entonces yj =i1y tambi ´en yj =i2
lo que es imposible...
Solo se necesita un distinct propagar distinct sobre las xi
la propagaci ´on del m ´etodo A propagar ´a distinct para yi
Prlaneamiento “scheduling”
A3 A4 A5
A2
S5 S5 B5 S2
S2 B2
M5
P1 A1
S3 S3 B3 M2
A6 S1
S1
B1 M3
P2
S6 S6 B6
S4 T2
B4 S4 M1
M4
T1 T4
V1
M6 T5
V2 T3
Soluci ´on de un problema de “scheduling”
Tiempo de arranque de cada tarea Todas las restricciones satisfechas Tiempo de conclusi ´on de tareas m´ınimo
“scheduling”, modelo
Variable para tiempo de comienzo de tarea a start(a)
restricci ´on de precedencia: a antes que b start(a) + dur (a) ≤ start(b)
Procedimiento de propagaci ´on
a antes que b
a b
start(a) ∈ {0, ..., 7}
start(b) ∈ {0, ..., 5}
Procedimiento de propagaci ´on
a antes que b
a b
a
b start(a) ∈ {0, ..., 7} start(a) ∈ {0, 1, 2}
start(b) ∈ {0, ..., 5} start(b) ∈ {3, 4, 5}
“scheduling”, modelo
Variable para tiempo de comienzo de tarea a start(a)
restricci ´on de precedencia: a antes que b start(a) + dur (a) ≤ start(b)
Restricci ´on de recursos
a antes que b, start(a) + dur (a) ≤ start(b) o
b antes que a, start(b) + dur (b) ≤ start(a)
Ramificaci ´on
Establecer orden sobre las tareas qu ´e recurso escoger: el m ´as escaso?
qu ´e tarea escoger primero: por ejemplo la m ´as larga
Modelo demasiado ingenuo
Visi ´on muy local
pares individuales de tareas O(n2)propagadores para n tareas isi ´on global
todas las tareas sobre un recurso: serializar, ordenar un solo propagador
hay buenos algoritmos
Clases de problemas
Por tipo de recurso
a lo sumo una tarea al tiempo:disyuntivo menos que la capacidad:acumulativo Por tipos de tareas
No interruptibles interruptibles estirables:el ´astico
veremos: disyuntivo, no interruptible
Serializaci ´on
Considerar todas las tareas sobre el mismo recurso Deducir su orden tanto como sea posible
menos que la capacidad:acumulativo T ´ecnicas
Tempotabulaci ´on: mirar slots temporales usados/libres b ´usqueda de arcos: qu ´e tarea ejecuta primero/ ´ultimo?
no-primera, no- ´ultima: qu ´e tareas no pueden ser primera/ ´ultima?
Propagaci ´on de tempotabulaci ´on
Horario para recurso
Registrar informaci ´on sobre tiempo en el que una tarea usa con seguridad el recurso
Propagar en ambas direcciones de tareas a horarios
de horarios a tareas
Ejemplo
A B
start(A) ∈ {0, 1} dur (A) = 2 start(B) ∈ {0, 1, 2} dur (B) = 2
Hacia horario...
A B
Horario
start(A) ∈ {0, 1} dur (A) = 2 start(B) ∈ {0, 1, 2} dur (B) = 2
Hacia horario...
A B
Horario
o
start(A) ∈ {0, 1} dur (A) = 2 start(B) ∈ {0, 1, 2} dur (B) = 2
Hacia horario...
A B
Horario
start(A) ∈ {0, 1} dur (A) = 2 start(B) ∈ {0, 1, 2} dur (B) = 2
Hacia tareas...
Horario
A B
start(A) ∈ {0, 1} dur (A) = 2 start(B) ∈ {2} dur (B) = 2
Hacia horario...
Horario
A B
start(A) ∈ {0, 1} dur (A) = 2 start(B) ∈ {2} dur (B) = 2
Hacia tareas...
Horario
A B
start(A) ∈ {0} dur (A) = 2 start(B) ∈ {2} dur (B) = 2
Hacia horario...(in ´util)
Horario
A B
start(A) ∈ {0, 1} dur (A) = 2 start(B) ∈ {2} dur (B) = 2
B ´usqueda de arcos
tempotabulaci ´on es d ´ebil
propagaci ´on reificada es mejor...
Pero hay idea importante
tener en cuenta cu ´ando se usa un recurso propagar esto hacia las tareas
B ´usqueda de arcos es un esquema m ´as general para propagar el orden (arcos) entre tareas
B ´usqueda de arcos: idea
Asumir un subconjunto O de tareas y T ∈ O restringir T para que ejecute primero averigue si las tareas en O\{T }
deben,pueden, o no pueden ejecutar de primero o de ´ultimo de manera sim ´etrica para ´ultima Puede hacerse en O(n2)para n tareas
Ejemplo
!!
start(A) ! {0,…,11} dur(A) = 6
!!
start(B) ! {1,…,7} dur(B) = 4
!!
start(C) ! {1,…,8} dur(C) = 3 A
B
C
Ejemplo
A {B,C}
Considere {B, C}
A no puede ir antes que {B, C}
Ejemplo
A {B,C}
Considere {B, C}
A no puede ir antes que {B, C}
propague que A va despu ´es de {B.C}
Ejemplo
A B C
Resultado de la propagaci ´on start(A) ∈ {8, ..., 11}
tempotabulaci ´on y reificaci ´on no propagar´ıan nada!