Tema 3 - Dpto. Ciencias de la Computación e Inteligencia Artificial

Anuncio
Inteligencia Artificial I
Curso 2004–2005
Tema 3: Técnicas básicas de
búsqueda
José A. Alonso Jiménez
Francisco J. Martı́n Mateos
José L. Ruiz Reina
Dpto. de Ciencias de la Computación e Inteligencia Artificial
Universidad de Sevilla
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.1
Búsqueda de soluciones en espacios de estados
x
x
Objetivo: encontrar una secuencia de operadores que, partiendo del estado inicial, obtenga un estado final
Idea básica: exploración del grafo del espacio de estados
u
u
u
u
x
u
En cada momento se analiza un estado actual (en un principio, el inicial)
Si el estado actual es final, acabar (recopilando la sucesión de operadores)
En caso contrario, obtener los sucesores del estado actual (expandir)
Elegir un nuevo estado actual, dejando los restantes para analizarlos posteriormente
(si fuera necesario)
Repetir el proceso mientras haya estados por analizar
La elección del estado actual en cada momento determina una estrategia
de búsqueda
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.2
Árboles de búsqueda
x
x
El proceso anterior puede verse como la construcción incremental de un
árbol de búsqueda
Ejemplo en el problema de las jarras:
(0 0)
(4 0)
(4 3)
IA-I 2004–2005
Cc Ia
(0 3)
(1 3)
(3 0)
(1 0)
(3 3)
Técnicas básicas de búsqueda
3.3
Árboles de búsqueda
x
x
x
x
Nodo de un árbol de búsqueda, componentes:
u
u
Estado
Secuencia de operadores que conducen al estado desde el inicial (camino)
Nodo raı́z del árbol de búsqueda: estado inicial + secuencia vacı́a
Nodos hoja del árbol de búsqueda:
u
u
Nodos cuya expansión no ha producido sucesores nuevos
Nodos pendientes de considerar (y expandir en su caso)
Diferencias entre el espacio de estados y el árbol de búsqueda:
u
u
u
Arbol vs. grafo
Nodos del árbol de búsqueda: estado + camino
El árbol de búsqueda se construye incrementalmente y refleja un proceso de búsqueda sobre el grafo del espacio de estados
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.4
Implementación de un problema de espacio de estados
x
x
Elección de una representación (estructura de datos):
u
u
para los operadores
La implementación de un problema como espacio de estados consta de:
u
u
u
x
para los estados
u
Una variable global *ESTADO-INICIAL*
Una función ES-ESTADO-FINAL(ESTADO)
Una variable global *OPERADORES*.
Una función APLICA(OPERADOR,ESTADO)
La función APLICA(OPERADOR,ESTADO):
u
u
Devuelve NO-APLICABLE si OPERADOR no es aplicable a ESTADO
En caso contrario, devuelve el estado resultante de aplicar OPERADOR a ESTADO
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.5
Implementación de la búsqueda (funciones auxiliares)
x
x
Nodo de búsqueda: estado + camino
u
Funciones de acceso: ESTADO(NODO) y CAMINO(NODO)
Sucesores de un nodo
FUNCION SUCESOR(NODO,OPERADOR)
1. Hacer ESTADO-SUCESOR igual a APLICA(OPERADOR,ESTADO(NODO))
2. Si ESTADO-SUCESOR=NO-APLICABLE
devolver NO-APLICABLE
en caso contrario,
devolver un nodo cuyo estado es ESTADO-SUCESOR y cuyo camino
es el resultado de a~
nadir OPERADOR a CAMINO(NODO)
FUNCION SUCESORES(NODO)
1. Hacer SUCESORES vacı́o
2. Para cada OPERADOR en *OPERADORES*,
si SUCESOR(NODO,OPERADOR) =/= NO-APLICABLE,
incluir SUCESOR(NODO,OPERADOR) en SUCESORES
3. Devolver SUCESORES
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.6
Implementación de un procedimiento general de búsqueda
FUNCION BUSQUEDA-GENERAL()
1. Hacer ABIERTOS la "cola" formada por el nodo inicial (es decir, el nodo
cuyo estado es *ESTADO-INICIAL* y cuyo camino es vacı́o);
Hacer CERRADOS vacı́o
2. Mientras que ABIERTOS no esté vacı́a,
2.1 Hacer ACTUAL el primer nodo de ABIERTOS
2.2 Hacer ABIERTOS el resto de ABIERTOS
2.3 Poner el nodo ACTUAL en CERRADOS.
2.4 Si ES-ESTADO-FINAL(ESTADO(ACTUAL)),
2.4.1 devolver el nodo ACTUAL y terminar.
2.4.2 en caso contrario,
2.4.2.1 Hacer NUEVOS-SUCESORES la lista de nodos de SUCESORES(ACTUAL)
cuyo estado no está ni en ABIERTOS ni en CERRADOS
2.4.2.2 Hacer ABIERTOS igual a GESTIONA-COLA(ABIERTOS,NUEVOS SUCESORES)
3. Devolver FALLO.
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.7
Implementación de un procedimiento general de búsqueda
x
x
x
x
x
La implementación anterior es independiente del problema
ABIERTOS puede verse como una “cola” en la que esperan los nodos para
ser analizados
CERRADOS contiene los nodos ya analizados
u
u
Nos permite evitar ciclos en el proceso de búsqueda
En determinados problemas es prescindible
La función GESTIONA-COLA(ABIERTOS,NUEVOS SUCESORES):
u
Añade NUEVOS-SUCESORES a ABIERTOS, reordenando según algún criterio concreto
Distintas concreciones de esta función dan lugar a distintos algoritmos
de búsqueda (estrategias de búsqueda)
u
Búsqueda no informada o ciega vs. búsqueda informada
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.8
Propiedades de los algoritmos de búsqueda
x
Propiedades a estudiar sobre los algoritmos de búsqueda:
u
u
u
u
Completitud: si existe solución, ¿la encuentra?
Solución óptima o mı́nima: ¿obtiene la solución de menor número de pasos o de
menor coste?
Complejidad en tiempo: ¿cuánto se tarda en encontrar una solución?
Complejidad en espacio: ¿cuánta memoria necesitamos?
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.9
Búsqueda en anchura
x
Arbol de búsqueda en anchura en el problema de las jarras:
(0 0) 1
(4 0) 2
(4 3) 4
IA-I 2004–2005
Cc Ia
(0 3) 3
(1 3) 5
(3 0) 6
(1 0) 7
(3 3) 8
(0 1) 9
(4 2) 10
(4 1) 11
(0 2) 12
(2 3) 13
(2 0)
Técnicas básicas de búsqueda
3.10
Búsqueda en anchura
x
Tabla de búsqueda en anchura para el problema de las jarras:
Nodo Actual
1
2
3
4
5
6
7
8
9
10
11
12
13
IA-I 2004–2005
(0
(4
(0
(4
(1
(3
(1
(3
(0
(4
(4
(0
(2
0)
0)
3)
3)
3)
0)
0)
3)
1)
2)
1)
2)
3)
Sucesores
((4
((4
((3
()
((1
((3
((0
((4
((4
((0
((2
((2
((0
0) (0 3)) ((4
3) (1 3)) ((0
0))
((4
((1
0))
((3
3))
((1
1))
((3
2))
((0
1))
((4
2))
((4
3))
((0
0))
((2
Cc Ia
Abiertos
0))
0) (0 3))
3) (4 3) (1 3))
3) (1 3) (3 0))
3) (3 0))
0) (1 0))
0) (3 3))
3) (0 1))
1) (4 2))
2) (4 1))
1) (0 2))
2) (2 3))
3) (2 0))
Técnicas básicas de búsqueda
3.11
Implementación de la búsqueda en anchura
x
En la búsqueda en anchura, ABIERTOS se gestiona como una cola (FIFO):
FUNCION BUSQUEDA-EN-ANCHURA()
1. Hacer ABIERTOS la cola formada por el nodo inicial (es decir, el nodo
cuyo estado es *ESTADO-INICIAL* y cuyo camino es vacı́o);
Hacer CERRADOS vacı́o
2. Mientras que ABIERTOS no esté vacı́a,
2.1 Hacer ACTUAL el primer nodo de ABIERTOS
2.2 Hacer ABIERTOS el resto de ABIERTOS
2.3 Poner el nodo ACTUAL en CERRADOS.
2.4 Si ES-ESTADO-FINAL(ESTADO(ACTUAL)),
2.4.1 devolver el nodo ACTUAL y terminar.
2.4.2 en caso contrario,
2.4.2.1 Hacer NUEVOS-SUCESORES la lista de nodos de SUCESORES(ACTUAL)
cuyo estado no está ni en ABIERTOS ni en CERRADOS
2.4.2.2 Hacer ABIERTOS el resultado de incluir
NUEVOS-SUCESORES al final de ABIERTOS
3. Devolver FALLO.
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.12
Soluciones de los problemas mediante búsqueda anchura
x
Problema de las jarras:
> (load "p-jarras-1.lsp")
T
> (load "b-anchura.lsp")
T
> (busqueda-en-anchura)
#S(NODO :ESTADO (2 3)
:CAMINO (LLENAR-JARRA-3-CON-JARRA-4
LLENAR-JARRA-4
VACIAR-JARRA-4-EN-JARRA-3
VACIAR-JARRA-3
LLENAR-JARRA-3-CON-JARRA-4
LLENAR-JARRA-4))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.13
Soluciones de los problemas mediante búsqueda en anchura
> (trace es-estado-final)
> (busqueda-en-anchura)
1. Trace: (ES-ESTADO-FINAL
1. Trace: (ES-ESTADO-FINAL
1. Trace: (ES-ESTADO-FINAL
1. Trace: (ES-ESTADO-FINAL
1. Trace: (ES-ESTADO-FINAL
1. Trace: (ES-ESTADO-FINAL
1. Trace: (ES-ESTADO-FINAL
1. Trace: (ES-ESTADO-FINAL
1. Trace: (ES-ESTADO-FINAL
1. Trace: (ES-ESTADO-FINAL
1. Trace: (ES-ESTADO-FINAL
1. Trace: (ES-ESTADO-FINAL
1. Trace: (ES-ESTADO-FINAL
> (untrace)
IA-I 2004–2005
’(0
’(4
’(0
’(4
’(1
’(3
’(1
’(3
’(0
’(4
’(4
’(0
’(2
0))
0))
3))
3))
3))
0))
0))
3))
1))
2))
1))
2))
3))
Cc Ia
Técnicas básicas de búsqueda
3.14
Soluciones de los problemas mediante búsqueda en anchura
> (time (busqueda-en-anchura))
Real time: 0.416386 sec.
Run time: 0.41 sec.
Space: 7236 Bytes
#S(NODO :ESTADO (2 3)
:CAMINO (LLENAR-JARRA-3-CON-JARRA-4
LLENAR-JARRA-4
VACIAR-JARRA-4-EN-JARRA-3
VACIAR-JARRA-3
LLENAR-JARRA-3-CON-JARRA-4
LLENAR-JARRA-4))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.15
Soluciones de los problemas mediante búsqueda en anchura
x
Estadı́stica de búsqueda en anchura:
Tiempo Espacio
Nodos
Máximo en Profundidad
(seg.) (bytes) analizados abiertos
máxima
Viaje
0.18
3.260
8
4
3
Granjero
0.18
3.432
10
2
7
Jarras
0.41
7.236
13
3
6
8-puzle
4.51
68.292
46
33
5
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.16
Propiedades de la búsqueda en anchura
x
Complejidad:
u
u
u
u
r: factor de ramificación.
p: profundidad de la solución.
Complejidad en tiempo: O(r p).
Complejidad en espacio: O(r p).
x
Es completa.
x
Obtiene una solución con el mı́nimo número de operadores.
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.17
Limitaciones de la búsqueda en anchura
> (load "p-8-puzzle.lsp")
T
> (load "b-anchura.lsp")
T
> (setf *estado-inicial*
(make-array ’(3 3)
:initial-contents ’((4 8 1) (3 H 2) (7 6 5))))
#2A((4 8 1) (3 H 2) (7 6 5))
> (time (busqueda-en-anchura))
** - EVAL: User break
Real time: 100.43055 sec.
Run time: 96.08 sec.
Space: 1457680 Bytes
GC: 3, GC time: 0.47 sec.
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.18
Limitaciones de la búsqueda en anchura
x
Tiempo y espacio exponenciales
x
Suponiendo ramificación 10, 1000 nodos por seg. y 100 bytes por nodo:
Profundidad Nodos Tiempo
Espacio
0
1
1 ms.
100 b
2
111
0.1 seg.
11 Kb
4
11111
11 seg.
1 Mb
6
106
18 min.
11 Mb
8
108
31 horas
11 Gb
10
1010
128 dı́as
1 Tb
12
1012
33 años
11 Tb
14
1014 3500 años 11.111 Tb
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.19
Búsqueda en profundidad
x
Arbol de búsqueda en profundidad para el problema de las jarras:
(0 0) 1
(4 0) 2
(4 3) 3
(0 3)
(1 3) 4
(1 0) 5
(0 1) 6
(4 1) 7
(2 3) 8
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.20
Búsqueda en profundidad
x
Tabla de búsqueda en profundidad para el problema de las jarras:
Nodo Actual
1
2
3
4
5
6
7
8
IA-I 2004–2005
(0
(4
(4
(1
(1
(0
(4
(2
0)
0)
3)
3)
0)
1)
1)
3)
Sucesores
((4
((4
()
((1
((0
((4
((2
((0
0) (0 3)) ((4
3) (1 3)) ((4
((1
0))
((1
1))
((0
1))
((4
3))
((2
Cc Ia
Abiertos
0))
0) (0 3))
3) (1 3) (0 3))
3) (0 3))
0) (0 3))
1) (0 3))
1) (0 3))
3) (0 3))
Técnicas básicas de búsqueda
3.21
Implementación de la búsqueda en profundidad
x
Búsqueda en profundidad, ABIERTOS se gestiona como una pila (LIFO):
FUNCION BUSQUEDA-EN-PROFUNDIDAD()
1. Hacer ABIERTOS la pila formada por el nodo inicial (es decir, el nodo
cuyo estado es *ESTADO-INICIAL* y cuyo camino es vacı́o);
Hacer CERRADOS vacı́o
2. Mientras que ABIERTOS no esté vacı́a,
2.1 Hacer ACTUAL el primer nodo de ABIERTOS
2.2 Hacer ABIERTOS el resto de ABIERTOS
2.3 Poner el nodo ACTUAL en CERRADOS.
2.4 Si ES-ESTADO-FINAL(ESTADO(ACTUAL)),
2.4.1 devolver el nodo ACTUAL y terminar.
2.4.2 en caso contrario,
2.4.2.1 Hacer NUEVOS-SUCESORES la lista de nodos de SUCESORES(ACTUAL)
cuyo estado no está ni en ABIERTOS ni en CERRADOS
2.4.2.2 Hacer ABIERTOS el resultado de incluir
NUEVOS-SUCESORES al principio de ABIERTOS
3. Devolver FALLO.
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.22
Soluciones mediante búsqueda en profundidad
x
Problema de las jarras:
> (load "p-jarras-1.lsp")
T
> (load "b-profundidad.lsp")
T
> (busqueda-en-profundidad)
#S(NODO :ESTADO (2 3)
:CAMINO (LLENAR-JARRA-3-CON-JARRA-4
LLENAR-JARRA-4
VACIAR-JARRA-4-EN-JARRA-3
VACIAR-JARRA-3
LLENAR-JARRA-3-CON-JARRA-4
LLENAR-JARRA-4))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.23
Soluciones mediante búsqueda en profundidad
> (trace es-estado-final)
(ES-ESTADO-FINAL)
> (busqueda-en-profundidad)
1. Trace: (ES-ESTADO-FINAL ’(0 0))
1. Trace: (ES-ESTADO-FINAL ’(4 0))
1. Trace: (ES-ESTADO-FINAL ’(4 3))
1. Trace: (ES-ESTADO-FINAL ’(1 3))
1. Trace: (ES-ESTADO-FINAL ’(1 0))
1. Trace: (ES-ESTADO-FINAL ’(0 1))
1. Trace: (ES-ESTADO-FINAL ’(4 1))
1. Trace: (ES-ESTADO-FINAL ’(2 3))
#S(NODO :ESTADO (2 3)
:CAMINO (LLENAR-JARRA-3-CON-JARRA-4 LLENAR-JARRA-4
VACIAR-JARRA-4-EN-JARRA-3 VACIAR-JARRA-3
LLENAR-JARRA-3-CON-JARRA-4 LLENAR-JARRA-4))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.24
Soluciones mediante búsqueda en profundidad
x
Estadı́stica de búsqueda en profundidad:
Tiempo Espacio
Nodos
Máximo en Profundidad
(seg.) (bytes) analizados abiertos
máxima
Viaje
0.1
1.968
5
4
3
Granjero
0.14
2.800
8
3
7
Jarras
0.19
3.576
8
3
6
8-puzle
—
—
—
—
—
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.25
Propiedades de la búsqueda en profundidad
x
Complejidad:
u
u
u
u
r: factor de ramificación.
m: máxima profundidad de la búsqueda.
Complejidad en tiempo: O(r m).
Complejidad en espacio: O(rm).
x
No es completa.
x
No necesariamente obtiene una solución mı́nima.
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.26
Limitaciones de la búsqueda en profundidad
x
Enunciado:
u
u
u
u
u
u
Una persona puede moverse en lı́nea recta dando cada vez un paso hacia la derecha
o hacia la izquierda.
Representamos su posición mediante un número entero.
La posición inicial es 0.
La posición aumenta en 1 por cada paso a la derecha.
La posición decrece en 1 por cada paso a la izquierda.
El problema consiste en llegar a la posición -3.
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.27
Problema sin solución en profundidad
x
Representación de los estados: x un número entero.
x
Número de estados: infinito.
x
Estado inicial: 0.
x
Estado final: -3.
x
Operadores:
u
u
Moverse un paso a la derecha.
Moverse un paso a la izquierda.
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.28
Problema sin solución en profundidad
x
Resolución del problema del paseo
> (load "p-paseo.lsp")
T
> (load "b-profundidad.lsp")
T
> (trace es-estado-final)
(ES-ESTADO-FINAL)
> (busqueda-en-profundidad)
1. Trace: (ES-ESTADO-FINAL
1. Trace: (ES-ESTADO-FINAL
1. Trace: (ES-ESTADO-FINAL
1. Trace: (ES-ESTADO-FINAL
*** - PRINT: User break
1. Break> abort
IA-I 2004–2005
’0)
’1)
’2)
’3)
Cc Ia
Técnicas básicas de búsqueda
3.29
Problema sin solución en profundidad
> (load "b-anchura.lsp")
T
> (busqueda-en-anchura)
1. Trace: (ES-ESTADO-FINAL ’0)
1. Trace: (ES-ESTADO-FINAL ’1)
1. Trace: (ES-ESTADO-FINAL ’-1)
1. Trace: (ES-ESTADO-FINAL ’2)
1. Trace: (ES-ESTADO-FINAL ’-2)
1. Trace: (ES-ESTADO-FINAL ’3)
1. Trace: (ES-ESTADO-FINAL ’-3)
#S(NODO :ESTADO -3
:CAMINO (MOVER-A-IZQUIERDA MOVER-A-IZQUIERDA MOVER-A-IZQUIERDA))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.30
Problema resoluble por profundidad y no por anchura
> (load "p-8-puzzle.lsp")
T
> (load "b-profundidad.lsp")
T
> (setf *estado-inicial*
(make-array ’(3 3)
:initial-contents ’((4 8 1) (3 H 2) (7 6 5))))
#2A((4 8 1) (3 H 2) (7 6 5))
> (time (busqueda-en-profundidad))
Real time: 0.709987 sec.
Run time: 0.71 sec.
Space: 10660 Bytes
#S(NODO :ESTADO #2A((1 2 3) (8 H 4) (7 6 5))
:CAMINO (MOVER-IZQUIERDA MOVER-ABAJO MOVER-DERECHA MOVER-DERECHA
MOVER-ARRIBA MOVER-IZQUIERDA MOVER-IZQUIERDA MOVER-ABAJO
MOVER-DERECHA MOVER-DERECHA MOVER-ARRIBA MOVER-IZQUIERDA))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.31
Implementación de la búsqueda en profundidad acotada
FUNCION BUSQUEDA-EN-PROFUNDIDAD-ACOTADA(COTA)
1. Hacer ABIERTOS la pila formada por el nodo inicial (es decir, el nodo
cuyo estado es *ESTADO-INICIAL* y cuyo camino es vacı́o);
Hacer CERRADOS vacı́o
2. Mientras que ABIERTOS no esté vacı́a,
2.1 Hacer ACTUAL el primer nodo de ABIERTOS
2.2 Hacer ABIERTOS el resto de ABIERTOS
2.3 Poner el nodo ACTUAL en CERRADOS.
2.4 Si ES-ESTADO-FINAL(ESTADO(ACTUAL)),
2.4.1 devolver el nodo ACTUAL y terminar.
2.4.2 en caso contrario, si la profundidad del ACTUAL es menor que la cota,
2.4.2.1 Hacer NUEVOS-SUCESORES la lista de nodos de SUCESORES(ACTUAL)
cuyo estado no está ni en ABIERTOS ni en CERRADOS
2.4.2.2 Hacer ABIERTOS el resultado de incluir
NUEVOS-SUCESORES al principio de ABIERTOS
3. Devolver FALLO.
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.32
Propiedades de la búsqueda en profundidad acotada
x
Complejidad:
u
u
u
x
x
u
r: factor de ramificación
c: cota de la profundidad
Complejidad en tiempo: O(r c)
Complejidad en espacio: O(rc)
En general, no es completa
u
Es completa cuando la cota es mayor que la profundidad de la solución
No nocesariamente obtiene una solución mı́nima
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.33
8-puzle: búsqueda en profundidad acotada
x
Solución del 8-puzle por profundidad acotada:
> (load "p-8-puzzle.lsp")
T
> (load "b-profundidad-acotada.lsp")
T
> (time (busqueda-en-profundidad-acotada))
Real time: 1.212106 sec.
Run time: 1.21 sec.
Space: 17704 Bytes
#S(NODO :ESTADO #2A((1 2 3) (8 H 4) (7 6 5))
:CAMINO (MOVER-DERECHA
MOVER-ABAJO
MOVER-IZQUIERDA
MOVER-ARRIBA
MOVER-ARRIBA))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.34
8-puzle: búsqueda en profundidad acotada
> (setf *estado-inicial*
(make-array ’(3 3)
:initial-contents ’((4 8 1) (3 H 2) (7 6 5))))
#2A((4 8 1) (3 H 2) (7 6 5))
> (time (busqueda-en-profundidad-acotada))
Real time: 3.242785 sec.
Run time: 3.25 sec.
Space: 45796 Bytes
NIL
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.35
8-puzle: búsqueda en profundidad acotada
> (time (busqueda-en-profundidad-acotada :cota 12))
Real time: 0.739477 sec.
Run time: 0.72 sec.
Space: 10756 Bytes
#S(NODO :ESTADO #2A((1 2 3) (8 H 4) (7 6 5))
:CAMINO (MOVER-IZQUIERDA
MOVER-ABAJO
MOVER-DERECHA
MOVER-DERECHA
MOVER-ARRIBA
MOVER-IZQUIERDA
MOVER-IZQUIERDA
MOVER-ABAJO
MOVER-DERECHA
MOVER-DERECHA
MOVER-ARRIBA
MOVER-IZQUIERDA))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.36
Tabla de comparación
x
Estadı́sticas de soluciones del 8-puzle:
Anchura
Profundidad
Profundidad
cota = 5
Profundidad
cota = 12
Estado Tiempo Espacio Tiempo Espacio Tiempo Espacio Tiempo
inicial
(seg.) (bytes) (seg.) (bytes) (seg.) (bytes) (seg.)
2
8
3
1
6
4
7
4
68.292
—
—
1.21
—
—
0.71
10.660
—
17.704 134.42 940.096
5
8
3
7
4.51
Espacio
(bytes)
1
2
6
IA-I 2004–2005
—
0.72
10.756
5
Cc Ia
Técnicas básicas de búsqueda
3.37
Búsqueda en profundidad iterativa
x
Arbol de búsqueda en profundidad iterativa (problema de las jarras):
(0 0) 1,2,5,11,19,29,41
(4 0) 3,6,12,20,30,42
(0 3) 4,9,16,25,36
(4 3) 7,13,21,31,43 (1 3) 8,14,22,32,44 (3 0) 10,17,26,37
IA-I 2004–2005
(1 0) 15,23,33,45
(3 3) 18,27,38
(0 1) 24,34,46
(4 2)
(4 1) 35,47
(0 2) 40
(2 3) 48
(2 0)
Cc Ia
28,39
Técnicas básicas de búsqueda
3.38
Implementación de la búsqueda en profundidad iterativa
FUNCION BUSQUEDA-EN-PROFUNDIDAD-ITERATIVA(COTA-INICIAL)
1. Hacer N=COTA-INICIAL
2. Si BUSQUEDA-EN-PROFUNDIDAD-ACOTADA(N) no devuelve fallo,
2.1 devolver su resultado y terminar.
2.2 en caso contrario, hacer N igual a N+1 y volver a 2
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.39
Aplicación al problema de las jarras
> (load "p-jarras-1.lsp")
T
> (load "b-profundidad-iterativa.lsp")
T
> (time (busqueda-en-profundidad-iterativa :cota-inicial 0))
Real time: 0.178446 sec.
Run time: 0.18 sec.
Space: 18288 Bytes
#S(NODO :ESTADO (2 3)
:CAMINO (LLENAR-JARRA-3-CON-JARRA-4
LLENAR-JARRA-4
VACIAR-JARRA-4-EN-JARRA-3
VACIAR-JARRA-3
LLENAR-JARRA-3-CON-JARRA-4
LLENAR-JARRA-4))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.40
Propiedades de la búsqueda en profundidad iterativa
x
Complejidad:
u
u
u
u
r: factor de ramificación.
p: profundidad de solución.
Complejidad en tiempo: O(r p).
Complejidad en espacio: O(rp).
x
Es completa.
x
Obtiene una solución con el mı́nimo número de operadores.
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.41
Propiedades de la búsqueda en profundidad iterativa
x
x
x
La búsqueda iterativa es el método preferido si el espacio de búsqueda
es grande y no se conoce la profundidad de la solución
La redundancia en la expansión queda compensada con la completitud
u
Además, la redundancia no es significativa
Ejemplo, r = 10 y p = 5:
u
u
u
u
Búsqueda acotada, nodos analizados: 1 + 10 + 100 + 1000 + 10000 + 100000 = 111111
Búsqueda iterativa, nodos analizados: 1 + 11 + 111 + 1111 + 11111 + 111111 = 123456
Tan sólo un 10 % más
Razón: la mayorı́a de los nodos están en el último nivel del árbol
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.42
Tabla de comparación
x
Estadı́sticas de soluciones del 8-puzle:
Anchura
Profundidad
Profundidad
iterativa
Estado Tiempo Espacio Tiempo Espacio Tiempo
inicial
(seg.) (bytes) (seg.) (bytes) (seg.)
2
8
3
1
6
4
7
4
IA-I 2004–2005
68.292
—
—
—
0.71
—
0.6
8.992
5
8
3
7
4.51
Espacio
(bytes)
1
2
6
10.660 71.83 655.594
5
Cc Ia
Técnicas básicas de búsqueda
3.43
Tabla de comparación (procedimientos compilados)
x
Estadı́sticas del 8-puzle con procedimientos compilados:
Anchura
Profundidad
Profundidad
iterativa
Estado Tiempo Espacio Tiempo Espacio Tiempo
inicial
(seg.) (bytes) (seg.) (bytes) (seg.)
2
8
3
1
6
4
7
4
IA-I 2004–2005
27.424
—
—
—
—
0.04
5.984
0.06
8.236
5
8
3
7
0.22
Espacio
(bytes)
1
2
6
15.88 656.020
5
Cc Ia
Técnicas básicas de búsqueda
3.44
Comparación de procedimientos
Anchura Profundidad
Tiempo
Espacio
Completa
Mı́nima
u
u
u
u
O(r p)
O(r p)
Sı́
Sı́
O(r m)
O(rm)
No
No
Profundidad
acotada
O(r c)
O(rc)
Sı́, si c >= p
No
Profundidad
iterativa
O(r p)
O(rp)
Sı́
Sı́
r: factor de ramificación.
p: profundidad de la solución.
m: máxima profundidad de la búsqueda.
c: cota de la profundidad.
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.45
Bibliografı́a
x
x
x
Borrajo, D. y otros Inteligencia artificial: Métodos y técnicas (Centro
de estudios Ramón Areces, 1993).
u
Cap. 4: “Búsqueda”.
Cortés, U., Béjar, J. y Moreno, A. Inteligencia artificial (Ediciones
UPC, 1994).
u
Cap. 4: “Búsqueda y estrategias”.
Mira, J.; Delgado, A.E.; Boticario, J.G. y Dı́ez, F.J. Aspectos básicos
de la Inteligencia Artificial (Sanz y Torres, 1995)
u
Cap. 3: “Fundamentos y técnicas básicas de búsqueda”.
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.46
Bibliografı́a
x
Rich, E. y Knight, K. Inteligencia artificial (segunda edición)
(McGraw–Hill Interamericana, 1994).
u
x
Russell, S. y Norvig, P. Inteligencia artificial: Un enfoque moderno
(Prentice Hall, 1996).
u
x
Cap. 3: “Solución de problemas mediante búsqueda”
Winston, P.R. y Horn, B.K. LISP (3a. ed.) (Addison–Wesley, 1991).
u
x
Cap. 2: “Problemas, espacios problema y búsqueda”.
Cap. 19: “Ejemplos que involucran búsquedas”.
Winston, P.R. Inteligencia artificial (3a. ed.) (Addison–Wesley, 1994).
u
Cap. 4: “Redes y búsqueda básica”.
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.47
Inteligencia Artificial I
Curso 2004–2005
Tema 3 (anexo):
Implementaciones en Lisp
Dpto. de Ciencias de la Computación e Inteligencia Artificial
Universidad de Sevilla
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.48
Respresentación en Lisp de los nodos de búsqueda
x
Nodo = Estado + Camino
x
Representación de nodos en Lisp
(defstruct (nodo (:constructor crea-nodo)
(:conc-name nil))
estado
camino)
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.49
Implementación Lisp: expansión de nodos
(defun nuevos-sucesores (nodo abiertos cerrados)
(elimina-duplicados (sucesores nodo) abiertos cerrados))
(defun sucesores (nodo)
(let ((resultado ()))
(loop for operador in *operadores* do
(let ((siguiente (sucesor nodo operador)))
(when siguiente (push siguiente resultado))))
(nreverse resultado)))
(defun sucesor (nodo operador)
(let ((siguiente-estado (aplica operador (estado nodo))))
(when siguiente-estado
(crea-nodo :estado siguiente-estado
:camino (cons operador
(camino nodo))))))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.50
Implementación Lisp: expansión de nodos
(defun elimina-duplicados (nodos abiertos cerrados)
(loop for nodo in nodos
when (and (not (esta nodo abiertos))
(not (esta nodo cerrados)))
collect nodo))
(defun esta (nodo lista-de-nodos)
(let ((estado (estado nodo)))
(loop for n in lista-de-nodos
thereis (equalp estado (estado n)))))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.51
Implementación en Lisp de la búsqueda en anchura
(defun busqueda-en-anchura ()
(let ((abiertos (list (crea-nodo :estado *estado-inicial*
;1.1
:camino nil)))
(cerrados nil)
;1.2
(actual nil)
;1.3
(nuevos-sucesores nil))
;1.4
(loop until (null abiertos) do
;2
(setf actual (first abiertos))
;2.1
(setf abiertos (rest abiertos))
;2.2
(setf cerrados (cons actual cerrados))
;2.3
(cond ((es-estado-final (estado actual))
;2.4
(return actual))
;2.4.1
(t (setf nuevos-sucesores
;2.4.2.1
(nuevos-sucesores actual abiertos cerrados))
(setf abiertos
;2.4.2.2
(append abiertos nuevos-sucesores)))))))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.52
Implementación de la búsqueda en profundidad
(defun busqueda-en-profundidad ()
(let ((abiertos (list (crea-nodo :estado *estado-inicial*
;1.1
:camino nil)))
(cerrados nil)
;1.2
(actual nil)
;1.3
(nuevos-sucesores nil))
;1.4
(loop until (null abiertos) do
;2
(setf actual (first abiertos))
;2.1
(setf abiertos (rest abiertos))
;2.2
(setf cerrados (cons actual cerrados))
;2.3
(cond ((es-estado-final (estado actual))
;2.4
(return actual))
;2.4.1
(t (setf nuevos-sucesores
;2.4.2.1
(nuevos-sucesores actual abiertos cerrados))
(setf abiertos
;2.4.2.2
(append nuevos-sucesores abiertos)))))))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.53
Implementación en Lisp del problema del paseo
x
Problema sin solución en profundidad
(defparameter *estado-inicial* 0)
(defparameter *estado-final* -3)
(defun es-estado-final (estado)
(= estado *estado-final*))
(defparameter *operadores*
’(mover-a-derecha
mover-a-izquierda))
(defun mover-a-derecha (estado)
(+ estado 1))
(defun mover-a-izquierda (estado)
(- estado 1))
(defun aplica (operador estado)
(funcall (symbol-function operador) estado))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.54
Implementación en Lisp de la búsqueda acotada
(defun busqueda-en-profundidad-acotada (&key (cota 5))
(let ((abiertos (list (crea-nodo :estado *estado-inicial*
:camino nil)))
;1.1
(cerrados nil)
;1.2
(actual nil)
;1.3
(nuevos-sucesores nil))
;1.4
(loop until (null abiertos) do
;2
(setf actual (first abiertos))
;2.1
(setf abiertos (rest abiertos))
;2.2
(setf cerrados (cons actual cerrados))
;2.3
(cond ((es-estado-final (estado actual))
;2.4
(return actual))
;2.4.1
((< (length (camino actual)) cota)
(setf nuevos-sucesores
;2.4.2.1
(nuevos-sucesores actual abiertos cerrados))
(setf abiertos (append nuevos-sucesores abiertos)))))))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.55
Implementación de la búsqueda en profundidad iterativa
(defun busqueda-en-profundidad-iterativa (&key (cota-inicial 5))
(loop for n from cota-inicial
thereis (busqueda-en-profundidad-acotada :cota n)))
IA-I 2004–2005
Cc Ia
Técnicas básicas de búsqueda
3.56
Descargar