Está en la página 1de 66

Inteligencia Artificial I

Curso 20052006

Tema 5: Problemas de satisfacci on de restricciones


Jos e A. Alonso Jim enez Francisco J. Mart n Mateos Jos e L. Ruiz Reina

Dpto. de Ciencias de la Computaci on e Inteligencia Articial

Universidad de Sevilla

IA-I 20052006

Cc Ia

Problemas de satisfacci on de restricciones

5.1

Problema de Satisfacci on de Restricciones


x

Un problema de satisfacci on de restricciones (PSR) viene denido por los siguientes elementos:
u u

Un conjunto nito de variables X1 , . . . , Xn Un conjunto nito de dominios Di asociados a cada variable Xi , especicando los posibles valores que puede tomar Un conjunto nito de restricciones C1, . . . , Cm, que denen una serie de propiedades que deben vericar los valores asignados a las variables

Una soluci on al problema es una asignaci on de valores a las variables {X1 = v1, . . . , Xn = vn} tal que vi Di y se verican las restricciones Esta formulaci on permite una representaci on simple del problema, y el uso de heur sticas de prop osito general, independientes del problema

IA-I 20052006

Cc Ia

Problemas de satisfacci on de restricciones

5.2

Tipos de Problemas de Satisfacci on de Restricciones


x

Clasicaci on seg un el tipo de restricciones:


u u

Restricciones de obligaci on (hard constraints). Restricciones de preferencia (soft constraints).

Clasicaci on seg un los dominios:


u u

Dominios discretos (nitos o innitos). Dominios continuos.

Clasicaci on seg un el n umero de variables implicadas en las restricciones:


u u

Restricciones binarias. Restricciones m ultiples.

IA-I 20052006

Cc Ia

Problemas de satisfacci on de restricciones

5.3

Ejemplo: N reinas
x

Situar N reinas en un tablero de ajedrez de tama no N N de forma que no se den jaque m utuamente. Variables: V1, . . . , VN Dominios: Di = {1, . . . , N } Restricciones:
u u

R R

Jaque horizontal: Vi = Vj Jaque diagonal: |Vi Vj | = |i j |

V1 = 1, V2 = 3

Problema con dominios nitos y restricciones binarias (de obligaci on).

IA-I 20052006

Cc Ia

Problemas de satisfacci on de restricciones

5.4

Ejemplo: coloreado de mapas


x

Usando tres colores (rojo,azul,verde) colorear el mapa de Andaluc a:


CO JA

SE HU GR AL MA

CA

Variables: Huelva, Granada, Almeria

Cadiz ,

Sevilla,

Cordoba,

M alaga,

J aen,

Dominios: {rojo, azul, verde} Restricciones: P = Q, para cada par de provincias vecinas P y Q Problema con dominios nitos y restricciones binarias (de obligaci on).
Cc Ia
Problemas de satisfacci on de restricciones 5.5

IA-I 20052006

Ejemplo: satisfacibilidad proposicional


x

Problema SAT (para cl ausulas):


u

Dado un conjunto de variables proposicionales L = {p1 , . . . , pn } y un conjunto de cl asusulas proposicionales {C1 , . . . , Cm} formadas con los s mbolos de L, determinar si existe una asignaci on de valores de verdad a los simbolos de L de manera que se satisfagan todan las cl ausulas

Variables: {p1, . . . , pn} Dominios: {T , F } (booleanos) Restricciones: {C1, . . . , Cm} Problema con dominios nitos y restricciones binarias (de obligaci on). Problema NP-completo
u

Por tanto, en el peor caso, no es posible resolver PSRs con dominios nitos en tiempo polinomial (si P = N P ).
Cc Ia
Problemas de satisfacci on de restricciones 5.6

IA-I 20052006

Ejemplo: criptoaritm etica


x

Asignar valores distintos del 1 al 8 a cada letra para que la ecuaci on indicada sea cierta: Variables: I, D, E, A, M, N, T, C1, C2, C3 Dominios: {1, . . . , 8} para I, D, E, A, M, N, T y {0, 1} para C1, C2, C3 Restricciones:
u u u u

Primera suma: 2 A = (10 C3) + E Segunda suma: (2 E ) + C3 = (10 C2) + T Tercera suma: (2 D ) + C2 = (10 C1) + N Cuarta suma: (2 I ) + C1 = (10 M ) + E

(C1 C2 C3)

I D E A + I D E A M E N T E

Problema con dominios nitos y restricciones m ultiples (de obligaci on).

IA-I 20052006

Cc Ia

Problemas de satisfacci on de restricciones

5.7

Ejemplo: asignaci on de tareas


x

Asignar tareas a empleados de acuerdo con su capacidad para desarrollarlas: Variables: Ei Dominios: Di = {T1, . . . , Tn} Restricciones:
u x

Tabla de capacidades (Ci):


E1 E2 E3 T1 1 3 2 T2 3 2 3 T3 2 1 1

Obtener la mejor

n i=1 Ci

Problema con dominios nitos y restricciones m ultiples (de preferencia).

IA-I 20052006

Cc Ia

Problemas de satisfacci on de restricciones

5.8

Ejemplo: planicaci on de corte


x

Encontrar la manera de situar patrones de corte en una pieza de cart on. Variables: P1, P2, P3, P4 Dominios: Coordenadas en el plano. Restricciones:
u

Las piezas no deben superponerse.

Problema con dominios continuos y restricciones binarias (de obligaci on).

IA-I 20052006

Cc Ia

Problemas de satisfacci on de restricciones

5.9

Problemas de Satisfacci on de Restricciones


x

En este tema, trataremos PSRs:


u u

Con dominios nitos Con restricciones binarias de obligaci on

Todo problema con restricciones m ultiples se puede reducir a uno equivalente con restricciones binarias Representaci on en forma de grafo de un PSR:
SE=CO

CO

CO=JA

JA
JA=GR

HU=SE

SE
SE=MA CA=SE CO=MA

CO=GR

HU
HU=CA

MA
CA=MA

MA=GR

GR

GR=AL

AL

CA

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.10

Implementaci on de la representaci on de un PSR


x

Variables: estructura con nombre + dominio


u

Funciones de acceso: psr-var-nombre y psr-var-dominio

La variable global *variables* contiene a todas las variables del PSR Restricciones: estructura con los nombres de las variables involucradas + funci on
u

Funciones de acceso: psr-restr-variables y psr-restr-funcion

La variable global *restricciones* contiene todas las restricciones del PSR

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.11

PSR como problema de espacio de estados


x

Estados:
u

Asignaciones parciales (y consistentes con las restricciones) de valores a variables: {Xi1 = vi1 , . . . , Xik = vik } Estado inicial: {} Estados nales: asignaciones completas

u u

Operadores:
u u

Asignar un valor (de su dominio) a una variable no asignada en el estado Aplicabilidad: la asignaci on resultante tiene que ser consistente

Soluciones mediante b usqueda en profundidad


u

Puesto que las soluciones est an a una profundidad ja (igual al n umero de variables), profundidad es preferible a anchura

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.12

Simplicaciones en la b usqueda
x

El orden en el que se aplican los operadores es irrelevante para la soluci on nal (conmutatividad)
u

Por tanto, los operadores puden reducirse a considerar las posibles asignaciones a una u nica variable no asignada

El camino no es importante
u u

No necesitamos la estructura de nodo No necesitamos una representaci on expl cita para los operadores

No es posible repetir un estado durante la b usqueda:


u u

No es necesario realizar comprobaciones para evitar repeticiones La lista de CERRADOS es superua

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.13

B usqueda en profundidad para PSR: implementaci on


x x

Estados: representados como listas de asociaci on Funci on que elige la nueva variable a asignar (de entre las no asignadas):
u

SELECCIONA-VARIABLE(ESTADO)

Funci on que ordena los valores a asignar:


u

ORDENA-VALORES(DOMINIO)

Funci on que calcula los sucesores:


FUNCION PSR-SUCESORES(ESTADO) 1. Hacer VARIABLE igual a SELECCIONA-VARIABLE(ESTADO) Hacer DOMINIO-ORD igual ORDENA-VALORES(PSR-VAR-DOMINIO(ESTADO)) Hacer SUCESORES igual a vac o 2. Para cada VALOR en DOMINIO-ORD, Hacer NUEVO-ESTADO igual a la asignaci on obtenida ampliando ESTADO con VARIABLE=VALOR Si NUEVO-ESTADO es consistente con *RESTRICCIONES*, a~ nadir NUEVO-ESTADO a SUCESORES 3. Devolver SUCESORES

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.14

B usqueda en profundidad para PSR: implementaci on


FUNCION PSR-BUSQUEDA-EN-PROFUNDIDAD() 1. Hacer ABIERTOS igual a la lista formada por la asignaci on vac a 2. Mientras que ABIERTOS no est e vac a, 2.1 Hacer ACTUAL el primer estado de ABIERTOS 2.2 Hacer ABIERTOS el resto de ABIERTOS 2.3 Si ACTUAL es una asignaci on completa 2.4.1 devolver ACTUAL y terminar. 2.4.2 en caso contrario, 2.4.2.1 Hacer NUEVOS-SUCESORES igual a PSR-SUCESORES(ACTUAL) 2.4.2.2 Hacer ABIERTOS igual al resultado de incluir NUEVOS-SUCESORES al principio de ABIERTOS 3. Devolver FALLO.

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.15

B usqueda en profundidad para PSR: ejemplos


x

8 reinas:
> > > > > (load "psr-alg-comun.lsp") (load "psr-busqueda-en-profundidad") (load "psr-n-reinas") (n-reinas 8) (psr-busqueda-en-profundidad) ((8 . 4) (7 . 2) (6 . 7) (5 . 3) (4 . 6) (3 . 8) (2 . 5) (1 . 1))

Coloreado del mapa:


> (load "psr-mapa-andalucia") > (psr-busqueda-en-profundidad) ((ALMERIA . AZUL) (GRANADA . ROJO) (JAEN . AZUL) (CORDOBA . VERDE) (MALAGA . AZUL) (CADIZ . VERDE) (SEVILLA . ROJO) (HUELVA . AZUL))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.16

Algoritmo de backtracking
x

El algoritmo de b usqueda en profundidad anterior se suele llamar algoritmo de backtracking


u

Usualmente, se presenta de manera recursiva:

FUNCION PSR-BACKTRACKING() Devolver PSR-BACKTRACKING-REC({}) FUNCION PSR-BACKTRACKING-REC(ESTADO) 1. Si ESTADO es una asignaci on completa, devolver ESTADO y terminar 2. Hacer VARIABLE igual a SELECCIONA-VARIABLE(ESTADO) Hacer DOMINIO-ORD igual ORDENA-VALORES(PSR-VAR-DOMINIO(ESTADO)) 3. Para cada VALOR en DOMINIO-ORD, 3.1 Hacer NUEVO-ESTADO igual a la asignaci on obtenida ampliando ESTADO con VARIABLE=VALOR 3.2 Si NUEVO-ESTADO es consistente con *RESTRICCIONES*, hacer: 3.2.1 RESULTADO igual PSR-BACKTRCKING-REC(NUEVO-ESTADO) 3.2.2 Si RESULTADO no es FALLO, devolver RESULTADO y terminar 3. Devolver FALLO
IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.17

Heur sticas en el algoritmo de backtracking


x

En principio, el algoritmo de backtracking realiza una b usqueda ciega


u

B usqueda no informada, ineciente en la pr actica

Sin embargo, es posible dotar al algoritmo de cierta heur stica que mejora considerablemente su rendimiento
u

Estas heur sticas son de prop osito general Independientes del problema Sacan partido de la estructura especial de los PSR

u x

Posibles mejoras heur sticas


u

Selecci on de nueva variable a asignar Orden de asignaci on de valores a la variable elegida Propagaci on de informaci on a trav es de las restricciones Vuelta atr as inteligente en caso de fallo
CcIa
Problemas de satisfacci on de restricciones 5.18

IA-I 20052006

Selecci on de variables y ordenaci on de valores


x

Denici on adecuada de la funci on SELECCIONA-VARIABLE(ESTADO)


u

Estrategia poco eciente (no informada): tomar la primera variable no asignada

Heur stica MRV:


seleccionar la variable con el menor n umero de valores en su dominio consistente con la asignaci on parcial actual u Ejemplo:
u

Con la asignaci on (parcial) {Huelva=Rojo, Sevilla=Azul, Malaga=Rojo}, la siguiente variable a asignar ser a Cadiz o Cordoba (en ambos casos s olo hay un valor en sus dominios consistente con la asignaci on)
x

Otra heur stica: mayor n umero de restricciones para la variable (grado)


u

Usada para desempatar MRV

Ordenaci on de valores a asignar (funci on ORDENA-VALORES(DOMINIO))


u

Considerar antes los que eliminen menos posibles valores de las variables por asignar
CcIa
Problemas de satisfacci on de restricciones 5.19

IA-I 20052006

Comprobaci on hacia adelante (forward checking)


x

Para cada estado, mantener cierta informaci on sobre los posibles valores para las variables que quedan por asignar:
u

Cada vez que se asigna un nuevo valor a una variable, quitar del dominio de las variables por asignar, aquellos valores que no sean consistentes con el nuevo valor asignado

Ejemplo (seleccionando variables en orden alfab etico):


{AL=R} {AL=R,CA=R} {AL=R,CA=R,CO=A} {AL=R,CA=R,CO=A,GR=V} --> --> --> --> eliminar eliminar eliminar eliminar R R A V del dominio de GR de los dominios de HU, SE y MA de los dominios de MA, SE y JA de los dominios de JA y MA

En este momento, MA no tiene ning un valor posible. Por tanto, no es necesario seguir explorando en el arbol.
u

Se ha detectado inconsistencia sin necesidad de asignar valores a Huelva y Jaen, y para cualquier extensi on de la asignaci on parcial construida hasta el momento
CcIa
Problemas de satisfacci on de restricciones 5.20

IA-I 20052006

Ejemplo: N-reinas
x

Backtracking+forward checking en 4-reinas

R R R R

R R

R R R R

R R R R R

R R R R

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.21

Propagaci on de restricciones
x

Cuestiones t ecnicas sobre la comprobaci on hacia adelante:


u

Cada nodo del arbol debe contener el estado junto la lista de valores posibles en las variables por asignar Muy f acil de usar en conjunci on con la heur stica MRV

La comprobaci on hacia adelante es un caso particular de propagaci on de restricciones:


u

Propagar las implicaciones de las restricciones sobre una variable sobre otras variables existen t ecnicas m as completas para propagar restricciones que la comprobaci on hacia adelante la propagaci on debe ser r apida: completitud vs rapidez

La consistencia de arcos proporciona un m etodo con un buen compromiso entre eciencia y completitud
CcIa
Problemas de satisfacci on de restricciones 5.22

IA-I 20052006

Consistencia de arcos
x

En un PSR, por arco entendemos un arco dirigido en el grafo que lo representa


u

Equivalentemente, un arco es una restricci on en la que hay una variable distinguida Notaci on: B > E , CO = SE , |Vi Vj | = |i j |

u x

Arco consistente respecto a un conjunto de dominios asociados a un conjunto de variables:


u

Para cualquier valor del dominio asociado a la variable distinguida del arco, existen valores en los dominios de las restantes variables que satisfacen la restricci on del arco Ejemplo: si SE y CO tienen ambas asignadas como dominio {rojo, verde}, el arco CO = SE es consistente Ejemplo: si SE tiene como dominio {rojo} y CO tiene como dominio {rojo, verde}, el arco CO = SE no es consistente En este u ltimo caso, el arco puede hacerse consistente eliminando rojo del dominio de CO
CcIa
Problemas de satisfacci on de restricciones 5.23

IA-I 20052006

Algoritmo de consistencia de arcos AC-3 (idea intuitiva)


x

Objetivo:
u

a partir de los dominios iniciales de las variables devolver un conjunto de dominios actualizado tal que todos los arcos del problema sean consistentes Si un arco es inconsistente, podemos hacerlo consistente eliminando del dominio de la variable distinguida aquellos valores para los que no existen valores en los dominios de las restantes variables que satisfagan la restricci on

Actualizaci on de dominios:
u

Revisi on de arcos:
u

si el dominio de una variable se actualiza, es necesario revisar la consistencia de los arcos en los que aparece la variable como variable no distinguida

Criterio de parada:
u

Todos los arcos son consistentes respecto a los dominios de las variables O alg un dominio queda vac o (inconsistencia)
CcIa
Problemas de satisfacci on de restricciones 5.24

IA-I 20052006

Consistencia de arcos (ejemplo)


x

Planicaci on de las acciones de un robot (Poole, pag. 149): Un robot necesita planicar cinco actividades (A, B, C, D y E), donde cada actividad ha de comenzar en un momento en el tiempo (1, 2, 3, o 4) y dura exactamente una u nidad de tiempo. Restricciones:
u

La actividad B no puede realizarse en el momento n umero 3. La actividad C no puede realizarse en el momento n umero 2. Las actividades A y B no pueden realizarse simult aneamente. Las actividades B y C no pueden realizarse simult aneamente. La actividad C ha de realizarse antes de la D. Las actividades B y D no pueden realizarse simult aneamente. Las actividades A y D han de realizarse simult aneamente. La actividad E ha de ser la u ltima.
CcIa
Problemas de satisfacci on de restricciones 5.25

IA-I 20052006

Consistencia de arcos (ejemplo)


x

Representaci on como grafo:


A A=B 1 2 3 4 B 1 2 4

A=D

B=D B=C

1 2 3 4 E<D E

C C<D E<C 1 2 3 4

1 3 4

E<A

E<B

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.26

Consistencia de arcos (ejemplo)


x

Seguimiento del ejemplo:


Variables y dominios Arcos pendientes de revisar (A 1 2 3 4) (B 1 2 4) (C 1 3 4) A = B , A = B , B = C , B = C , C < D, C < D, B = D, B = D, (D 1 2 3 4) (E 1 2 3 4) A = D, A = D , A > E , A > E , B > E , B > E , C > E , C > E , D > E, D > E (A 1 2 3 4) (B 1 2 4) (C 1 3) C < D, B = D, B = D, A = D, A = D, A > E , A > E , B > E , (D 1 2 3 4) (E 1 2 3 4) B > E, C > E, C > E, D > E, D > E, B = C (A 1 2 3 4) (B 1 2 4) (C 1 3) B = D, B = D, A = D, A = D , A > E , A > E , B > E , B > E , (D 2 3 4) (E 1 2 3 4) C > E, C > E, D > E, D > E, B = C, C < D (A 2 3 4) (B 1 2 4) (C 1 3) A = D, A > E , A > E , B > E , B > E , C > E , C > E , D > E , (D 2 3 4) (E 1 2 3 4) D > E , B = C , C < D, A = B (A 2 3 4) (B 1 2 4) (C 1 3) B > E , B > E , C > E , C > E , D > E , D > E , B = C , C < D, (D 2 3 4) (E 1 2 3) A = B, A > E (A 2 3 4) (B 2 4) (C 1 3) B > E , C > E , C > E , D > E , D > E , B = C , C < D, A = B , (D 2 3 4) (E 1 2 3) A > E, A = B, B = C , B = D (A 2 3 4) (B 2 4) (C 3) C > E , D > E , D > E , B = C , C < D, A = B , A > E , A = B , (D 2 3 4) (E 1 2 3) B = C , B = D, C < D

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.27

Consistencia de arcos (ejemplo)


x

Seguimiento del ejemplo:


Variables y dominios (A 2 3 4) (B 2 4) (C 3) (D 2 3 4) (E 1 2) (A 2 3 4) (B 2 4) (C 3) (D 4) (E 1 2) (A 2 3 4) (B 2) (C 3) (D 4) (E 1 2) (A 4) (B 2) (C 3) (D 4) (E 1 2) (A 4) (B 2) (C 3) (D 4) (E 1) (A 4) (B 2) (C 3) (D 4) (E 1) Arcos pendientes de revisar D > E , D > E , B = C , C < D, A = B , A > E , A = B , B = C , B = D, C < D , B > E , C > E B > E , C > E , C < D, B = D, A = D, D > E A = D, D > E , A = B , B = C , B = D, B > E D > E , A = B , B = C , B = D, B > E , A = B , A = D , A > E A = B , A = D, A > E , A > E , B > E , C > E , D > E

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.28

Implementaci on del algoritmo AC-3


x

Arcos: estructura con los campos variable y restricci on


u

Funciones de acceso: arco-variable y arco-restriccion

Generaci on de todos los arcos de un PSR:


FUNCION ARCOS() 1. Hacer ARC igual a vac o 2. Para cada RESTRICCION es *RESTRICCIONES* 2.1 Para cada VARIABLE en PSR-RESTR-VARIABLES(RESTRICCION) A~ nadir a ARC el arco formado por VARIABLE+RESTRICCION 3. Devolver ARC

C alculo de dominio actualizado:


FUNCION ACTUALIZA-DOMINIO(VARIABLE,RESTRICCION,VARIABLES) 1. Hacer DOMINIO-ACTUAL igual al dominio de VARIABLE en VARIABLES Hacer NUEVO-DOMINIO igual a vac o 2. Para cada VALOR en DOMINIO-ACTUAL hacer 2.1 Si para ese VALOR de VARIABLE existe una asignaci on a las restantes variables de RESTRICCION que satisfaga RESTRICCION, incluir VALOR en NUEVO-DOMINIO 3. Devolver NUEVO-DOMINIO

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.29

Implementaci on del algoritmo AC-3


x

Algoritmo AC-3
u u

Entrada: una lista de variables+dominios Salida: la lista de entrada, con los dominios actualizados (destructivamente) de manera que todos los arcos del PSR son consistentes

FUNCION AC-3(VARIABLES) 1. Hacer RED igual a ARCOS() 2. Mientras RED no sea vac o 2.1 Hacer ACTUAL el primero de RED y RED el resto de RED 2.2 Hacer VARIABLE igual a ARCO-VARIABLE(ARCO) y RESTRICCION igual ARCO-RESTRICCION(ARCO) 2.3 Hacer VIEJO-DOMINIO igual al dominio de VARIABLE en VARIABLES 2.4 Hacer NUEVO-DOMINIO igual a ACTUALIZA-DOMINIO(VARIABLE,RESTRICCION,VARIABLES) 2.5 Si NUEVO-DOMINIO y VIEJO-DOMINIO son distintos, entonces 2.5.1 Actualizar el dominio de VARIABLE en VARIABLES con NUEVO-DOMINIO 2.5.2 Incluir en RED todos los arcos de ARCOS() en los que aparezca VARIABLE y esta NO sea la variable distinguida del arco 2.6 Devolver VARIABLES
IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.30

Propiedades de AC-3
x

Complejidad (en el caso de restricciones binarias)


u

n: n umero de variables d: m aximo n umero de valores de un dominio Complejidad en tiempo: O (n2d3 ) (polinomial)

