Documente Academic
Documente Profesional
Documente Cultură
Septiembre 2004
Cochabamba - Bolivia
s
Contenido:
Contenido de la presentación
1. Introducción
6. Conclusiones
7. Referencias
Introducción
Antecedentes (1)
Una gran variedad de problemas en Inteligencia Artificial y
otras áreas de la Informática pueden ser vistos como casos
especiales de Problemas sujetos a la Satisfacción de
Restricciones [KUM92].
Antecedentes (1)
Una gran variedad de problemas en Inteligencia Artificial y
otras áreas de la Informática pueden ser vistos como casos
especiales de Problemas sujetos a la Satisfacción de
Restricciones [KUM92].
Por ejemplo: problemas de visión artificial, planeamiento
(scheduling), horarios (timetabling), etc.
Antecedentes (1)
Una gran variedad de problemas en Inteligencia Artificial y
otras áreas de la Informática pueden ser vistos como casos
especiales de Problemas sujetos a la Satisfacción de
Restricciones [KUM92].
Por ejemplo: problemas de visión artificial, planeamiento
(scheduling), horarios (timetabling), etc.
Los Problemas sujetos a la Satisfacción de Restricciones
(CSP’s) se estudian bajo un marco conceptual unificado que
permite utilizar una variedad de enfoques para resolverlos.
Antecedentes (1)
Una gran variedad de problemas en Inteligencia Artificial y
otras áreas de la Informática pueden ser vistos como casos
especiales de Problemas sujetos a la Satisfacción de
Restricciones [KUM92].
Por ejemplo: problemas de visión artificial, planeamiento
(scheduling), horarios (timetabling), etc.
Los Problemas sujetos a la Satisfacción de Restricciones
(CSP’s) se estudian bajo un marco conceptual unificado que
permite utilizar una variedad de enfoques para resolverlos.
La ventaja de utilizar un marco conceptual unificado radica en
la posibilidad de utilizar algoritmos que resuelvan el problema
general (CSP) y que a su vez puedan resolver cualquier
problema que pueda ser modelado como CSP.
Antecedentes (2)
El estudio de los problemas sujetos a la satisfacción de
restricciones fue iniciado por Montanari en 1974.
Antecedentes (2)
El estudio de los problemas sujetos a la satisfacción de
restricciones fue iniciado por Montanari en 1974.
Montanari utilizó un marco formal para describir ciertos
problemas combinatorios que surgieron trabajando en
tratamiento de imágenes.
Antecedentes (2)
El estudio de los problemas sujetos a la satisfacción de
restricciones fue iniciado por Montanari en 1974.
Montanari utilizó un marco formal para describir ciertos
problemas combinatorios que surgieron trabajando en
tratamiento de imágenes.
Al poco tiempo, se descubrió que el marco utilizado por
Montanari era aplicable a una diversidad de problemas en
muchas áreas de estudio.
Antecedentes (2)
El estudio de los problemas sujetos a la satisfacción de
restricciones fue iniciado por Montanari en 1974.
Montanari utilizó un marco formal para describir ciertos
problemas combinatorios que surgieron trabajando en
tratamiento de imágenes.
Al poco tiempo, se descubrió que el marco utilizado por
Montanari era aplicable a una diversidad de problemas en
muchas áreas de estudio.
En esta presentación se verá lo que son los problemas sujetos
a la satisfacción de restricciones y se estudiará dos tipos de
algoritmos para resolver CSP’s: algoritmos sistemáticos de
búsqueda (basados en backtracking) y algoritmos de
consistencia.
X D C
x1 d1
x2 d2 c1
x3 d3 c3
x5 d5
x4 d4 c4
d6 c2
x6
x7 d7
X D C
x1 d1
x2 d2 c1
x3 d3 c3
x5 d5
x4 d4 c4
d6 c2
x6
x7 d7
D d5
d1
d2 v8 v1
d3 v9
d5 v3
v7
d4 v2 v4
d6
d7 v5 v6
D d5 Solución
d1 (x1, v8)
d2 v8 (x2, v1) (x4, v5)
d3 v9
d5 v3
v7 (x3, v2)
d4 v2 v4 (x6, v9)
d6 (x5, v3)
d7 v5 v6 (x7, v1)
C ci = (W , Q)
W = {x1 , x2 , x3 }
c1
Q = {(v1 , v1 , v1 ), (v1 , v1 , v2 )...}
c3
c4
c2
x9
x8
x4
x1 x7
x5
x2
x6
x3
x8
x4
x1 x7
x5
x2
x6
x3
x9
x8
x4
x1 x7
x5
x2
x6
x3
x9 {R, A, V}
{R, A, V}
x8 {R, A, V}
x4
{R, A, V}
x7
{R, A, V}
x1
{R, A, V}
x5
x2 {R, A, V}
x6
{R, A, V}
x3 {R, A, V}
7
Q1 = (1,1)
Q2 = (2,3)
8
Q3 = nil
C1-1 = true
7 C2-3 = true
C5-5 = false
. ..
. ..
8
C8-8 = false
Tipos de restricciones
Restricciones unarias
Restringen los valores que pueden ser
asignados a una variable.
Tipos de restricciones
Restricciones unarias
Restringen los valores que pueden ser x9
asignados a una variable.
x8
x4
x1 x7
x5
x2
x6
x3
Tipos de restricciones
Restricciones unarias
Restringen los valores que pueden ser x9
asignados a una variable.
x8
x4
x1
x7
x5
x2
x6
x3
Tipos de restricciones
Restricciones unarias
Restringen los valores que pueden ser x9
asignados a una variable.
Restricciones binarias
x8
Son aquellas que relacionan dos
x4
variables. x1
x7
x5
x2
x6
x3
Tipos de restricciones
Restricciones unarias
Restringen los valores que pueden ser x9 col(X 1) ≠ col(X 4)
asignados a una variable.
Restricciones binarias
x8
Son aquellas que relacionan dos
x4
variables. x1
x7
x5
x2
x6
x3
Tipos de restricciones
Restricciones unarias
allDiff(col(X
x9 1 ), col(X 4 ), col(X 5 ))
Restringen los valores que pueden ser
asignados a una variable.
Restricciones binarias
x8
Son aquellas que relacionan dos
x4
variables. x1
x7
Restricciones de alto orden x5
Son aquellas que relacionan a tres o x2
más variables. x6
x3
0 1 1 1
D.R.A.E
0 0 0 1
0 1 0 1
0 0 0 0
0 1 1 1
D.R.A.E
0 0 0 1
0 1 0 1
0 0 0 0
0 1 1 1 O
D.R.A.E
0 0 0 1 B O A
0 1 0 1 R L
0 0 0 0 A R A R
4 5
7
X14 X15 X16 X17 X18
8
X19 X20 X21
4 5
4 5 1h
1v
2v
6
3v 7h
7 4h
6h
8 5v
4v
4 5
4 5
4 5
Por palabra: |D3 |4 × |D5 |6
donde:
6 D3 = {w ∈ D, long (w ) = 3}
D5 = {w ∈ D, long (w ) = 5}
7
4 5
Por palabra: |D3 |4 × |D5 |6
donde:
6 D3 = {w ∈ D, long (w ) = 3}
D5 = {w ∈ D, long (w ) = 5}
7
Revisando mil millones de posibles
8 soluciones por segundo:
4 5
Por palabra: |D3 |4 × |D5 |6
donde:
6 D3 = {w ∈ D, long (w ) = 3}
D5 = {w ∈ D, long (w ) = 5}
7
Revisando mil millones de posibles
8 soluciones por segundo:
Por letra: 3.6 × 1011 siglos (≈ 3
veces la edad del universo).
4 5
Por palabra: |D3 |4 × |D5 |6
donde:
6 D3 = {w ∈ D, long (w ) = 3}
D5 = {w ∈ D, long (w ) = 5}
7
Revisando mil millones de posibles
8 soluciones por segundo:
Por letra: 3.6 × 1011 siglos (≈ 3
veces la edad del universo).
Por palabra: 1.2 × 1015 siglos (*).
(*) En el DRAE existen 470 palabras de tres letras y 6570 de cinco letras.
Algoritmos
Entre las técnicas utilizadas para resolver problemas sujetos a la
satisfacción de restricciones, se puede identificar dos familias de
algoritmos, cada cual con caracterı́sticas importantes:
Algoritmos
Entre las técnicas utilizadas para resolver problemas sujetos a la
satisfacción de restricciones, se puede identificar dos familias de
algoritmos, cada cual con caracterı́sticas importantes:
Algoritmos sistemáticos de búsqueda
Algoritmos
Entre las técnicas utilizadas para resolver problemas sujetos a la
satisfacción de restricciones, se puede identificar dos familias de
algoritmos, cada cual con caracterı́sticas importantes:
Algoritmos sistemáticos de búsqueda
Determinan si una solución al problema existe buscando en
todo el espacio de soluciones.
Algoritmos
Entre las técnicas utilizadas para resolver problemas sujetos a la
satisfacción de restricciones, se puede identificar dos familias de
algoritmos, cada cual con caracterı́sticas importantes:
Algoritmos sistemáticos de búsqueda
Determinan si una solución al problema existe buscando en
todo el espacio de soluciones.
La búsqueda se realiza de una manera ordenada lo cual
asegura la completitud de los algoritmos.
Algoritmos
Entre las técnicas utilizadas para resolver problemas sujetos a la
satisfacción de restricciones, se puede identificar dos familias de
algoritmos, cada cual con caracterı́sticas importantes:
Algoritmos sistemáticos de búsqueda
Determinan si una solución al problema existe buscando en
todo el espacio de soluciones.
La búsqueda se realiza de una manera ordenada lo cual
asegura la completitud de los algoritmos.
Algoritmos de consistencia
Algoritmos
Entre las técnicas utilizadas para resolver problemas sujetos a la
satisfacción de restricciones, se puede identificar dos familias de
algoritmos, cada cual con caracterı́sticas importantes:
Algoritmos sistemáticos de búsqueda
Determinan si una solución al problema existe buscando en
todo el espacio de soluciones.
La búsqueda se realiza de una manera ordenada lo cual
asegura la completitud de los algoritmos.
Algoritmos de consistencia
La tarea fundamental de estos algoritmos es forzar ciertos
niveles de consistencia en la red de restricciones del problema.
Algoritmos
Entre las técnicas utilizadas para resolver problemas sujetos a la
satisfacción de restricciones, se puede identificar dos familias de
algoritmos, cada cual con caracterı́sticas importantes:
Algoritmos sistemáticos de búsqueda
Determinan si una solución al problema existe buscando en
todo el espacio de soluciones.
La búsqueda se realiza de una manera ordenada lo cual
asegura la completitud de los algoritmos.
Algoritmos de consistencia
La tarea fundamental de estos algoritmos es forzar ciertos
niveles de consistencia en la red de restricciones del problema.
Por lo general se utilizan en una fase de pre-tratamiento,
complementados por algoritmos de backtracking.
Backtracking
1 2 3
1: Backtracking (P, f ) → resp
2: si f es una asignación total en P entonces
3: resp ← f
4 5 4: c/cont
5: resp ← Unsat
6: v ← escogerVariable(P)
6 7: para todo (x ∈ Dv ) mientras (resp = Unsat ) hacer
8: si (f ∪ {(v , x)}) satisface las restricciones de P entonces
7 9: f ← f ∪ {(v , x)}
10: resp ← Backtracking (P, f )
11: fin si
8 12: fin para
13: fin si
14: retornar resp
Backtracking
1 2 3
1: Backtracking (P, f ) → resp
2: si f es una asignación total en P entonces
3: resp ← f
4 5 4: c/cont
5: resp ← Unsat
6: v ← escogerVariable(P)
6 7: para todo (x ∈ Dv ) mientras (resp = Unsat ) hacer
8: si (f ∪ {(v , x)}) satisface las restricciones de P entonces
7 9: f ← f ∪ {(v , x)}
C O C H E 10: resp ← Backtracking (P, f )
11: fin si
8 12: fin para
13: fin si
14: retornar resp
Backtracking
1 2 3
1: Backtracking (P, f ) → resp
H 2:
3:
si f es una asignación total en P entonces
resp ← f
4 5 4: c/cont
E 5: resp ← Unsat
6: v ← escogerVariable(P)
6 7:
R 8:
para todo (x ∈ Dv ) mientras (resp = Unsat ) hacer
si (f ∪ {(v , x)}) satisface las restricciones de P entonces
7 9: f ← f ∪ {(v , x)}
C O C H E 10: resp ← Backtracking (P, f )
11: fin si
8 12: fin para
E 13:
14:
fin si
retornar resp
Backtracking
1 2 3
1: Backtracking (P, f ) → resp
H 2:
3:
si f es una asignación total en P entonces
resp ← f
4 5 4: c/cont
T E 5: resp ← Unsat
6: v ← escogerVariable(P)
6 7:
I R 8:
para todo (x ∈ Dv ) mientras (resp = Unsat ) hacer
si (f ∪ {(v , x)}) satisface las restricciones de P entonces
7 9: f ← f ∪ {(v , x)}
C O C H E 10: resp ← Backtracking (P, f )
11: fin si
8 12: fin para
E 13:
14:
fin si
retornar resp
Backtracking
1 2 3
1: Backtracking (P, f ) → resp
H 2:
3:
si f es una asignación total en P entonces
resp ← f
4 5 4: c/cont
T E N A Z 5: resp ← Unsat
6: v ← escogerVariable(P)
6 7:
I R 8:
para todo (x ∈ Dv ) mientras (resp = Unsat ) hacer
si (f ∪ {(v , x)}) satisface las restricciones de P entonces
7 9: f ← f ∪ {(v , x)}
C O C H E 10: resp ← Backtracking (P, f )
11: fin si
8 12: fin para
E 13:
14:
fin si
retornar resp
Backtracking
1 2 3
1: Backtracking (P, f ) → resp
H 2:
3:
si f es una asignación total en P entonces
resp ← f
4 5 4: c/cont
T E N A Z 5: resp ← Unsat
6: v ← escogerVariable(P)
6 7:
I R 8:
para todo (x ∈ Dv ) mientras (resp = Unsat ) hacer
si (f ∪ {(v , x)}) satisface las restricciones de P entonces
7 9: f ← f ∪ {(v , x)}
C O C H E 10: resp ← Backtracking (P, f )
11: fin si
8 12: fin para
E 13:
14:
fin si
retornar resp
Backtracking
1 2 3
1: Backtracking (P, f ) → resp
H 2:
3:
si f es una asignación total en P entonces
resp ← f
4 5 4: c/cont
T E 5: resp ← Unsat
6: v ← escogerVariable(P)
6 7:
I R 8:
para todo (x ∈ Dv ) mientras (resp = Unsat ) hacer
si (f ∪ {(v , x)}) satisface las restricciones de P entonces
7 9: f ← f ∪ {(v , x)}
C O C H E 10: resp ← Backtracking (P, f )
11: fin si
8 12: fin para
E 13:
14:
fin si
retornar resp
Backtracking
1 2 3
1: Backtracking (P, f ) → resp
H 2:
3:
si f es una asignación total en P entonces
resp ← f
4 5 4: c/cont
T E C L A 5: resp ← Unsat
6: v ← escogerVariable(P)
6 7:
I R V 8:
para todo (x ∈ Dv ) mientras (resp = Unsat ) hacer
si (f ∪ {(v , x)}) satisface las restricciones de P entonces
7 9: f ← f ∪ {(v , x)}
C O C H E 10: resp ← Backtracking (P, f )
11: fin si
8 12: fin para
E 13:
14:
fin si
retornar resp
Backtracking
1 2 3
1: Backtracking (P, f ) → resp
H 2:
3:
si f es una asignación total en P entonces
resp ← f
4 5 4: c/cont
T E C L A 5: resp ← Unsat
6: v ← escogerVariable(P)
6 7:
I R V 8:
para todo (x ∈ Dv ) mientras (resp = Unsat ) hacer
si (f ∪ {(v , x)}) satisface las restricciones de P entonces
7 9: f ← f ∪ {(v , x)}
C O C H E 10: resp ← Backtracking (P, f )
11: fin si
8 12: fin para
E 13:
14:
fin si
retornar resp
Backtracking
1 2 3
1: Backtracking (P, f ) → resp
H 2:
3:
si f es una asignación total en P entonces
resp ← f
4 5 4: c/cont
E 5: resp ← Unsat
6: v ← escogerVariable(P)
6 7:
R 8:
para todo (x ∈ Dv ) mientras (resp = Unsat ) hacer
si (f ∪ {(v , x)}) satisface las restricciones de P entonces
7 9: f ← f ∪ {(v , x)}
C O C H E 10: resp ← Backtracking (P, f )
11: fin si
8 12: fin para
E 13:
14:
fin si
retornar resp
Backtracking
1 2 3
1: Backtracking (P, f ) → resp
H 2:
3:
si f es una asignación total en P entonces
resp ← f
4 5 4: c/cont
T E C L A 5: resp ← Unsat
6: v ← escogerVariable(P)
6 7:
I R V 8:
para todo (x ∈ Dv ) mientras (resp = Unsat ) hacer
si (f ∪ {(v , x)}) satisface las restricciones de P entonces
7 9: f ← f ∪ {(v , x)}
C O C H E 10: resp ← Backtracking (P, f )
11: fin si
8 12: fin para
E 13:
14:
fin si
retornar resp
Backtracking
1 2 3
1: Backtracking (P, f ) → resp
H 2:
3:
si f es una asignación total en P entonces
resp ← f
4 5 4: c/cont
T E C L A 5: resp ← Unsat
6: v ← escogerVariable(P)
6 7:
I R V 8:
para todo (x ∈ Dv ) mientras (resp = Unsat ) hacer
si (f ∪ {(v , x)}) satisface las restricciones de P entonces
7 9: f ← f ∪ {(v , x)}
C O C H E 10: resp ← Backtracking (P, f )
11: fin si
8 12: fin para
E C O 13: fin si
14: retornar resp
Backtracking dinámico
1 2 3
1: BacktrackingDinamico(P, ) → f
2: f ←∅
3: Ex ← ∅ para todo x ∈ X
4 5 4: mientras f 6= X hacer
5: i ← escogerVariable() {i ∈ X − f }
6: Ei ← Ei ∪ (f , v )
6 7: S ← D i − Ei
8: si S 6= ∅ entonces
9: v ← escogerElemento(S)
7 10: f ← f ∪ (i, v )
11: c/cont
8 12: E ← variables(Ei )
13: si E = ∅ entonces
14: retornar Unsat
15: c/cont
16: Sea (j, vj ) la últ. entrada en f vinculada a una var. de E
17: Eliminar (j, vj ) de f
18: Eliminar (de las variables asig.) las expl. asociadas a j
19: Ej ← Ej ∪ (vj , E ∩ f )
20: fin si
21: fin si
22: fin mientras
23: retornar f
Backtracking dinámico
1 2 3
1: BacktrackingDinamico(P, ) → f
H 2:
3:
f ←∅
Ex ← ∅ para todo x ∈ X
4 5 4: mientras f 6= X hacer
T E C L A 5: i ← escogerVariable() {i ∈ X − f }
6: Ei ← Ei ∪ (f , v )
6 7: S ← D i − Ei
I R V 8: si S 6= ∅ entonces
9: v ← escogerElemento(S)
7
C O C H E 10:
11:
f ← f ∪ (i, v )
c/cont
8 12: E ← variables(Ei )
E 13: si E = ∅ entonces
14: retornar Unsat
15: c/cont
16: Sea (j, vj ) la últ. entrada en f vinculada a una var. de E
17: Eliminar (j, vj ) de f
18: Eliminar (de las variables asig.) las expl. asociadas a j
19: Ej ← Ej ∪ (vj , E ∩ f )
20: fin si
21: fin si
22: fin mientras
23: retornar f
Backtracking dinámico
1 2 3
1: BacktrackingDinamico(P, ) → f
H 2:
3:
f ←∅
Ex ← ∅ para todo x ∈ X
4 5 4: mientras f 6= X hacer
T E C L A 5: i ← escogerVariable() {i ∈ X − f }
6: Ei ← Ei ∪ (f , v )
6 7: S ← D i − Ei
I R V 8: si S 6= ∅ entonces
9: v ← escogerElemento(S)
7
C O C H E 10:
11:
f ← f ∪ (i, v )
c/cont
8 12: E ← variables(Ei )
E C O 13: si E = ∅ entonces
14: retornar Unsat
15: c/cont
16: Sea (j, vj ) la últ. entrada en f vinculada a una var. de E
17: Eliminar (j, vj ) de f
18: Eliminar (de las variables asig.) las expl. asociadas a j
19: Ej ← Ej ∪ (vj , E ∩ f )
20: fin si
21: fin si
22: fin mientras
23: retornar f
Backtracking dinámico
1 2 3
1: BacktrackingDinamico(P, ) → f
H 2:
3:
f ←∅
Ex ← ∅ para todo x ∈ X
4 5 4: mientras f 6= X hacer
T E C L A 5: i ← escogerVariable() {i ∈ X − f }
6: Ei ← Ei ∪ (f , v )
6 7: S ← D i − Ei
I R V 8: si S 6= ∅ entonces
9: v ← escogerElemento(S)
7
C O C H E 10:
11:
f ← f ∪ (i, v )
c/cont
8 12: E ← variables(Ei )
E C O 13: si E = ∅ entonces
14: retornar Unsat
15: c/cont
16: Sea (j, vj ) la últ. entrada en f vinculada a una var. de E
17: Eliminar (j, vj ) de f
18: Eliminar (de las variables asig.) las expl. asociadas a j
19: Ej ← Ej ∪ (vj , E ∩ f )
20: fin si
21: fin si
22: fin mientras
23: retornar f
Backtracking dinámico
1 2 3
1: BacktrackingDinamico(P, ) → f
H 2:
3:
f ←∅
Ex ← ∅ para todo x ∈ X
4 5 4: mientras f 6= X hacer
T E C L A 5: i ← escogerVariable() {i ∈ X − f }
6: Ei ← Ei ∪ (f , v )
6 7: S ← D i − Ei
I R V 8: si S 6= ∅ entonces
9: v ← escogerElemento(S)
7
C O C H E 10:
11:
f ← f ∪ (i, v )
c/cont
8 12: E ← variables(Ei )
E 13: si E = ∅ entonces
14: retornar Unsat
15: c/cont
16: Sea (j, vj ) la últ. entrada en f vinculada a una var. de E
17: Eliminar (j, vj ) de f
18: Eliminar (de las variables asig.) las expl. asociadas a j
19: Ej ← Ej ∪ (vj , E ∩ f )
20: fin si
21: fin si
22: fin mientras
23: retornar f
Backtracking dinámico
1 2 3
1: BacktrackingDinamico(P, ) → f
2: f ←∅
3: Ex ← ∅ para todo x ∈ X
4 5 4: mientras f 6= X hacer
T E C L A 5: i ← escogerVariable() {i ∈ X − f }
6: Ei ← Ei ∪ (f , v )
6 7: S ← D i − Ei
I V 8: si S 6= ∅ entonces
9: v ← escogerElemento(S)
7
C O C H E 10:
11:
f ← f ∪ (i, v )
c/cont
8 12: E ← variables(Ei )
13: si E = ∅ entonces
14: retornar Unsat
15: c/cont
16: Sea (j, vj ) la últ. entrada en f vinculada a una var. de E
17: Eliminar (j, vj ) de f
18: Eliminar (de las variables asig.) las expl. asociadas a j
19: Ej ← Ej ∪ (vj , E ∩ f )
20: fin si
21: fin si
22: fin mientras
23: retornar f
Backtracking dinámico
1 2 3
1: BacktrackingDinamico(P, ) → f
L 2:
3:
f ←∅
Ex ← ∅ para todo x ∈ X
4 5 4: mientras f 6= X hacer
T E C L A 5: i ← escogerVariable() {i ∈ X − f }
6: Ei ← Ei ∪ (f , v )
6 7: S ← D i − Ei
I J V 8: si S 6= ∅ entonces
9: v ← escogerElemento(S)
7
C O C H E 10:
11:
f ← f ∪ (i, v )
c/cont
8 12: E ← variables(Ei )
S 13: si E = ∅ entonces
14: retornar Unsat
15: c/cont
16: Sea (j, vj ) la últ. entrada en f vinculada a una var. de E
17: Eliminar (j, vj ) de f
18: Eliminar (de las variables asig.) las expl. asociadas a j
19: Ej ← Ej ∪ (vj , E ∩ f )
20: fin si
21: fin si
22: fin mientras
23: retornar f
Heurı́sticas
En la mayorı́a de los casos, el performance de los algoritmos
de búsqueda no depende solamente de los algoritmos que se
utilicen sino también del conocimiento especı́fico que se tenga
sobre cada problema. Este conocimiento puede ser utilizado
para guiar la búsqueda de una manera más eficiente.
Heurı́sticas
En la mayorı́a de los casos, el performance de los algoritmos
de búsqueda no depende solamente de los algoritmos que se
utilicen sino también del conocimiento especı́fico que se tenga
sobre cada problema. Este conocimiento puede ser utilizado
para guiar la búsqueda de una manera más eficiente.
Sin embargo, es posible resolver CSP’s sin tener
conocimientos especı́ficos sobre un problema. Para esto se
utilizan métodos de propósito general que responden a las
siguiente interrogantes:
Heurı́sticas
En la mayorı́a de los casos, el performance de los algoritmos
de búsqueda no depende solamente de los algoritmos que se
utilicen sino también del conocimiento especı́fico que se tenga
sobre cada problema. Este conocimiento puede ser utilizado
para guiar la búsqueda de una manera más eficiente.
Sin embargo, es posible resolver CSP’s sin tener
conocimientos especı́ficos sobre un problema. Para esto se
utilizan métodos de propósito general que responden a las
siguiente interrogantes:
¿Qué variable debe ser asignada a continuación?
Heurı́sticas
En la mayorı́a de los casos, el performance de los algoritmos
de búsqueda no depende solamente de los algoritmos que se
utilicen sino también del conocimiento especı́fico que se tenga
sobre cada problema. Este conocimiento puede ser utilizado
para guiar la búsqueda de una manera más eficiente.
Sin embargo, es posible resolver CSP’s sin tener
conocimientos especı́ficos sobre un problema. Para esto se
utilizan métodos de propósito general que responden a las
siguiente interrogantes:
¿Qué variable debe ser asignada a continuación?
¿En qué orden se deberı́an asignar los valores a cada
variable?
Heurı́sticas
En la mayorı́a de los casos, el performance de los algoritmos
de búsqueda no depende solamente de los algoritmos que se
utilicen sino también del conocimiento especı́fico que se tenga
sobre cada problema. Este conocimiento puede ser utilizado
para guiar la búsqueda de una manera más eficiente.
Sin embargo, es posible resolver CSP’s sin tener
conocimientos especı́ficos sobre un problema. Para esto se
utilizan métodos de propósito general que responden a las
siguiente interrogantes:
¿Qué variable debe ser asignada a continuación?
¿En qué orden se deberı́an asignar los valores a cada
variable?
¿Qué implicaciones trae la asignación de una variable al
resto del problema?
x9
x8
x4
x1
x7
x5
x2
x6
x3
x9
x8
x4
x1
x7
x5
x2
x6
x3
x9
x8
x4
x1
x7
x5
x2
x6
x3
x9
x8
x4
x1
x7
x5
x2
x6
x3
x9
x8
x4
x1
x7
x5
x2
x6
x3
El nodo X8 es inconsistente
x9
x8
x4
x1
x7
x5
x2
x6
x3
x9
x8
x4
x1
x7
x5
x2
x6
x3
x9
x8
x4
x1
x7
x5
x2
x6
x3
x9
x8
x4
x1
x7
x5
x2
x6
x3
x9
x8
x4
x1
x7
x5
x2
x6
x3
x9
x8
x4
x1
x7
x5
x2
x6
x3
x9
x8
x4
x1
x7
x5
x2
x6
x3
x9
x8
x4
x1
x7
x5
x2
x6
x3
Algoritmos de Consistencia
Algoritmos de Consistencia
j
Conclusiones
Conclusiones (1)
En base a los resultados obtenidos es posible afirmar que se
ha cumplido con los objetivos planteados. El sistema
generador de crucigramas reúne las caracterı́sticas necesarias
para la obtención de crucigramas de alta calidad.
Conclusiones (1)
En base a los resultados obtenidos es posible afirmar que se
ha cumplido con los objetivos planteados. El sistema
generador de crucigramas reúne las caracterı́sticas necesarias
para la obtención de crucigramas de alta calidad.
El estudiar el problema de la construcción de crucigramas
utilizando como enfoque el marco teórico correspondiente a
las problemas sujetos a la satisfacción de restricciones
(CSP’s), ha sido muy beneficioso.
Conclusiones (1)
En base a los resultados obtenidos es posible afirmar que se
ha cumplido con los objetivos planteados. El sistema
generador de crucigramas reúne las caracterı́sticas necesarias
para la obtención de crucigramas de alta calidad.
El estudiar el problema de la construcción de crucigramas
utilizando como enfoque el marco teórico correspondiente a
las problemas sujetos a la satisfacción de restricciones
(CSP’s), ha sido muy beneficioso.
Se ha propuesto un indicador de complejidad basado en las
caracterı́sticas de una cuadrı́cula dada. Los resultados
experimentales han ratificado el buen comportamiento de este
indicador por lo que podrı́a ser utilizado para la clasificación
de cuadrı́culas según complejidad.
Referencias
Artificial Intelligence: A modern aproach, Stuart Russell y
Peter Norvig
http://aima.cs.berkeley.edu/
Referencias
Artificial Intelligence: A modern aproach, Stuart Russell y
Peter Norvig
http://aima.cs.berkeley.edu/
Citeseer: scientific literature digital library
http://citeseer.ist.psu.edu/
Referencias
Artificial Intelligence: A modern aproach, Stuart Russell y
Peter Norvig
http://aima.cs.berkeley.edu/
Citeseer: scientific literature digital library
http://citeseer.ist.psu.edu/
Dynamic Backtracking, technical report 1996, Matthew
Ginsberg
Referencias
Artificial Intelligence: A modern aproach, Stuart Russell y
Peter Norvig
http://aima.cs.berkeley.edu/
Citeseer: scientific literature digital library
http://citeseer.ist.psu.edu/
Dynamic Backtracking, technical report 1996, Matthew
Ginsberg
MIT Open Courseware, material relacionado a IA
http://ocw.mit.edu
Referencias
Artificial Intelligence: A modern aproach, Stuart Russell y
Peter Norvig
http://aima.cs.berkeley.edu/
Citeseer: scientific literature digital library
http://citeseer.ist.psu.edu/
Dynamic Backtracking, technical report 1996, Matthew
Ginsberg
MIT Open Courseware, material relacionado a IA
http://ocw.mit.edu
Bibliografia
BAKER, Andrew
1995 Intelligent Backtracking on Constraint Satisfaction
Problems: Experimental and Theorical Results.
Tesis Doctoral, Universidad de Oregon
GINSBERG, Mathew et al.
1990 Search Lessons Learned from Crossword Puzzles.
En Artificial Intelligence
GINSBERG, Matthew
1993 Dynamic Backtracking.
En Artificial Intelligence Research, págs. 25–46
KUMAR, Vipin
1992 Algorithms for Constraint Satisfaction Problems: A
Survey.
En AI Magazine, tomo 13 págs. 32–44
Rolando Lora Diez de Medina Algoritmos para resolver CSP’s
s
Bibliografia: