Está en la página 1de 66

Inteligencia Artificial I

Curso 20062007

Tema 5: Problemas de
satisfacci
on de restricciones
Jos
e A. Alonso Jim
enez
Carmen Graciani Daz
Francisco J. Martn Mateos
Jos
e L. Ruiz Reina

Dpto. de Ciencias de la Computaci


on e Inteligencia Artificial

Universidad de Sevilla

IA-I 20062007

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 definido por
los siguientes elementos:
u

Un conjunto finito de variables X1 , . . . , Xn

Un conjunto finito de dominios Di asociados a cada variable Xi , especificando los


posibles valores que puede tomar

Un conjunto finito de restricciones C1, . . . , Cm, que definen una serie de propiedades
que deben verificar 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 verifican las restricciones
Esta formulaci
on permite una representaci
on simple del problema, y el
uso de heursticas de prop
osito general, independientes del problema

IA-I 20062007

Cc Ia

Problemas de satisfacci
on de restricciones

5.2

Tipos de Problemas de Satisfacci


on de Restricciones
x

Clasificaci
on seg
un el tipo de restricciones:
u

Restricciones de obligaci
on (hard constraints).

Restricciones de preferencia (soft constraints).

Clasificaci
on seg
un los dominios:
u

Dominios discretos (finitos o infinitos).

Dominios continuos.

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

Restricciones binarias.

Restricciones m
ultiples.

IA-I 20062007

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 }

R
R

Restricciones:
u

Jaque horizontal: Vi 6= Vj

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

V1 = 1, V2 = 3

Problema con dominios finitos y restricciones binarias (de obligaci


on).

IA-I 20062007

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 Andaluca:


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 6= Q, para cada par de provincias vecinas P y Q

Problema con dominios finitos y restricciones binarias (de obligaci


on).

IA-I 20062007

Cc Ia

Problemas de satisfacci
on de restricciones

5.5

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 smbolos 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 finitos y restricciones binarias (de obligaci


on).

Problema NP-completo
u

Por tanto, en el peor caso, no es posible resolver PSRs con dominios finitos en
tiempo polinomial (si P 6= N P ).

IA-I 20062007

Cc Ia

Problemas de satisfacci
on de restricciones

5.6

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:

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 finitos y restricciones m


ultiples (de obligaci
on).

IA-I 20062007

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

Obtener la mejor

Tabla de capacidades (Ci):


E1
E2
E3

Pn

i=1 Ci

T1
1
3
2

T2
3
2
3

T3
2
1
1

Problema con dominios finitos y restricciones m


ultiples (de preferencia).

IA-I 20062007

Cc Ia

Problemas de satisfacci
on de restricciones

5.8

Ejemplo: planificaci
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 20062007

Cc Ia

Problemas de satisfacci
on de restricciones

5.9

Problemas de Satisfacci
on de Restricciones
x

En este tema, trataremos PSRs:


u

Con dominios finitos

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

HU=SE

HU

CO

CO=JA

JA

CO=GR

SE

JA=GR
SE=MA

CA=SE

CO=MA

MA

MA=GR

GR

GR=AL

AL

HU=CA

CA

IA-I 20062007

CcIa

CA=MA

Problemas de satisfacci
on de restricciones

5.10

Implementaci
on de la representaci
on de un PSR
x

Variables: estructura con nombre + dominio


u

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-var-nombre y psr-var-dominio

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

La variable global *restricciones* contiene todas las restricciones del


PSR

IA-I 20062007

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 finales: asignaciones completas

Operadores:
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 fija (igual al n
umero de variables),
profundidad es preferible a anchura

IA-I 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.12

Simplificaciones en la b
usqueda
x

El orden en el que se aplican los operadores es irrelevante para la soluci


on final (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

No necesitamos la estructura de nodo

No necesitamos una representaci


on explcita para los operadores

No es posible repetir un estado durante la b


usqueda:
u

No es necesario realizar comprobaciones para evitar repeticiones

La lista de CERRADOS es superflua

IA-I 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.13

B
usqueda en profundidad para PSR: implementaci
on
x

Estados: representados como listas de asociaci


on

Funci
on que elige la nueva variable a asignar (de entre las no asignadas):
u

Funci
on que ordena los valores a asignar:
u

SELECCIONA-VARIABLE(ESTADO)

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(VARIABLE))
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 20062007

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 20062007

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 20062007

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(VARIABLE))
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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.17

Heursticas en el algoritmo de backtracking


x

En principio, el algoritmo de backtracking realiza una b


usqueda ciega
u

B
usqueda no informada, ineficiente en la pr
actica

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

Estas heursticas son de prop


osito general

Independientes del problema

Sacan partido de la estructura especial de los PSR

Posibles mejoras heursticas


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

IA-I 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.18

Selecci
on de variables y ordenaci
on de valores
x

Definici
on adecuada de la funci
on SELECCIONA-VARIABLE(ESTADO)
u

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

Heurstica 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 heurstica: 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

IA-I 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.19

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

IA-I 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.20

Ejemplo: N-reinas
x

Backtracking+forward checking en 4-reinas

R
R
R
R

R
R
R
R

R
R

R
R
R
R

IA-I 20062007

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 heurstica 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 eficiencia y completitud

IA-I 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.22

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 6= SE, |Vi Vj | =
6 |i j|

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 6= SE es consistente

Ejemplo: si SE tiene como dominio {rojo} y CO tiene como dominio {rojo, verde},
el arco CO 6= SE no es consistente

En este u
ltimo caso, el arco puede hacerse consistente eliminando rojo del dominio
de CO

IA-I 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.23

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

Actualizaci
on de dominios:
u

Revisi
on de arcos:
u

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

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 vaco (inconsistencia)