Por tanto, s olo con AC-3 no es posible resolver un PSR


u

Pero puede combinarse con alg un tipo de b usqueda

Dos aproximaciones:
u

Incorporar en el algoritmo de backtracking, como un paso de propagaci on de restricciones despu es de cada asignaci on Intercalar AC-3 con b usqueda

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.31

B usqueda de soluciones mediante consistencia de arcos


x

Resultado tras aplicar AC-3:


u

Existe un dominio vac o: no hay soluci on. Todos los dominios son unitarios: hay una soluci on. No hay dominios vac os y al menos uno no es unitario: soluciones?.

Idea: romper un dominio no vac o en subdominios y aplicar AC-3 a los estados resultantes
u

Esto se puede hacer de manera sistem atica (b usqueda) Hasta que se detecta inconsistencia en todas las alternativas (no hay soluci on) Hasta que se obtiene un estado con todos los dominios unitarios (soluci on)

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.32

B usqueda de soluciones mediante consistencia de arcos


FUNCION BUSQUEDA-AC3() 1. Hacer ABIERTOS igual a una lista cuyo unico elemento es una copia de *VARIABLES* 2. Mientras que ABIERTOS no est e vac a, 2.1 Hacer ACTUAL igual a AC3(PRIMERO(ABIERTOS)) 2.2 Hacer ABIERTOS el resto de ABIERTOS 2.3 Si no existen dominios vac os en ACTUAL, 2.3.1 Si ACTUAL tiene todos los dominios unitarios, devolver ACTUAL y terminar 2.3.2 Si no, calcular los sucesores de ACTUAL y a~ nadirlos a la lista de ABIERTOS 3. Devolver FALLO.
x

Detalles a concretar de la implementaci on:


u

Sucesores: escoger un dominio no unitario y dividirlo de alguna manera Gesti on de la cola de abiertos: anchura o profundidad
CcIa
Problemas de satisfacci on de restricciones 5.33

IA-I 20052006

Consistencia de arcos
x

Ejemplo de uso: N-reinas

