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

Anuncio
Introducción a la Inteligencia Artificial
Curso 2010–2011
Tema 6: Búsqueda sin información
Miguel A. Gutiérrez Naranjo
Dpto. de Ciencias de la Computación e Inteligencia Artificial
Universidad de Sevilla
IIA 2010–11
Búsqueda sin información
1
Estrategias de búsqueda
⊲
Una estrategia se define por el orden de expansión de los nodos
⊲
Para cada estrategia, el tiempo y el espacio se mide por:
b máximo factor de ramificación de la búsqueda (El factor
de ramificación de un nodo es el número de sus sucesores).
d profundidad de la solución de menor coste
m máxima profundidad del espacio de estados (que puede ser
infinita)
IIA 2010–11
Búsqueda sin información
2
Estrategias de búsqueda
⊲
Podemos evaluar las estrategias por las siguientes caracterı́sticas:
Completitud: Si existe solución, ¿siempre se encuentra?
Complejidad en tiempo: Número de nodos generados o expandidos.
Complejidad en espacio: Máximo número de nodos almacenados (en memoria)
Optimalidad: ¿Encuentra siempre una solución de las de menor coste?
IIA 2010–11
Búsqueda sin información
3
Estrategias de búsqueda
⊲
Podemos evaluar las estrategias por las siguientes caracterı́sticas:
Completitud: Si existe solución, ¿siempre se encuentra?
Complejidad en tiempo: Número de nodos generados o expandidos.
Complejidad en espacio: Máximo número de nodos almacenados (en memoria)
Optimalidad: ¿Encuentra siempre una solución de las de menor coste?
IIA 2010–11
Búsqueda sin información
4
Estrategias de búsqueda
⊲
Podemos evaluar las estrategias por las siguientes caracterı́sticas:
Completitud: Si existe solución, ¿siempre se encuentra?
Complejidad en tiempo: Número de nodos generados o expandidos.
Complejidad en espacio: Máximo número de nodos almacenados (en memoria)
Optimalidad: ¿Encuentra siempre una solución de las de menor coste?
IIA 2010–11
Búsqueda sin información
5
Estrategias de búsqueda
⊲
Podemos evaluar las estrategias por las siguientes caracterı́sticas:
Completitud: Si existe solución, ¿siempre se encuentra?
Complejidad en tiempo: Número de nodos generados o expandidos.
Complejidad en espacio: Máximo número de nodos almacenados (en memoria)
Optimalidad: ¿Encuentra siempre una solución de las de menor coste?
IIA 2010–11
Búsqueda sin información
6
Estrategias de búsqueda
⊲
Podemos evaluar las estrategias por las siguientes caracterı́sticas:
Completitud: Si existe solución, ¿siempre se encuentra?
Complejidad en tiempo: Número de nodos generados o expandidos.
Complejidad en espacio: Máximo número de nodos almacenados (en memoria)
Optimalidad: ¿Encuentra siempre una solución de las de menor coste?
IIA 2010–11
Búsqueda sin información
7
Búsqueda en anchura
⊲
Trata la frontera como una cola
⊲
Selecciona siempre el primer elemento que se añadió a la cola
⊲
Si la frontera es [p1,p2, ...pr ]
Selecciona p1. Sus sucesores se añaden al final de la cola,
después de pr .
El siguiente nodo elegido es p2.
IIA 2010–11
Búsqueda sin información
8
Búsqueda en anchura
1
2
3
4
8
9
10
6
11
7
12
13
14
16
☞
15
5
☞
☞
IIA 2010–11
Búsqueda sin información
9
Búsqueda en anchura
⊲
⊲
⊲
⊲
Si el factor de ramificación de todos los nodos es finito, la
búsqueda en anchura encuentra una solución (si existe).
Además encuentra el camino con menos arcos.
La complejidad en tiempo es exponencial en la longitud del camino: bn, con b el factor de ramificación y n la longitud del camino.
La complejidad en espacio es también exponencial en la longitud
del camino: bn.
IIA 2010–11
Búsqueda sin información
10
Búsqueda en profundidad
⊲
La búsqueda en profundidad trata la frontera como una pila.
⊲
Siempre se selecciona el último elemento añadido a la frontera.
⊲
Si la frontera es [p1,p2, ...pr ]
Selecciona p1. Sus sucesores se añaden al principio de la cola,
antes de p2.
p2 se selecciona cuando todos los sucesores de p1 hayan sido
explorados.
IIA 2010–11
Búsqueda sin información
11
Búsqueda en profundidad
1
2
3
4
6
12
7
8
9
14
15
16
10
11
☞
5
13
☞
IIA 2010–11
Búsqueda sin información
12
Búsqueda en profundidad
⊲
⊲
La búsqueda en profundidad no garantiza que se encuentre la
solución si el árbol tiene ramas infinitas
La complejidad en espacio es lineal en el tamaño del camno que
se está explorando.
IIA 2010–11
Búsqueda sin información
13
Implementación
⊲
⊲
Sistema genérico de búsqueda:
busqueda(M,S) se verifica si M es el sistema de búsqueda y S es
la lista de nodos explorados
busqueda(M,S):estado_inicial(E),
busqueda(M,[E],S).
⊲
estado inicial(E) depende del problema, no del sistema de
búsqueda.
IIA 2010–11
Búsqueda sin información
14
Implementación
busqueda(_,F,[N]) :write(’Frontera: ’),
write(F), nl,
selecciona(N,F,_),
estado_final(N), nl,
write(’Estado final encontrado: ’),
write(N).
busqueda(M,F,[N|P]) :selecciona(N,F,F1),
sucesores(N,NN),
nueva_frontera(M,NN,F1,F2),
busqueda(M,F2,P).
IIA 2010–11
Búsqueda sin información
15
Implementación
⊲
write(T) escribe en pantalla T.
⊲
nl ( new line) salta a la lı́nea siguiente.
⊲
selecciona(E,F,NF) se verifica si E es un elemento de la lista F
y NF es la lista resultante después de eliminar E. Si tomamos el
primer elemento lo definimos ası́:
selecciona(N,[N|F],F).
⊲
estado final(E) depende del problema, no del sistema de
búsqueda.
IIA 2010–11
Búsqueda sin información
16
Implementación
⊲
sucesores(N,NN) devuelve la lista NN de sucesores de N. Esta lista
de sucesores depende del problema, no del sistema de búsqueda.
Lo podemos definir ası́:
sucesores(N,NN):- findall(M,sucesor(N,M),NN).
⊲
⊲
. . . donde findall(M,G,L) se verifica si L es la lista de todos los M
que verifican la propiedad G.
nueva frontera(M,NN,F1,F2) se verifica si F2 es la nueva frontera
obtenida al añadirle a la frontera F1 los nuevos nodos NN según
la estrategia de búsqueda M.
IIA 2010–11
Búsqueda sin información
17
Implementación
⊲
⊲
Por tanto, desde el punto de vista de la implementación, la
búsqueda en anchra y búsqueda en profundidad sólo se diferencian en la definición de nueva frontera(M,NN,F1,F2)
Para búsqueda en anchura:
nueva_frontera(anchura,NN,F1,F2):- !, append(F1,NN,F2).
⊲
Para búsqueda en profundidad:
nueva_frontera(profundidad,NN,F1,F2):- !, append(NN,F1,F2).
IIA 2010–11
Búsqueda sin información
18
Ciclos
⊲
En los problemas de espacios de estados es probable que podamos volver a un estado
a
b
⊲
c
¿Qué ocurre en este caso con las estrategias de búsqueda en
profundidad y en anchura?
IIA 2010–11
Búsqueda sin información
19
Ciclos
a
Si hay ciclos, tenemos ramas infinitas
c
b
La búsqueda en profundidad puede no
encontrar soluciones
a
b
c
La búsqueda en anchura puede explorar
varias veces el mismo nodo
IIA 2010–11
Búsqueda sin información
20
Búsqueda con ciclos
⊲
⊲
⊲
.
La idea básica es guardar el camino desde el nodo inicial al nodo
considerado.
De este modo podremos evitar los ciclos
Al finalizar la búsqueda obtenemos el camino que nos lleva desde
el nodo inicial al nodo final
busca_camino(M,Camino):estado_inicial(E),
busca_camino(M,[[E]],Camino).
⊲
busca camino(M,Camino) se verifica si M es una estrategia de
búsqueda y Camino es una solución.
IIA 2010–11
Búsqueda sin información
21
Búsqueda con ciclos
busca_camino(_,F,C) :write(’Frontera: ’), write(F), nl,
selecciona([N|Caux],F,_),
estado_final(N),
reverse([N|Caux],C),
write(’Estado final encontrado: ’), write(N), nl,
write(’Camino encontrado: ’), write(C).
busca_camino(M,F,C) :selecciona(N,F,F1),
sucesores_2(N,NN),
nueva_frontera(M,NN,F1,F2),
busca_camino(M,F2,C).
IIA 2010–11
Búsqueda sin información
22
Búsqueda con ciclos
⊲
Auxliares:
sucesores_2([N|C],M):findall([Nuevo_nodo,N|C],
((sucesor(N,Nuevo_nodo), not(member(Nuevo_nodo,[N|C])))),
M).
selecciona(N,[N|F],F).
⊲
diferencia(NN,F1,Nodos) se verifica si Nodos es la lista formada
por los elementos de NN que no están en F1.
diferencia([],_,[]).
diferencia([X|L1],L2,L3):- member(X,L2), !, diferencia(L1,L2,L3).
diferencia([X|L1],L2,[X|L3]):- diferencia(L1,L2,L3).
IIA 2010–11
Búsqueda sin información
23
Búsqueda con ciclos
⊲
⊲
Por tanto, desde el punto de vista de la implementación, la
búsqueda en anchra y búsqueda en profundidad con ciclos sólo
se diferencian en la definición de nueva frontera(M,NN,F1,F2)
Para búsqueda en anchura:
nueva_frontera(anchura_con_ciclos,NN,F1,F2):!,
diferencia(NN,F1,Nodos),
append(F1,Nodos,F2).
⊲
Para búsqueda en profundidad:
nueva_frontera(profundidad_con_ciclos,NN,F1,F2):!,
diferencia(NN,F1,Nodos),
append(Nodos,F1,F2).
IIA 2010–11
Búsqueda sin información
24
Búsqueda con menor coste
⊲
⊲
⊲
⊲
Si el coste de cada transición no es constante, a menudo nos
interes encontrar soluciones que minimicen el coste total.
Por ejemplo, los costes pueden ser distancias o recursos que
queremos minimizar.
Si todas las transiciones tienen el mismo coste, la búsqueda en
anchura nos da una solución de coste mı́nimo.
En la búsqueda de menor coste en lugar de expandir el camino
con el menor número de pasos, expandimos el camino con menor
coste.
IIA 2010–11
Búsqueda sin información
25
Búsqueda con menor coste
⊲
La frontera está formada por pares de la forma
C-[En,..., E1]
donde [En,..., E1] es una lista de nodos con E1 el estado inicial
y C es el coste del camino hasta En.
busca_con_coste(M,Camino,Coste):estado_inicial(E),
busca_con_coste(M,[0-[E]],Camino,Coste).
IIA 2010–11
Búsqueda sin información
26
Búsqueda con menor coste
busca_con_coste(_,F,C,Coste) :write(’Frontera: ’), write(F), nl,
selecciona(Coste-[N|Caux],F,_),
estado_final(N),
reverse([N|Caux],C),
write(’Estado final encontrado: ’), write(N), nl,
write(’Camino encontrado: ’), write(C),nl,
write(’Coste: ’), write(Coste).
busca_con_coste(M,F,C,Coste) :selecciona(N,F,F1),
sucesores_3(N,NN),
nueva_frontera(M,NN,F1,F2),
busca_con_coste(M,F2,C,Coste).
IIA 2010–11
Búsqueda sin información
27
Búsqueda con menor coste
⊲
Auxliares
% sucesor(Origen,Destino,Coste)
sucesores_3(Coste1-[N|C],M):findall(Coste-[Nuevo_nodo,N|C],
((sucesor(N,Nuevo_nodo,CNN),
not(member(Nuevo_nodo,[N|C])),
Coste is Coste1 + CNN)),
M).
selecciona(N,[N|F],F).
IIA 2010–11
Búsqueda sin información
28
Búsqueda con menor coste
⊲
En este caso ordenamos la nueva frontera por coste:
nueva_frontera(menor_coste,NN,F1,F3):!,
append(NN,F1,F2),
sort(F2,F3).
⊲
sort(L1,L2) se verifica si L2 es la lista formada a partir de L1
ordenando sus elementos y eliminando duplicados.
IIA 2010–11
Búsqueda sin información
29
Bibiliografı́a
⊲
⊲
⊲
Bratko, I. Prolog, Programming for Artificial Intelligence, Third
Edition, Addison Wesley 2001.
Russell, S. y Norvig, P. Artificial Intelligence: A Modern Approach Prentice Hall International, 1995.
Poole, D., Mackworth, A. y Goebel, R. Computational Intelligence A Logical Approach. Oxford University Press, New York,
1998.
IIA 2010–11
Búsqueda sin información
30
Descargar