Solución de Problemas con CCP restricción de...
Transcript of Solución de Problemas con CCP restricción de...
Solucion de Problemas con CCPrestriccion de canal
slides basados en el curso “constraint Programming” deChristian Schulte 2
Profesor: Camilo Rueda 1
1Universidad Javeriana-Cali,2KTH Royal Institute of Technology, Sweden
PUJ 2008
Restriccion de canal: problema
Dada una baraja de 52 cartaspintas: espada, trebol, corazon, diamanteorden: 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
Movidatomar carta del tope de una de las 17 pilasmoverla al hueco negro, siempre y cuando la carta seaadyacente a la del tope del hueco negro
Juego del “hueco negro”
Adyacenteindependientemente de pintala siguiente mayor o menor (continua 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 hueconegro
asociar posicion en la pila con cartamodelar el hecho de ser adyacente
B: las cartas deben tomarse en orden de las 17 pilasasociar carta con posicion en la pila de hueco negromodelar que las posiciones estan oredenadasorden en la pila hueco negro: cartas movidas en orden delas 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 13cartas 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 restriccion para modulo...usar entonces element
Element: arreglo m de 52 elementosinicialice: m[i] = i mod 13el numero de la carta es el ındice en el arreglo, su modulo13 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: restriccion A
Variables: cartas es un arreglo de 52 variablesvalores: {0, ..., 51}asocia posicion en hueco negro con carta
Restriccion A: cartas en cada dos posiciones sucesivasdeben ser adyacentes
adyacente(carta[i], carta[i + 1]) para 0 ≤ i < 51Como modelar la restriccion B?
Modelo: restriccion B
Variables: pos es un arreglo de 52 variablesvalores: {0, ..., 51}asocia carta con posicion en hueco negro
Restriccion B: las posiciones deben estar en ordenpos[i] < pos[i + 1] para 0 ≤ i < 51
Como modelar la restriccion A?
Modelo: restricciones A y B
Tomar ambos: pos y carta: son duales por intercambiarvalores y variables
carta[i] = j ⇔ pos[j] = iIncluir:
Restriccion A sobre variables cartaRestriccion B sobre variables posRestriccion que liga valores de carta y pos: “channel”
Modelo: ajuste
Simetrıas: los colores son irrelevantesRamificacon: tratar de tomar cartas en el tope de cada pila
Restriccion “channel”
Suponga variables xi , yi (0 ≤ i < n)channel(xi , yi) se cumpe si
xi = j ⇔ yj = i (0 ≤ i < n)
Propagar “channel”
Metodo ingenuo: para un store ssi s(xi) = {j}, entonces s(yj) debe ser {i}si s(yi) = {j}, entonces s(xj) debe ser {i}
Mejor (metodo A): para un store ssi 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”
Observacion: para que channel(xi , yi) se cumpla,distinct(xi) y distinct(yj) deben cumplirse
sponga que xi1 = j y que tambien xi2 = j , donde i1 6= i2entonces yj = i1 y tambien yj = i2lo que es imposible...
Solo se necesita un distinctpropagar distinct sobre las xila propagacion del metodo A propagara distinct para yi
Prlaneamiento “scheduling”
A3 A5A4A2
S5S5
B5
S2S2
B2
M5
P1
A1
S3S3
B3
M2
A6
S1S1
B1 M3
P2
S6S6
B6
S4
T2
B4
S4
M1
M4
T1 T4
V1
M6
T5
V2
T3
Solucion de un problema de “scheduling”
Tiempo de arranque de cada tareaTodas las restricciones satisfechasTiempo de conclusion de tareas mınimo
“scheduling”, modelo
Variable para tiempo de comienzo de tarea astart(a)
restriccion de precedencia: a antes que bstart(a) + dur(a) ≤ start(b)
Procedimiento de propagacion
a antes que b
a
b
start(a) ∈ {0, ..., 7}start(b) ∈ {0, ..., 5}
Procedimiento de propagacion
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 astart(a)
restriccion de precedencia: a antes que bstart(a) + dur(a) ≤ start(b)
Restriccion de recursosa antes que b, start(a) + dur(a) ≤ start(b)
ob antes que a, start(b) + dur(b) ≤ start(a)
Ramificacion
Establecer orden sobre las tareasque recurso escoger: el mas escaso?que tarea escoger primero: por ejemplo la mas larga
Modelo demasiado ingenuo
Vision muy localpares individuales de tareasO(n2) propagadores para n tareas
ision globaltodas las tareas sobre un recurso: serializar, ordenarun solo propagadorhay buenos algoritmos
Clases de problemas
Por tipo de recursoa lo sumo una tarea al tiempo: disyuntivomenos que la capacidad: acumulativo
Por tipos de tareasNo interruptiblesinterruptiblesestirables: elastico
veremos: disyuntivo, no interruptible
Serializacion
Considerar todas las tareas sobre el mismo recursoDeducir su orden tanto como sea posiblemenos que la capacidad: acumulativoTecnicas
Tempotabulacion: mirar slots temporales usados/libresbusqueda de arcos: que tarea ejecuta primero/ultimo?no-primera, no-ultima: que tareas no pueden serprimera/ultima?
Propagacion de tempotabulacion
Horario para recursoRegistrar informacion sobre tiempo en el que una tarea usacon seguridad el recurso
Propagar en ambas direccionesde tareas a horariosde horarios a tareas
Ejemplo
A
B
start(A) ∈ {0, 1} dur(A) = 2start(B) ∈ {0, 1, 2} dur(B) = 2
Hacia horario...
A
B
Horario
start(A) ∈ {0, 1} dur(A) = 2start(B) ∈ {0, 1, 2} dur(B) = 2
Hacia horario...
A
B
Horario
o
start(A) ∈ {0, 1} dur(A) = 2start(B) ∈ {0, 1, 2} dur(B) = 2
Hacia horario...
A
B
Horario
start(A) ∈ {0, 1} dur(A) = 2start(B) ∈ {0, 1, 2} dur(B) = 2
Hacia tareas...
Horario
A
B
start(A) ∈ {0, 1} dur(A) = 2start(B) ∈ {2} dur(B) = 2
Hacia horario...
Horario
A
B
start(A) ∈ {0, 1} dur(A) = 2start(B) ∈ {2} dur(B) = 2
Hacia tareas...
Horario
A
B
start(A) ∈ {0} dur(A) = 2start(B) ∈ {2} dur(B) = 2
Hacia horario...(inutil)
Horario
A
B
start(A) ∈ {0, 1} dur(A) = 2start(B) ∈ {2} dur(B) = 2
Busqueda de arcos
tempotabulacion es debilpropagacion reificada es mejor...
Pero hay idea importantetener en cuenta cuando se usa un recursopropagar esto hacia las tareas
Busqueda de arcos es un esquema mas general parapropagar el orden (arcos) entre tareas
Busqueda de arcos: idea
Asumir un subconjunto O de tareas y T ∈ Orestringir T para que ejecute primeroaverigue si las tareas en O\{T}
deben,pueden, o no puedenejecutar de primero o de ultimo
de manera simetrica 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 despues de {B.C}
Ejemplo
A
B
C
Resultado de la propagacionstart(A) ∈ {8, ..., 11}tempotabulacion y reificacion no propagarıan nada!