> (load "psr-alg-comun.lsp") T > (load "psr-n-reinas.lsp") T > (load "psr-alg-arcos.lsp") T > (n-reinas 10) *RESTRICCIONES* > (time (busqueda-ac3)) Real time: 7.330538 sec. Run time: 7.06 sec. Space: 5204128 Bytes GC: 10, GC time: 0.17 sec. (#S(VARIABLE-PSR :NOMBRE 1 :DOMINIO (1)) #S(VARIABLE-PSR :NOMBRE 2 :DOMINIO (3)) #S(VARIABLE-PSR :NOMBRE 3 :DOMINIO (6)) #S(VARIABLE-PSR :NOMBRE 4 :DOMINIO (8)) #S(VARIABLE-PSR :NOMBRE 5 :DOMINIO (10)) #S(VARIABLE-PSR :NOMBRE 6 :DOMINIO (5)) #S(VARIABLE-PSR :NOMBRE 7 :DOMINIO (9)) #S(VARIABLE-PSR :NOMBRE 8 :DOMINIO (2)) #S(VARIABLE-PSR :NOMBRE 9 :DOMINIO (4)) #S(VARIABLE-PSR :NOMBRE 10 :DOMINIO (7)) )

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.34

Algoritmos de mejora iterativa para PSRs


x

Planteamiento como un problema de b usqueda local:


u

Estados: asignaciones completas (consistentes o inconsistentes) Estado inicial escogido aleatoriamente Estados nales: soluciones al PSR Generaci on de sucesor: elegir una variable y cambiar el valor que tiene asignado (usando cierta heur stica y aleatoriedad)

Generaci on de sucesor mediante la estrategia de m nimos conictos


u

Variable elegida: aquella (distinta de la u ltima modicada) que participa en m as restricciones NO satisfechas en el estado (los empates se deshacen aleatoriamente) Valor elegido: aquel valor (distinto del que ten a) que produce el menor n umero de restricciones incumplidas (los empates se deshacen aleatoriamente)

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.35

Algoritmo de reparaci on heur stica (m nimos conictos)


x

Estructura nodo-minc: asignaci on + u ltima variable modicada Pseudoc odigo:


FUNCION MIN-CONFLICTOS(MAX-ITERACIONES) 1. Hacer ACTUAL igual a un nodo con una asignaci on generada aleatoriamente. 2. Para I desde 1 hasta MAX-ITERACIONES hacer 2.1 Si la asignaci on de ACTUAL es una soluci on, devolverla y terminar. 2.2 Hacer VARIABLE igual a una variable (distinta de la ultima modificada) escogida aleatoriamente de entre aquellas que participan en el mayor n umero de restricciones incumplidas. 2.3 Hacer SUCESORES igual a la lista de nodos obtenidos cambiando en la asignaci on de ACTUAL el valor de VARIABLE por cada uno de los posibles valores del dominio de VARIABLE en *VARIABLES* (excepto el correspondiente al valor que ten a en ACTUAL) 2.4 Hacer ACTUAL el nodo de SUCESORES escogido aleatoriamente de entre aquellos cuya asignaci on incumple el menor n umero de restricciones 3. Devolver FALLO

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.36

Reparaci on heur stica: ejemplos


x

Ejemplo de uso: N-reinas

> (load "psr-alg-comun.lsp") T > (load "psr-n-reinas.lsp") T > (load "psr-alg-minc.lsp") T > (n-reinas 10) *RESTRICCIONES* > (time (reparacion-heuristica-minc :iteraciones 20)) Real time: 2.155908 sec. Run time: 2.15 sec. Space: 2758404 Bytes GC: 6, GC time: 0.07 sec. (12 (#S(VARIABLE-PSR :NOMBRE 1 :DOMINIO (6)) #S(VARIABLE-PSR :NOMBRE 2 :DOMINIO (8)) #S(VARIABLE-PSR :NOMBRE 3 :DOMINIO (1)) #S(VARIABLE-PSR :NOMBRE 4 :DOMINIO (4)) #S(VARIABLE-PSR :NOMBRE 5 :DOMINIO (7)) #S(VARIABLE-PSR :NOMBRE 6 :DOMINIO (10)) #S(VARIABLE-PSR :NOMBRE 7 :DOMINIO (2)) #S(VARIABLE-PSR :NOMBRE 8 :DOMINIO (9)) #S(VARIABLE-PSR :NOMBRE 9 :DOMINIO (5)) #S(VARIABLE-PSR :NOMBRE 10 :DOMINIO (3)) ) )

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.37

Reparaci on heur stica: ejemplos


x

Seguimiento de un ejemplo: N-reinas


V1 V2 V3 V4 valor conictos valor conictos valor conictos valor conictos 1 3 1 3 1 3 1 3 1 2 1 2 4 0 1 2 1 2 2 1 4 0 1 1 3 1 2 1 4 0 1 0 3 0 1 1 4 0 1 1 3 0 1 0 4 0 2 0

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.38

Comparaci on de los tres algoritmos:


x

Ejemplo: N-reinas
N 4 8 12 backtracking arcos min-conictos (media sobre 10 pruebas) tiempo espacio tiempo espacio tiempo espacio 0.04 84064 0.06 73968 0.08 97019 6.18 9967912 3.17 2792464 2.27 2953025 51.16 75282044 22.71 16295860 16.96 20217256

Reparaci on heur stica tiene muy buenos resultados en algunos tipos de PSRs:
u

PSRs cuyas soluciones est an distribuidas uniformemente a lo largo del espacio de estados PSRs en los que las restricciones pueden cambiar din amicamente

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.39

Bibliograf a
x

Nilsson, N.J. Inteligencia articial (Una nueva s ntesis) (McGraw Hill, 2000)
u

Cap. 11 M etodos alternativos de b usqueda y otras aplicaciones.

Poole, D.; Mackworth, A. y Goebel, R. Computational Intelligence (A Logical Approach) (Oxford University Press, 1998)
u

Cap. 4.7: Constraint Satisfaction Problems.

Russell, S. y Norvig, P. Articial Intelligence (A Modern Approach) (PrenticeHall, 2000). Second Edition
u

Cap. 5: Constraint Satisfaction Search.

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.40

Inteligencia Artificial I

Curso 20052006

Tema 5 (anexo): Implementaciones en Lisp

Dpto. de Ciencias de la Computaci on e Inteligencia Articial

Universidad de Sevilla

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.41

Representaci on de PSRs
x

Representaci on de las variables:

(defstruct (variable-psr (:constructor crea-variable) (:conc-name psr-var-)) nombre dominio)


x

Representaci on de las restricciones:

(defstruct (restriccion-psr (:constructor crea-restriccion) (:conc-name psr-restr-)) variables funcion)

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.42

Problema de las N reinas


(defun crea-dominio (n) (loop for i from 1 to n collect i)) (defun n-reinas (n) (defparameter *variables* (loop for i from 1 to n collect (crea-variable :nombre i :dominio (crea-dominio n)))) (defparameter *restricciones* (loop for i from 1 to n append (loop for j from 1 to n when (> j i) collect (crea-restriccion :variables (list i j) :funcion (restriccion-reinas i j)))))) (defun restriccion-reinas (i j) #(lambda (x y) (and (not (= x y)) (not (= (abs (- x y)) (abs (- i j)))))))
IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.43

Problema de colorear el mapa de Andaluc a (I)


(defparameter *colores* (azul rojo verde)) (defparameter *variables* (list (crea-variable :nombre (crea-variable :nombre (crea-variable :nombre (crea-variable :nombre (crea-variable :nombre (crea-variable :nombre (crea-variable :nombre (crea-variable :nombre

Huelva :dominio *colores*) Sevilla :dominio *colores*) Cadiz :dominio *colores*) Malaga :dominio *colores*) Cordoba :dominio *colores*) Jaen :dominio *colores*) Granada :dominio *colores*) Almeria :dominio *colores*)))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.44

Problema de colorear el mapa de Andaluc a (II)


(defparameter *restricciones* (list (crea-restriccion :variables (Huelva Sevilla) :funcion #(lambda (x y) (not (crea-restriccion :variables (Huelva Cadiz) :funcion #(lambda (x y) (not (crea-restriccion :variables (Cadiz Malaga) :funcion #(lambda (x y) (not (crea-restriccion :variables (Cadiz Sevilla) :funcion #(lambda (x y) (not (crea-restriccion :variables (Sevilla Cordoba) :funcion #(lambda (x y) (not (crea-restriccion :variables (Sevilla Malaga) :funcion #(lambda (x y) (not (crea-restriccion :variables (Cordoba Jaen) :funcion #(lambda (x y) (not (crea-restriccion :variables (Cordoba Malaga) :funcion #(lambda (x y) (not (crea-restriccion :variables (Malaga Granada) :funcion #(lambda (x y) (not (crea-restriccion :variables (Granada Jaen) :funcion #(lambda (x y) (not (crea-restriccion :variables (Granada Almeria) :funcion #(lambda (x y) (not
IA-I 20052006

(eq x y)))) (eq x y)))) (eq x y)))) (eq x y)))) (eq x y)))) (eq x y)))) (eq x y)))) (eq x y)))) (eq x y)))) (eq x y)))) (eq x y))))))
Problemas de satisfacci on de restricciones 5.45

CcIa

Soluci on a PSRs mediante b usqueda en profundidad (I)


x

Estados nales:

(defun es-asignacion-completa (estado) (= (length estado) (length *variables*)))


x

Sucesores:

(defun bpr-sucesores (actual) (elimina-inconsistentes-nueva-asignacion (asigna-nueva-variable actual)))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.46