IA-I 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.24

Consistencia de arcos (ejemplo)


x

Planificaci
on de las acciones de un robot (Poole, pag. 149): Un robot
necesita planificar 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 primera.

IA-I 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.25

Consistencia de arcos (ejemplo)


x

Representaci
on como grafo:
A

A=B

1 2
3 4

A=D

1
2
4

B=D
B=C

1 2
3 4

C<D
E<D
E

E<A

IA-I 20062007

CcIa

1
3 4

E<C
1 2
3 4

E<B

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 6= B, A 6= B, B 6= C, B 6= C, C < D, C < D, B 6= D, B 6= 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 6= D, B 6= 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 6= C
(A 1 2 3 4) (B 1 2 4) (C 1 3)
B 6= D, B 6= 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 6= 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 6= C, C < D, A 6= 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 6= C, C < D,
(D 2 3 4) (E 1 2 3)
A 6= B, A > E
(A 2 3 4) (B 2 4) (C 1 3)
B > E, C > E, C > E, D > E, D > E, B 6= C, C < D, A 6= B,
(D 2 3 4) (E 1 2 3)
A > E, A 6= B, B 6= C, B 6= D
(A 2 3 4) (B 2 4) (C 3)
C > E, D > E, D > E, B 6= C, C < D, A 6= B, A > E, A 6= B,
(D 2 3 4) (E 1 2 3)
B 6= C, B 6= D, C < D

IA-I 20062007

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)

IA-I 20062007

Arcos pendientes de revisar


D > E, D > E, B 6= C, C < D, A 6= B, A > E, A 6= B, B 6= C,
B 6= D, C < D, B > E, C > E
B > E, C > E, C < D, B 6= D, A = D, D > E
A = D, D > E, A 6= B, B 6= C, B 6= D, B > E
D > E, A 6= B, B 6= C, B 6= D, B > E, A 6= B, A = D, A > E
A 6= B, A = D, A > E, A > E, B > E, C > E, D > E

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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.29

Implementaci
on del algoritmo AC-3
x

Algoritmo AC-3
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 20062007

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 20062007

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 vaco: no hay soluci


on.

Todos los dominios son unitarios: hay una soluci


on.

No hay dominios vacos y al menos uno no es unitario: soluciones?.

Idea: romper un dominio no vaco 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 20062007

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

IA-I 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.33

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 20062007

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 finales: soluciones al PSR

Generaci
on de sucesor: elegir una variable y cambiar el valor que tiene asignado
(usando cierta heurstica y aleatoriedad)

Generaci
on de sucesor mediante la estrategia de mnimos conflictos
u

Variable elegida: aquella (distinta de la u


ltima modificada) que participa en m
as
restricciones NO satisfechas en el estado (los empates se deshacen aleatoriamente)

Valor elegido: aquel valor (distinto del que tena) que produce el menor n
umero de
restricciones incumplidas (los empates se deshacen aleatoriamente)

IA-I 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.35

Algoritmo de reparaci
on heurstica (mnimos conflictos)
x

Estructura nodo-minc: asignaci


on + u
ltima variable modificada

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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.36

Reparaci
on heurstica: 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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.37

Reparaci
on heurstica: ejemplos
x

Seguimiento de un ejemplo: N-reinas


V1
V2
V3
V4
valor conflictos valor conflictos valor conflictos valor conflictos
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 20062007

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-conflictos (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 heurstica 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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.39

Bibliografa
x

Nilsson, N.J. Inteligencia artificial (Una nueva sntesis) (McGraw


Hill, 2000)
u

Poole, D.; Mackworth, A. y Goebel, R. Computational Intelligence (A


Logical Approach) (Oxford University Press, 1998)
u

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

Cap. 4.7: Constraint Satisfaction Problems.

Russell, S. y Norvig, P. Artificial Intelligence (A Modern Approach)


(PrenticeHall, 2000). Second Edition
u

Cap. 5: Constraint Satisfaction Search.

IA-I 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.40

Inteligencia Artificial I

Curso 20062007

Tema 5 (anexo):
Implementaciones en Lisp

Dpto. de Ciencias de la Computaci


on e Inteligencia Artificial

Universidad de Sevilla

IA-I 20062007

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 20062007

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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.43

Problema de colorear el mapa de Andaluca (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

IA-I 20062007

Huelva :dominio *colores*)


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

CcIa

Problemas de satisfacci
on de restricciones

5.44

Problema de colorear el mapa de Andaluca (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 20062007

CcIa

(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

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

Estados finales:

(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 20062007

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 20062007

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 20062007

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 20062007

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 20062007

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 20062007

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 20062007

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 20062007

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)))))

IA-I 20062007

CcIa

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 20062007

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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.56

B
usqueda de soluciones mediante consistencia de arcos (II)
x

Comprobaci
on de dominios vacos:

(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 20062007

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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.58

Reparaci
on heurstica (mnimos conflictos) (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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.59

Reparaci
on heurstica (mnimos conflictos) (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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.60

Reparaci
on heurstica (mnimos conflictos) (III)
x

N
umero de conflictos 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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.61

Reparaci
on heurstica (mnimos conflictos) (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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.62

Reparaci
on heurstica (mnimos conflictos) (V)
x

Selecci
on aleatoria de una variable conflictiva:
(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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.63

Reparaci
on heurstica (mnimos conflictos) (VI)
x

Selecci
on aleatoria de una variable conflictiva:

(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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.64

Reparaci
on heurstica (mnimos conflictos) (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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.65

Reparaci
on heurstica (mnimos conflictos) (y VIII)
x

Selecci
on del nodo menos conflictivo:

(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 20062007

CcIa

Problemas de satisfacci
on de restricciones

5.66

También podría gustarte