380 likes | 548 Views
Relajación y Procesamiento híbrido de restricciones. Diferentes técnicas de relajación Algunas técnicas híbridas populares. Relajación. Consistencia de nodo Forward check Lookahead check AC1 AC3 Path-consistency. Ejemplo. El enigma de las 4 casas:.
E N D
Relajación y Procesamiento híbrido de restricciones Diferentes técnicas de relajación Algunas técnicas híbridas populares
Relajación Consistencia de nodo Forward check Lookahead check AC1 AC3 Path-consistency
Ejemplo • El enigma de las 4 casas: • 4 familias A, B, C y D viven unas junto a otras en casas numeradas 1, 2, 3 y 4. • Dvive en una casa con número más bajo queB, • Bvive al lado deAen una casa con número mayor, • Hay al menos una casa entreByC, • Dno vive en la casa con número2, • Cno vive en la casa con número4. • ¿Cuál familia vive en cuál casa ?
Representación: • Las variables: A, B, C y D • Los dominios: dA = dB = dC = dD = { 1, 2, 3, 4} • Restricciones: • unaria: • r(C) =C 4 • r(D) =D 2 • binaria: • r(A,B) =B=A + 1 • r(A,C) =A C • r(B,D) =DB • r(A,D) = A D • r(B,C) = |B-C| 1 • r(C,D) = C D
dC = { 1, 2, 3} dD = { 1, 3, 4} Consistencia de nodos: • O: consistencia-1 • (solo 1 variable involucrada) • Las restricciones unarias son eliminadas por reducción del dominio: • r(C) =C 4 • r(D) =D 2
{ 1, 2, 3, 4} { 1, 2, 3, 4} B=A + 1 A B A D A C DB |B-C| 1 C D C D { 1, 2, 3} { 1, 3, 4} Red de restricciones:
Relajación débil Forward Check Lookahead Check
{ 1, 2, 3, 4} {2} B=A + 1 A B A D A C DB |B-C| 1 C D C D { 1, 2, 3} { 1, 3, 4} Forward Check: • Asuma que fijamos el valor de 1 variable zi: zi = a • Forward Check(zi) = • activar cada restricción r(zi, zj) o r(zj, zi) una vez para remover los valores inconsistentes con zi = a • Nuestro ejemplo: asumir A = 2 :
{ 1, 2, 3, 4} {2} B=A + 1 A B A D A C DB |B-C| 1 C D C D { 1, 2, 3} { 1, 3, 4} Forward check: consistencia débil • Requiere que 1 variable ya haya obtenido un valor • sugiere el uso en combinación con backtracking • No produce un estado consistente • no se realiza toda la relajación
Look ahead check Método de relajación más fuerte (débil)
{ 1, 2, 3, 4} { 1, 2, 3, 4} B=A + 1 A B A D A C DB |B-C| 1 C D C D { 1, 2, 3} { 1, 3, 4} Look ahead Check: • Look Ahead Check = • activar cada restricción r(zi, zj) exactamente una vez para remover los valores inconsistentes de los dominios Di y Dj. • Nuestro ejemplo:
{ 2, 3, 4} { 1, 2, 3} B=A + 1 A B A D A C DB |B-C| 1 C D C D { 1, 2, 3} { 1, 3, 4} Ejemplo (continuac.): • Las otras 3 restricciones:
{ 3, 4} { 1, 2, 3} B=A + 1 A B A D A C DB |B-C| 1 C D C D { 1, 2} { 1, 3} Look ahead: resultados finales: • Aun no produce un estado consistente • no se realiza toda la relajación • El resultado puede depender del orden en el cual se procesan las restricciones. • La remoción de algunos valores inicialmente puede permitir hallar otros inconsistentes.
Técnicas de consistencia de arco Técnicas que reducen los dominios a estados consistentes para cada restricción (o arco). También llamadas: técnicas consistencia-2
AC 1 (Mackworth) AC1: Repeat Ocurrió_borrado:= falso ; Look ahead check; If algún valor fue removido de algún dominio then Ocurrió_borrado:= verdad Until(notOcurrió_borrado) • Fuerza a que Look ahead alcance un estado consistente • por reactivación de Look ahead hasta consistencia
{ 3, 4} { 1, 2, 3, 4} { 1, 2, 3, 4} { 1, 2, 3} B=A + 1 B=A + 1 A B A B A D A D A C A C DB DB |B-C| 1 |B-C| 1 C D C D C D C D { 1, 2} { 1, 2, 3} { 1, 3} { 1, 3, 4} El ejemplo (1): • Primera pasada (== Look ahead check): • Ocurrió_borrado:= verdad
{ 3, 4} { 3, 4} { 1, 2, 3} { 2, 3} B=A + 1 B=A + 1 A A B B A D A D A C A C DB DB |B-C| 1 |B-C| 1 C C D D C D C D { 1, 2} { 1, 2} { 1, 3} { 1, 3} El ejemplo (2): • Segunda pasada: • Ocurrió_borrado:= verdad
{ 3, 4} { 2, 3} B=A + 1 A B A D A C DB |B-C| 1 C D C D { 1, 2} { 1, 3} El ejemplo (3): • Tercera pasada: • Ocurrió_borrado:= falso • Resultado: A (2 o 3) , B (3 o 4), C (1 o 2), D (1 o 3) • Consistente, pero ¡¡ NO REALMENTE UNA SOLUCIÓN !!
Whilenot vacia(COLA) DO If algún valor fué removido de Dx (o Dy) thenagregar todas las otras restricciones que involucran x (o y) a COLA; AC-3 (Mackworth)Consistencia de arco más eficiente: AC3: COLA:= {todas las restricciones en el problema} Remover r(x,y) de COLA; Remover todos los valores inconsistentes de los dominios Dx y Dy con respecto a r(x,y); End-While
{ 1, 2, 3, 4} { 1, 2, 3, 4} B=A + 1 A B A D A C DB |B-C| 1 Todo ya enCOLA ! C D C D { 1, 2, 3} { 1, 3, 4} El ejemplo (1): • COLA = {r(A,B), r(A,C), r(A,D), r(B,C), r(B,D), r(C,D)}: • Para agregar: r(A,C), r(A,D), r(B,C), r(B,D) • COLA = {r(A,C), r(A,D), r(B,C), r(B,D), r(C,D)}
{ 2, 3, 4} { 1, 2, 3} B=A + 1 A B A D A C DB |B-C| 1 C D C D { 1, 2, 3} { 1, 3, 4} El ejemplo (2): • COLA = {r(A,C), r(A,D), r(B,C), r(B,D), r(C,D)}: • COLA = {r(B,C), r(B,D), r(C,D)}
{ 2, 3, 4} { 1, 2, 3} B=A + 1 A B A D A C DB |B-C| 1 C D C D { 1, 2, 3} { 1, 3, 4} El ejemplo (3): • COLA = {r(B,C), r(B,D), r(C,D)}: • Para agregar: r(A,B), r(A,C), r(B,D), r(C,D) • COLA = {r(B,D), r(C,D), r(A,B), r(A,C)}
{ 3, 4} { 1, 2, 3} B=A + 1 A B A D A C DB |B-C| 1 C D C D { 1, 2} { 1, 3, 4} El ejemplo (4): • COLA = {r(B,D), r(C,D), r(A,B), r(A,C)}: • Para agregar: r(A,D), r(C,D) • COLA = {r(C,D), r(A,B), r(A,C), r(A,D)}
{ 3, 4} { 1, 2, 3} B=A + 1 A B A D A C DB |B-C| 1 C D C D { 1, 2} { 1, 3} El ejemplo (5): • COLA = {r(C,D), r(A,B), r(A,C), r(A,D)}: • Para agregar: r(A,C), r(A,D) • COLA = {r(A,C), r(A,D)}
{ 3, 4} { 2, 3} B=A + 1 A B A D A C DB |B-C| 1 C D C D { 1, 2} { 1, 3} El ejemplo (6): • COLA = {r(A,C), r(A,D)}: • COLA = vacía ¡ PARAR !
Comparación: • Igual resultado: completa consistencia de arco: • A = {2,3}, B = {3,4}, C= {1,2}, D = {1,3} • Eficiencia: • AC1: • 3 veces 6 verificaciones = 18 • AC3: • 9 verificacíones de restricciones
{ 1, 2, 3, 4} { 1, 2, 3, 4} B=A + 1 A B A D A C DB |B-C| 1 C D C D { 1, 2, 3} { 1, 3, 4} Consistencia-k: • consistencia-1 (consistencia de nodo): • restricciones unarias (en 1 variable) son consistentes • consistencia-2 (consistencia de arco): • restricciones binarias (en 2 variables) son consistentes • consistencia-3: • todas las restricc. que involucran 3 variables son consist. Ejemplo: • Un valor se mantiene en el dominio si hay valores consistentes en los dominios de las otras 2 variables (para todas las restricciones que las conectan)
Practicidad de la consistencia k: • Verificar la consistencia-k para k 2 es muy dificil de realizar eficientemente !! • Ejemplo: consistencia-4 para el enigma de las 4 casas es equivalente a hallar soluciones del problema original.
Procesamiento híbrido de restricciones Combina el poder de la búsqueda exhaustiva (backtrack) con (relajación) poda
Forward checking Backtracking combinado con Forward Check
Forward checking: Forward Checking: ExecuteStandard Backtracking BUT After cada asignación de un valor a una variable ziDO Forward Check(zi)
A 1 3 2 {3} {2} {1} {1,2,3,4} {1,2,3,4} {1,2,3,4} B=A+1 B=A+1 A A A B B B AC AC B=A+1 AD AD AC AD C C C D D D {1,3,4} {1,3,4} {1,3,4} {1,2,3} {1,2,3} {1,2,3} B B B 3 4 2 {2} {3} A B |B-C|1 D B C D {3} {1} {2} {4} {1,3,4} {1,3} A A B B |B-C|1 |B-C|1 C C 1 2 D B D B C C D D 1 {1,4} {3,4} {2,3} {1,2} {3} {3} {4} {4} {4} {3} A B A A B B CD CD CD D C {1} {1} D D C C {2} {1} {1} {1} Funcionamiento de forward checking falla falla falla exito
Lookahead checking Backtracking combinado con Look ahead check
After cada asignación de un valor a alguna variable DO Lookahead checking: Lookahead Checking: Look Ahead Check ; ExecuteStandard Backtracking BUT Look Ahead Check
{1,2,3,4} {1,2,3,4} B=A+1 A B AC AD D B |B-C|1 {3} {3,4} C CD D B=A+1 {1,2,3} {1,3,4} A B AC AD D B A |B-C|1 1 3 C CD D {1,2} {1,3} {1} {3,4} 2 B=A+1 B A B 4 C D {3} {4} A B |B-C|1 {1,3} {1,2} D B C CD D {2} {1} C {2} {3,4} 2 B=A+1 A B AC {3} {4} AD D B A B |B-C|1 C CD D {1,2} {1,3} C CD D {2} {1} Funcionamiento de lookahead checking falla falla exito
¿Cuál es mejor? • Forward checking: • hace menos verificación de consistencia • tiene mas ramificación • más cercano a backtracking • Lookahead checking: • lleva más tiempo con consistencia • intenta menos valor alternativos • Usualmente: forward checking es la mejor solución de compromiso • Para problemas MUY restringidos: • Lookahead checking es necesario para podar más
Aplicaciones: • Todos los problemas de búsqueda combinatorios • Problemas de distribución de tareas: • Ej.: redistribución de horario de trenes cuando ha ocurrido algun problema en las vías. • Problemas de distribución de trabajos: • Ej.: computar turnos de trabajo, dadas varias res- tricciones de expertise y preferencias personales • Planeamiento de producción: • Ej.: planificar el flujo óptimo de trabajo • Problemas de carga: • Ej.: optimizar el espacio en un camión dados varios tipos de cargas
4*X - 3*Y Z + 2 ¡ SI ! X3 - 3*Y Z2 + 2 ¡ NO ! Técnicas alternativas • Programación lineal • técnicas numéricas para la resolución de sistemas de ecuaciones lineales (e inecuaciones) + problemas de optimización • Ej.: algoritmo simplex • Funciona MUY bien para restricciones ‘lineales’ • Funciona, pero no MUY bien, para problemas discretos • En tales casos: Procesam. de Restricc. es una mejor opción • También: para problemas de restricciones en datos no-numericos !