Programación por restricciones clase 14

Anuncio
Programación por
restricciones
clase 14
Camilo Rueda
Universidad Javeriana-Cali
Programación por restriccionesclase 14-- p.1/19
Modelamiento en CCP
Dos tipos de restricciones:
Solubles
Solucionables eficientemente con técnicas de optimización.
Chequeables
Menos adaptadas para solución eficiente, pero es fácil chequear si
una solución las cumple.
Las restricciones son chequeables después de tener valores para sus
variables:
se debe ramificar sobre variables de búsqueda
Valores de las variables deben enumerarse
En general, variables enteras o discretas. A veces continuas.
Ramificar se hace particionando el dominio.
Programación por restriccionesclase 14-- p.2/19
Solucionables vs chequeables
Cómo relacionar variables de restricciones solucionables con variables de
restricciones chequeables?
No es en general bueno optimizar sobre solucionables sin mirar
chequeables
Interacción mediante condicionales
if P then S
Si el predicado P (restricciones chequeables) se cumple,
imponer la restricción solucionable S
La ramificación puede hacer que el antecedente P se vuelva
válido.
Reducción de dominios opera sobre restricciones chequeables
Técnicas de optimización operan sobre solucionables.
Programación por restriccionesclase 14-- p.3/19
Marco general
El marco general de modelamiento es:
Minimizar f (x) + r(y) (función objetivo)
Sujeto a:
pi (y), i ∈ I1 (restricciones chequeables)
gi (y), i ∈ I2 (restricciones solucionables)
qi (y) → hi (x), i ∈ I3 (restricciones condicionales)
di (x, y), i ∈ I4 (restricciones mixtas)
x ∈ X (variables solucionables)
yj ∈ Dj , para todo j (variables de búsqueda)
Programación por restriccionesclase 14-- p.4/19
restricciones
Restricciones chequeables pi (y), qi (y) pueden ser fórmulas
proposicionales, inecuaciones 0/1, lógica de variables discretas,etc.
Restricciones f (x), gi (x), hi (x) son engenral inecuaciones lineales o
no lineales sobre variables continuas xj
Las restricciones mixtas di (x, y) son restricciones acumulativas, de
elemento, etc.
Programación por restriccionesclase 14-- p.5/19
Resumen del modelo
Restricciones chequeables, solucionables o condicionales, u otras
definidas en términos de estas.
Restricciones chequeables contienen solamente variables de
búsqueda, discretas o continuas
restricciones solubles contienen solamente variables solucionables,
generalmente continuas.
El antecedente de las condicionales son restricciones chequeables
El consecuente son restricciones solucionables
La función objetivo es separable: Los valores de x y de y son
independientes
El problema de minimizar f (x sobre restricciones solubles debe ser
“fácil”. En general f (x) es función lineal.
Programación por restriccionesclase 14-- p.6/19
Restricciones globales
La formulación de un modelo es más compacta si incluye restricciones
globales
Aplicables a muchos problemas
Tienen propagadores específicos eficientes
Ayudan a construír un lenguaje de modelado para ciertos dominios.
Algunas restricciones globales:
element
sum
all-different
cummulative
Programación por restriccionesclase 14-- p.7/19
Restricción element
m_element(y, (c1 , c2 , ..., ck ), z)
y es una variable discreta
ci son expresiones
z debe tomar el valor de la y-esima expresión
La restricción m − element
es útil para definir restricciones que involucran variables del
problema en los subíndices.
es equivalente a (y = i) → (z = ci ), i ∈ 1..k
Una variante: x_element(y, (xj1 , ..., xjk ), z). La variable z toma el valor de
la y-ésima variable x
Programación por restriccionesclase 14-- p.8/19
Uso de element
Para restricciones que involucran términos de la forma cs(y) , donde
s(y) es una función de la variable de búsqueda y
Se implementa con m_element(y, (cs(1) , ..., cs(k) ), z)
Y se reemplaza toda ocurrencia de cs(y) por z.
Ejemplo: La restricción cy,y+1 ≥ 10, donde y ∈ {1, 2, 3, 4}.
cy,y+1 se reemplaza por z
y la restricción m_element(y, (c1,2 , c2,3 , c3,4 , c4,5 ), z), se agrega al
modelo
Igual para x_element. Se debe evitar agregar no-linealidades. Ejemplo:
P
j cyj xj ≥ 10 se remplaza por:
P
j zj ≥ 10
x_element(yj , (c1 xj , ..., ck xj ), zj ), para todo j
Programación por restriccionesclase 14-- p.9/19
Restricción sum
m_sum(y, (S1 , ..., Sk ), (c1 , ..., cm ), z)
Si es un conjunto de índices en {1, ..., m}
Los cj son constantes.
y es variable entera
Equivale a la restricción:
(y = i) →
z=
P
j∈Si cj
para i = 1, ..., k
La versión x_sum(y, (S1 , ..., Sk ), (f1 (x), ..., fm (x)), z) equivale a
(y = i) →
z=
P
j∈Si
fj (x)
Programación por restriccionesclase 14-- p.10/19
Ejemplo de sum
sum(y, ({1, 2, 3}, {1, 2, 4}, {1, 3, 4}), (10, 20, 50, 40), z)
con y = 2
equivale a: z = 10 + 20 + 40
sum(y, ({1, 2, 3}, {1, 2, 4}, {1, 3, 4}), (x1, x2 , x3 , x4 ), z)
con y = 3
equivale a: z = x1 + x3 + x4
Programación por restriccionesclase 14-- p.11/19
Restricción all_different
all_dif f erent(x1 , ..., x4 ). asegura que todas las variables tengan valores
diferentes
Ejemplo, problema del agente viajero:
Programación por restriccionesclase 14-- p.12/19
Restricción all_different
all_dif f erent(x1 , ..., x4 ). asegura que todas las variables tengan valores
diferentes
Ejemplo, problema del agente viajero:
cyk ,yk+1 = costo de ir del nodo yk al nodo yk+1
yk = nodo recorrido en la etapa k.
Formulación:
Programación por restriccionesclase 14-- p.12/19
Restricción all_different
all_dif f erent(x1 , ..., x4 ). asegura que todas las variables tengan valores
diferentes
Ejemplo, problema del agente viajero:
cyk ,yk+1 = costo de ir del nodo yk al nodo yk+1
yk = nodo recorrido en la etapa k.
Formulación:
minimizar
P
k cyk ,yk+1
Sujeto a:
all_dif f erent(y1 , ..., yn )
Otra formulación:
Programación por restriccionesclase 14-- p.12/19
Restricción all_different
all_dif f erent(x1 , ..., x4 ). asegura que todas las variables tengan valores
diferentes
Ejemplo, problema del agente viajero:
cyk ,yk+1 = costo de ir del nodo yk al nodo yk+1
yk = nodo recorrido en la etapa k.
Formulación:
minimizar
P
k cyk ,yk+1
Sujeto a:
all_dif f erent(y1 , ..., yn )
Otra formulación:
P
minimizar k ck,yk
Sujeto a:
all_dif f erent(y1 , ..., yn )
Programación por restriccionesclase 14-- p.12/19
Propagación de element
Para la primera forma de la restricción, m_element(y, (c1 , c2 , ..., ck ), z),
basta arco-consistencia:
Dz0 = Dz ∩ {cj | j ∈ Dy }
Dy0 = Dy ∩ {cj | j ∈ Dz }
Ejemplo, sea Dz = {20, 30, 60, 80, 90} y Dy = {1, 3, 4}
Dz0 = {20, 30, 60, 80, 90} ∩ {20, 40, 60} = {20, 60}
Dy0 = {1, 3, 4} ∩ {1, 2, 4} = {1, 4}
Programación por restriccionesclase 14-- p.13/19
Propagación de element(2)
Para la segunda forma de la restricción, x_element(y, (xj1 , ..., xjk ), z),
arco-consistencia puede no implicar hiper-arco consistencia. Dy , Dz son
finitos, pero Dx1 , ..., Dxk pueden ser finitos o continuos
S
0
Dz = Dz ∩ j∈Dy Dxj
Dy0 = Dy ∩ {j | Dz ∩ Dxj 6= ∅}
Dx0 j

 D0
z
=
 Dx
j

si Dy0 = {j} 

sino
Programación por restriccionesclase 14-- p.14/19
Ejemplo de x_element
Considere x_element(y, (x1 , x2 , x3 , x4 ), z), con dominios:
Dz = {20, 30, 60, 80, 90} Dy = {1, 3, 4}
Dx1 = {10, 50}
Dx2 = {10, 20}
Dx3 = {40, 50, 80, 90}
Dx4 = {40, 50, 70}
Entonces:
Dz0 = {20, 30, 60, 80, 90} ∩ {10, 40, 50, 70, 80, 90} = {80, 90}
Dy0 = {1, 3, 4} ∩ {3} = {3} Dx0 1 = Dx1
Dx0 2 = Dx2 Dx0 3 = Dz0 = {80, 90}
Dx0 4 = Dx4
Programación por restriccionesclase 14-- p.15/19
Propagación de sum
La restricción m_sum(y, (S1 , ..., Sk ), (c1 , ..., cm ), z) propaga así:
Dominio de z
Dz0
= Dz ∩
n P
j∈Si cj
| i ∈ Dy
o
∈ Dz
o
Dominio de y
Dy0 = Dy ∩
n
i|
P
j∈Si cj
Ejemplo: m_sum({1, 2, 3}, {1, 2, 4}, {1, 3, 4}), (10, 20, 50, 40), z), con
dominios: Dz = {30, 50, 80, 100}, Dy = {1, 2, 3}
Dz0 = {30, 50, 80, 100} ∩ {70, 80, 100} = {80, 100}
Dy0 = {1, 2, 3} ∩ {2, 3} = {2, 3}
Programación por restriccionesclase 14-- p.16/19
Propagación de all_different
all_dif f erent(x1 , ..., xn ). La idea es representar la restricción en un grafo:
Cada variable xi es un vértice
cada valor vj de los dominios es un vértice
Hay un arco (xi , vj ) si vj está en el dominio de xi
Definiciones:
Una correspondencia (“matching”) es un subgrafo en el que cada
nodo es incidente a exactamente un arco.
Una correspondencia cubre los vértices y1 , ..., yn cuando cada uno
de ellos es incidente a un arco de la correspondencia
Obviamente, una correspondencia que cubre todos las variables de
all_dif f erent(x1 , ..., xn ) es solución a la restricción.
Programación por restriccionesclase 14-- p.17/19
Propagación de all_different(2)
Propiedades:
Una correspondencia es de máxima cardinalidad (cmc)si tiene el
mayor número de arcos.
Una correspondencia que cubre a y1 , ..., yn existe sí y sólo si
cualquier correspondencia de máxima cardinalidad cubre a y1 , ..., yn
Un algoritmo de Hopcroft-Karp encuentra una correspondencia de
máxima cardinalidad en O(n1/2 m, donde m es el número de arcos
Con esto se determina si la restricción es satisfactible. Paso siguiente,
encontrar arcos que NO pueden ser parte de una cmc.
Teorema (Berge):
Un arco pertenece a algunas, pero no a todas las cmc ssi:
pertenece a un ciclo alternante
o pertenece a un camino alternante par, uno de cuyos extremos
es un vértice incidente a ningún arco en la correspondencia.
Programación por restriccionesclase 14-- p.18/19
Propagación de all_different(3)
Procedimiento:
Encuentre una cmc
Para cada vértice que no está cubierto por la cmc, marq ue todos los
arcos que sean parte de un camino alternante que comience en ese
vértice.
Por el teorema de Berge, estos arcos pertenecen al menos a uno
(pero no a toda) cmc
Por la misma razón, marque todo arco que pertenezca a un ciclo
alternante
Ahora, por el teorema de Berge, dado cualquier arco no marcado, si
es parte de la cmc, debe pertenecer a toda cmc
Entonces: eliminar arcos no marcados que no sean parte de la cmc.
Programación por restriccionesclase 14-- p.19/19
Descargar