Soluci on a PSRs mediante b usqueda en profundidad (II)


x

Asignaci on de nuevas variables:

(defun asignada (variable estado) (assoc variable estado)) (defun primera-variable-no-asignada (estado) (find-if-not #(lambda (x) (asignada (psr-var-nombre x) estado)) *variables*)) (defun asigna-nueva-variable (estado) (let* ((variable (primera-variable-no-asignada estado)) (nombre (psr-var-nombre variable)) (dominio (psr-var-dominio variable))) (loop for val in dominio collect (acons nombre val estado))))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.47

Soluci on a PSRs mediante b usqueda en profundidad (III)


x

Eliminaci on de asignaciones inconsistentes:

(defun elimina-inconsistentes-nueva-asignacion (estados) (loop for estado in estados when (verifica-restricciones-posibles estado) collect estado)) (defun verifica-restricciones-posibles (estado) (loop for restriccion in *restricciones* always (let* ((variables (psr-restr-variables restriccion)) (a1 (assoc (first variables) estado)) (a2 (assoc (second variables) estado))) (or (not (member (caar estado) variables)) (not a1) (not a2) (funcall (psr-restr-funcion restriccion) (cdr a1) (cdr a2))))))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.48

Soluci on a PSRs mediante b usqueda en profundidad (y IV)


x

B usqueda en profundidad:

(defun psr-busqueda-en-profundidad () (let ((abiertos (list nil))) (loop until (null abiertos) do (setf actual (first abiertos)) (setf abiertos (rest abiertos)) (cond ((es-asignacion-completa actual) (return actual)) (t (setf nuevos-sucesores (bpr-sucesores actual)) (setf abiertos (append nuevos-sucesores abiertos)))))))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.49

Algoritmo de backtracking (versi on recursiva)


x

Selecci on de variables y ordenaci on de valores:

(defun selecciona-variable (estado) (primera-variable-no-asignada estado)) (defun ordena-valores-del-dominio (x) x)


x

Backtracking recursivo:

(defun psr-backtracking () (psr-backtracking-rec ())) (defun psr-backtracking-rec (estado) (if (es-asignacion-completa estado) estado (let* ((variable (selecciona-variable estado)) (nombre (psr-var-nombre variable)) (dominio (ordena-valores-del-dominio (psr-var-dominio variable)))) (loop for val in dominio do (let ((nuevo-estado (acons nombre val estado))) (when (verifica-restricciones-posibles nuevo-estado) (let ((resultado (psr-backtracking-rec nuevo-estado))) (when resultado (return resultado)))))))))
IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.50

Consistencia de arcos
x

Arco = Restricci on + Variable

(defstruct (arco (:constructor crea-arco) (:conc-name arco-)) variable restriccion)


x

Lista de arcos de un P.S.R.:

(defun arcos () (loop for restriccion in *restricciones* append (loop for var in (psr-restr-variables restriccion) collect (crea-arco :variable var :restriccion restriccion))))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.51

Algoritmo de consistencia de arcos AC-3


(defun ac3 (variables) (let ((red (arcos)) (actual nil)) (loop until (null red) do (setf actual (first red)) (setf red (rest red)) (let* ((variable-mod (variable-nombre (arco-variable actual) variables)) (restriccion (arco-restriccion actual)) (viejo-dominio (psr-var-dominio variable-mod)) (nuevo-dominio (actualiza-dominio variable-mod variables restriccion))) (when (not (equal nuevo-dominio viejo-dominio)) (setf (psr-var-dominio variable-mod) nuevo-dominio) (when (null nuevo-dominio) (return)) (setf red (append red (nuevos-arcos variable-mod red))))))) variables)

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.52

Algoritmo de consistencia de arcos AC-3


x

Obtenci on de arcos cuya consistencia es discutible:

(defun nuevos-arcos (variable-mod red) (let ((var-mod (psr-var-nombre variable-mod)) (arcos (arcos))) (loop for arco in arcos when (and (not (equal var-mod (arco-variable arco))) (not (member arco red :test #equalp)) (member var-mod (psr-restr-variables (arco-restriccion arco)))) collect arco)))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.53

Algoritmo de consistencia de arcos AC-3


x

Actualizaci on de dominios (restricciones binarias):

(defun actualiza-dominio (variable-mod variables restriccion) (let ((nombre1 (first (psr-restr-variables restriccion))) (nombre2 (second (psr-restr-variables restriccion))) (funcion (psr-restr-funcion restriccion))) (cond ((equal (psr-var-nombre variable-mod) nombre1) (loop for val1 in (psr-var-dominio variable-mod) when (test-de-existencia-1 val1 (variable-nombre nombre2 variables) funcion) collect val1)) (t (loop for val2 in (psr-var-dominio variable-mod) when (test-de-existencia-2 val2 (variable-nombre nombre1 variables) funcion) collect val2)))))
CcIa

IA-I 20052006

Problemas de satisfacci on de restricciones

5.54

Algoritmo de consistencia de arcos AC-3


x

Tests de existencia:

(defun test-de-existencia-1 (val1 var2 funcion) (loop for val2 in (psr-var-dominio var2) thereis (funcall funcion val1 val2))) (defun test-de-existencia-2 (val2 var1 funcion) (loop for val1 in (psr-var-dominio var1) thereis (funcall funcion val1 val2)))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.55

B usqueda de soluciones mediante consistencia de arcos (I)


x

B usqueda por consistencia de arcos:

(defun busqueda-ac3 () (let ((abiertos (list (copia-lista-variables-psr *variables*))) (actual nil)) (loop until (null abiertos) do (setf actual (ac3 (first abiertos))) (setf abiertos (rest abiertos)) (cond ((hay-dominio-vacio actual) nil) ((dominios-unitarios actual) (return actual)) (t (setf abiertos (append (cda-sucesores actual) abiertos)))))))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.56

B usqueda de soluciones mediante consistencia de arcos (II)


x

Comprobaci on de dominios vac os:

(defun hay-dominio-vacio (variables) (loop for var in variables thereis (dominio-vacio var)))
x

Generaci on de sucesores:

(defun cda-sucesores (estado) (let* ((seleccion (selecciona-dominio estado)) (inicio (first seleccion)) (variable (second seleccion)) (final (third seleccion)) (nuevos-dominios (rompe-dominio variable))) (loop for var in nuevos-dominios collect (append (copia-lista-variables-psr inicio) (list var) (copia-lista-variables-psr final)))))
IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.57

B usqueda de soluciones mediante consistencia arcos (y III)


x

Seleccionar una variable con dominio no unitario: (V1 . . . Vi . . . Vn) = ((V1 . . . Vi1) Vi (Vi+1 . . . Vn))

(defun selecciona-dominio (variables) (let ((indice (position-if-not #dominio-unitario variables))) (list (subseq variables 0 indice) (nth indice variables) (subseq variables (+ indice 1)))))
x

Romper un dominio en subdominios (unitario m as el resto):

(defun rompe-dominio (variable) (list (crea-variable :nombre (psr-var-nombre variable) :dominio (list (first (psr-var-dominio variable)))) (crea-variable :nombre (psr-var-nombre variable) :dominio (rest (psr-var-dominio variable)))))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.58

Reparaci on heur stica (m nimos conictos) (I)


x

Nodo:

(defstruct (nodo-minc (:constructor crea-nodo-minc) (:conc-name minc-)) estado ultima-modificada)


x

Funci on principal:

(defun reparacion-heuristica-minc (&key (iteraciones 100)) (let ((actual (crea-nodo-inicial))) (loop for i from 1 to iteraciones do (if (= (numero-conflictos (minc-estado actual)) 0) (return (list i (minc-estado actual))) (setf actual (nodo-menos-conflictivo (rhc-sucesores actual)))))))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.59

Reparaci on heur stica (m nimos conictos) (II)


x

Construcci on del nodo inicial:

(defun crea-nodo-inicial () (crea-nodo-minc :estado (loop for var in *variables* collect (crea-variable :nombre (psr-var-nombre var) :dominio (list (first (psr-var-dominio var))))) :ultima-modificada nil))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.60

Reparaci on heur stica (m nimos conictos) (III)


x

N umero de conictos de un estado:

(defun numero-conflictos (estado) (loop for restriccion in *restricciones* count (not (comprueba-restriccion restriccion estado))))
x

Comprobaci on de restricciones (binarias):

(defun comprueba-restriccion (restriccion variables) (let* ((nombres (psr-restr-variables restriccion)) (val1 (first (dominio-nombre (first nombres) variables))) (val2 (first (dominio-nombre (second nombres) variables)))) (funcall (psr-restr-funcion restriccion) val1 val2)))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.61

Reparaci on heur stica (m nimos conictos) (IV)


x

Generaci on de sucesores de un nodo gsat:

(defun rhc-sucesores (nodo-minc) (let* ((seleccion (selecciona-conflictiva nodo-minc)) (inicio (first seleccion)) (variable (second seleccion)) (final (third seleccion)) (nombre (psr-var-nombre variable)) (valor (first (psr-var-dominio variable))) (dominio (dominio-nombre nombre *variables*))) (loop for n-val in dominio when (not (equal n-val valor)) collect (crea-nodo-minc :estado (append (copia-lista-variables-psr inicio) (list (crea-variable :nombre nombre :dominio (list n-val))) (copia-lista-variables-psr final)) :ultima-modificada nombre))))
IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.62

Reparaci on heur stica (m nimos conictos) (V)


x

Selecci on aleatoria de una variable conictiva: (V1 . . . Vi . . . Vn) = ((V1 . . . Vi1) Vi (Vi+1 . . . Vn))

(defun selecciona-conflictiva (nodo-minc) (let* ((variables (minc-estado nodo-minc)) (ultima-mod (minc-ultima-modificada nodo-minc)) (indice (indice-con-maximos-conflictos variables ultima-mod))) (list (subseq variables 0 indice) (nth indice variables) (subseq variables (+ indice 1)))))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.63

Reparaci on heur stica (m nimos conictos) (VI)


x

Selecci on aleatoria de una variable conictiva:

(defun indice-con-maximos-conflictos (variables ultima) (let ((maximo 0) (lista-maximos nil)) (loop for i from 0 to (- (length variables) 1) when (not (equal (psr-var-nombre (nth i variables)) ultima)) do (let ((nuevo-valor (numero-conflictos-variable variables (nth i variables)))) (cond ((> nuevo-valor maximo) (setf maximo nuevo-valor lista-maximos (list i))) ((= nuevo-valor maximo) (push i lista-maximos))))) (nth (random (length lista-maximos)) lista-maximos)))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.64

Reparaci on heur stica (m nimos conictos) (VII)


x

N umero de restricciones incumplidas por una variable:

(defun numero-conflictos-variable (variables var) (loop for restriccion in *restricciones* when (member (psr-var-nombre var) (psr-restr-variables restriccion) :test #equal) count (not (comprueba-restriccion restriccion variables))))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.65

Reparaci on heur stica (m nimos conictos) (y VIII)


x

Selecci on del nodo menos conictivo:

(defun nodo-menos-conflictivo (lista-nodos-minc) (let* ((nodo-minimo (first lista-nodos-minc)) (resto (rest lista-nodos-minc)) (val-minimo (numero-conflictos (minc-estado nodo-minimo)))) (loop for nodo in resto do (let ((nuevo-val (numero-conflictos (minc-estado nodo)))) (when (< nuevo-val val-minimo) (setf val-minimo nuevo-val) (setf nodo-minimo nodo)))) nodo-minimo))

IA-I 20052006

CcIa

Problemas de satisfacci on de restricciones

5.66

También podría gustarte