Está en la página 1de 46

ALGORITMOS DE BÚSQUEDA

Ing. Ronald A. Rentería Ayquipa


Algoritmos de Búsqueda Tipos

Tipos de algoritmos de búsqueda

 ALGORITMOS DE BÚSQUEDA NO INFORMADA


 ALGORITMOS DE BÚSQUEDA HEURÍSTICA

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Introducción

Búsqueda no informada
 Conocidos como algoritmos de búsqueda ciega
 No dependen de la información del problema
 Son generales (aplicables a cualquier problema)
 Algoritmos exhaustivos (pueden llegar a recorrer todo el
árbol para llegar a una solución)
 Aplicables a problemas pequeños
 Políticas de recorrido:
 En anchura  (Anchura prioritaria)
 En profundidad  (Profundidad prioritaria, Profundidad iterativa)

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Búsqueda en anchura prioritaria

Búsqueda en Anchura Prioritaria


 Los nodos se visitan y generan por niveles
 La estructura para los nodos abiertos es una cola (FIFO)
 Un nodo es visitado cuando todos los nodos de los
niveles superiores y sus hermanos precedentes han sido
visitados
 Características:
 Completitud: El algoritmo siempre encuentra una solución
 Complejidad temporal: Exponencial respecto al factor de
ramificación y la profundidad de la solución O(rp)
 Complejidad espacial: Exponencial respecto al factor de
ramificación y la profundidad de la solución O(rp)
 Optimalidad: La solución que se encuentra es óptima en
número de niveles desde la raíz

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Búsqueda en profundidad prioritaria

Búsqueda en Profundidad Prioritaria


 Los nodos se visitan y generan buscando los nodos a mayor
profundidad y retrocediendo cuando no se encuentran nodos
sucesores
 La estructura para los nodos abiertos es una pila (LIFO)
 Para garantizar que el algoritmo acaba (caminos infinitos) debe
imponerse un límite en la profundidad de exploración (profundidad
limitada)
 Características
 Completitud: El algoritmo encuentra una solución si se impone un límite
de profundidad y existe una solución dentro de ese límite
 Complejidad temporal: Exponencial respecto al factor de ramificación y
la profundidad del límite de exploración O(rp)
 Complejidad espacial: En el caso de no controlar los nodos repetidos el
coste es lineal respecto al factor de ramificación y el límite de
profundidad O(rp). Si tratamos repetidos el coste es igual que en anchura. Si
la implementación es recursiva el coste es O(p)
 Optimalidad: No se garantiza que la solución sea óptima

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Búsqueda en profundidad limitada

Búsqueda en Profundidad Limitada

 La estructura de abiertos es ahora una pila


 Se dejan de generar sucesores cuando se llega al límite de profundidad
 Esta modificación garantiza que el algoritmo acaba pero no una solución
 Si tratamos repetidos el ahorro en espacio es nulo

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Tratamiento repetidos

Tratamiento de nodos repetidos


 En anchura
 Si el repetido está en la estructura de nodos cerrados podemos
descartarlo. Tendrá una profundidad igual o mayor al repetido
cerrado (por tanto un costo igual o mayor)
 Si el repetido está en la estructura de nodos abiertos podemos
descartarlo. Tendrá una profundidad igual o mayor al repetido abierto
(por tanto un costo igual o mayor)

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Tratamiento repetidos

Tratamiento de nodos repetidos


 En profundidad
 Si el repetido está en la estructura de nodos cerrados lo dejaremos,
si tiene una profundidad menor
 Si el repetido está en la estructura de nodos abiertos podemos
olvidarlo, seguro que tiene una profundidad mayor

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Profundidad iterativa

Búsqueda en profundidad iterativa (ID)


 Intenta combinar el comportamiento espacial de la búsqueda en
profundidad (DFS) con la optimalidad de la búsqueda en anchura
(BFS), por esto es el más ventajoso de los anteriores.
 El algoritmo consiste en realizar búsquedas en profundidad
sucesivas con un nivel de profundidad máximo acotado y creciente
en cada iteración
 Así se consigue el comportamiento de BFS pero sin su coste
espacial, ya que la exploración es en profundidad, y además los
nodos se regeneran a cada iteración
 Además esto permite evitar los casos en que DFS no acaba (existen
ramas infinitas)
 En la primera iteración la profundidad máxima será 1 y este valor irá
aumentando en sucesivas iteraciones hasta llegar a la solución
 Para garantizar que el algoritmo acaba si no hay solución, se puede
definir una cota máxima de profundidad en la exploración

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Profundidad iterativa

Búsqueda en profundidad iterativa (ID)

 Iteración 1: 1
 Iteración 2: 2, 3, 4, 5
 Iteración 3: 6, 7, 8, 9, …, 21
Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa
Búsqueda no informada Profundidad iterativa

Búsqueda en profundidad iterativa (ID)

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Profundidad iterativa

Búsqueda en profundidad iterativa (ID)


 Completitud: El algoritmo siempre encontrará la solución
 Complejidad temporal: La misma que la búsqueda en
anchura. El regenerar el árbol en cada iteración solo
añade un factor constante a la función de coste O(rp)
 Complejidad espacial: Igual que en la búsqueda en
profundidad
 Optimalidad: La solución es óptima igual que en la
búsqueda en anchura

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Ejemplos

Ejemplos
 En esta sección vamos a ver ejemplos de ejecución de los
algoritmos vistos anteriormente. Utilizaremos los
algoritmos de búsqueda ciega para encontrar una
solución (camino entre los nodos inicial y final)
 Supondremos que hacemos un tratamiento de los nodos
repetidos durante la ejecución del algoritmo. Hay que
tener en cuenta también que para poder recuperar el
camino, los nodos deben tener un enlace al padre que los
ha generado.

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Ejemplos

Ejemplos
 En la figura, podemos ver el grafo que vamos a utilizar en
los siguientes ejemplos. Este grafo tiene como nodo inicial
el 1 y como nodo final el 8, todos los caminos son
dirigidos y tienen el mismo coste.

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Ejemplos

Ejemplo: Búsqueda en anchura


1. Este algoritmo comenzaría encolando el nodo inicial (nodo 1).
2. Los nodos sucesores del primer nodo son los nodos 2 y 3, que pasarían a ser encolados
3. El siguiente nodo extraído de la cola sería el 2, que tiene como sucesores el 4 y el 6.
4. El siguiente nodo extraído de la cola sería el 3, que tiene como sucesores el 4, el 5 y el 7. Como el
4 está repetido no se encolaría al ser de la misma profundidad que el nodo repetido.
5. El siguiente nodo extraído de la cola sería el 4, que tiene como sucesor el 5. Como el 5 está
repetido no se encolaría al tener profundidad mayor que el nodo repetido.
6. El siguiente nodo extraído de la cola sería el 6, que tiene como sucesores el 7 y el 8. Como el 7
está repetido no se encolaría al tener profundidad mayor que el nodo repetido.
7. El siguiente nodo extraído de la cola sería el 5, que tiene como sucesores el 6 y el 7. Como los dos
nodos corresponden a nodos repetidos con profundidad menor, no se encolarían.
8. El siguiente nodo extraído de la cola sería el 7, que tiene como sucesor el 8. Como el 8 está
repetido no se encolaría al tener la misma profundidad que el nodo repetido.
9. El siguiente nodo extraído de la cola sería el 8 que es el nodo solución y por tanto acabaría la
ejecución.

 En la figura sgte. se puede ver el árbol de búsqueda que se genera. En el caso de los nodos
cerrados necesitamos una estructura adicional para controlar los nodos repetidos (resultado)

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Ejemplos

Ejemplo: Búsqueda en anchura

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Ejemplos

Ejemplo: Búsqueda en profundidad


1. Este algoritmo comenzaría empilando el nodo inicial (nodo 1).
2. Los nodos sucesores del primer nodo son los nodos 2 y 3, que pasarían a
ser empilados
3. El siguiente nodo extraído de la pila sería el 2, que tiene como sucesores el
4 y el 6.
4. El siguiente nodo extraído de la pila sería el 4, que tiene como sucesor el 5.
5. El siguiente nodo extraído de la pila sería el 5, que tiene como sucesores el
6 y el 7. Como el nodo 6 está en la pila en con nivel superior
descartaríamos este nodo.
6. El siguiente nodo extraído de la pila sería el 7, que tiene como sucesor el 8.
7. El siguiente nodo extraído de la pila sería el 8 que es el nodo solución y
por tanto acabaría la ejecución.
 En la figura sgte. se puede ver el árbol de búsqueda que se genera. Fijarse
que en este caso el camino es más largo que el encontrado con el
algoritmo anterior. Para el control de repetidos, si se quiere ahorrar
espacio, pueden solo tenerse en cuenta los nodos que hay en la pila como
se ha hecho en el ejemplo, esto evitará que podamos entrar en bucle y que
tengamos que tener una estructura para los nodos cerrados.
Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa
Búsqueda no informada Ejemplos

Ejemplo: Búsqueda en profundidad

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Ejemplos

Ejemplo: Búsqueda en profundidad iterativa


 1. Primera iteración (profundidad 1)
 1.1 Se comenzaría empilando el nodo inicial (nodo 1).
 1.2 Al extraer este nodo de la pila habríamos visitado todos los caminos de profundidad 1 y con eso acabaríamos la iteración
 2. Segunda Iteración (profundidad 2)
 2.1 Se comenzaría empilando el nodo inicial (nodo 1).
 2.2 Los nodos sucesores del primer nodo son los nodos 2 y 3, que pasarían a ser empilados.
 2.3 El siguiente nodo extraído de la pila sería el 2, los nodos sucesores estarían a mayor profundidad que el límite actual, no los empilaríamos.
 2.4 El siguiente nodo extraído de la pila sería el 3, los nodos sucesores estarían a mayor profundidad que el límite actual, no los empilaríamos. Al extraer este
nodo de la pila habríamos visitado todos los caminos de profundidad 2 y con eso acabaríamos la iteración.
 3. Tercera Iteración (profundidad 3)
 3.1 Se comenzaría empilando el nodo inicial (nodo 1).
 3.2 Los nodos sucesores del primer nodo son los nodos 2 y 3, que pasarían a ser empilados.
 3.3 El siguiente nodo extraído de la pila sería el 2, que tiene como sucesores el 4 y el 6.
 3.4 El siguiente nodo extraído de la pila sería el 4, los nodos sucesores estarían a mayor profundidad que el límite actual, no los empilaríamos.
 3.5 El siguiente nodo extraído de la pila sería el 6, los nodos sucesores estarían a mayor profundidad que el límite actual, no los empilaríamos.
 3.6 El siguiente nodo extraído de la pila sería el 3, que tiene como sucesores el 4, el 5 y el 7.
 3.7 El siguiente nodo extraído de la pila sería el 4, los nodos sucesores estarían a mayor profundidad que el límite actual, no los empilaríamos.
 3.8 El siguiente nodo extraído de la pila sería el 5, los nodos sucesores estarían a mayor profundidad que el límite actual, no los empilaríamos.
 3.9 El siguiente nodo extraído de la pila sería el 7, los nodos sucesores estarían a mayor profundidad que el límite actual, no los empilaríamos. Al extraer este
nodo de la pila habríamos visitado todos los caminos de profundidad 3 y con eso acabaríamos la iteración.
 4. Cuarta Iteración (profundidad 4)
 4.1 Se comenzaría empilando el nodo inicial (nodo 1).
 4.2 Los nodos sucesores del primer nodo son los nodos 2 y 3, que pasarían a ser empilados.
 4.3 El siguiente nodo extraído de la pila sería el 2, que tiene como sucesores el 4 y el 6.
 4.4 El siguiente nodo extraído de la pila sería el 4, que tiene como sucesor el 5.
 4.5 El siguiente nodo extraído de la pila sería el 5, los nodos sucesores estarían a mayor profundidad que el límite actual, no los empilaríamos.
 4.6 El siguiente nodo extraído de la pila sería el 6, que tiene como sucesores el 7 y el 8.
 4.7 El siguiente nodo extraído de la pila sería el 7, los nodos sucesores estarían a mayor profundidad que el límite actual, no los empilaríamos.
 4.8 El siguiente nodo extraído de la pila sería el 8 que es el nodo solución y por tanto acabaría la ejecución.

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda no informada Ejemplos

Ejemplo: Búsqueda en profundidad iterativa


 En la figura, se puede ver el árbol
de búsqueda que se genera. En
este caso encontramos el camino
más corto, ya que este algoritmo
explora los caminos en orden de
longitud como la búsqueda en
anchura. Para mantener la ganancia
en espacio en este caso no se han
guardado los nodos cerraros, es
por ello que no se ha tratado en
nodo 4 en el paso 3.7 como
repetido.

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Introducción

BÚSQUEDA HEURÍSTICA
 Supone la existencia de una función de evaluación que debe
medir la distancia estimada al (a un) objetivo (h(n))
 Esta función de evaluación se utiliza para guiar el proceso
haciendo que en cada momento se seleccione el estado o las
operaciones más prometedoras
 No siempre se garantiza encontrar una solución (de existir
ésta)
 No siempre se garantiza encontrar la solución más próxima (la
que se encuentra a una distancia o número de operaciones
menor)
 Existen múltiples algoritmos:
 Branch and Bound, Best First Search
 A, A*
 IDA*
 Búsqueda local (Hill climbing, Simulated annealing, Alg. Genéticos)

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Branch and Bound

Branch and Bound


 Ramificación y acotación
 Generaliza las búsquedas en anchura prioritaria (BFS) y
en profundidad prioritaria (DFS)
 Se guarda para cada estado el coste (hasta el momento)
de llegar desde el estado inicial a dicho estado. Guarda el
coste mínimo global hasta el momento
 Deja de explorar una rama cuando su coste es mayor que
el mínimo actual
 Si el coste de los nodos es uniforme equivale a una
búsqueda por niveles

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Greedy best first

Greedy Best First

 La estructura de abiertos es una cola con prioridad


 La prioridad la marca la función de estimación (coste del camino que falta
hasta la solución)
 En cada iteración se escoge el nodo más cercano a la solución (el primero
de la cola), esto provoca que no se garantice la solución optima

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Heurísticos

Importancia del estimador

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Heurísticos

Importancia del estimador

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Heurísticos

Heurísticos

 Posibles heurísticos (estimadores del coste a la solución)


 h(n) = w(n) = #desclasificados
 h(n) = p(n) = suma de distancias a la posición final
 h(n) = p(n) + 3 · s(n)
donde s(n) se obtiene recorriendo las posiciones no centrales y si una
ficha no va seguida por su sucesora sumar 2, si hay ficha en el centro
sumar 1

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Heurísticos

Costes

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda A*

Búsqueda A*
 La función de evaluación tiene dos componentes:
1. coste para ir desde el (un) inicio al nodo actual
2. coste (estimado) para ir desde el nodo actual a una solución
f (n) = g(n) + h(n)
 f es un valor estimado del coste total del camino que pasa por n
 h (heurístico) es un valor estimado de lo que falta para llegar desde
n al (a un) objetivo
 g es un coste real (lo gastado por el camino más corto conocido
hasta n)
 La preferencia es siempre del nodo con menor f, en caso
de empate, la preferencia es del nodo con menor h.

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda A*

Búsqueda A*
 Con esta función podemos variar el comportamiento del
algoritmo
 Si n h(n) = 0, todo estará controlado por g (estaremos en
presencia de un algoritmo de Branch & Bound)
 Si n h(n) = 0 y además el coste de todos los arcos es 1 estaremos
realizando una búsqueda en anchura. Si dicho coste fuera 0, la
búsqueda sería aleatoria
 Al ser h una estimación del verdadero coste h*, cuanto más se
aproxime h a h* mayor será la tendencia a explorar en
profundidad. Si h = h* entonces A* converge directamente hacia el
objetivo
 Se puede demostrar que si h(n) es un minorante del coste
real h*(n), es decir si n h(n)  h*(n) A* encontrará (de
haberlo) un camino óptimo.
Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa
Búsqueda heurística Búsqueda A*

El algoritmo A*

 La estructura de abiertos es una cola con prioridad


 La prioridad la marca la función de estimación (f (n) = g(n) + h(n))
 En cada iteración se escoge el mejor camino (el primero de la cola)
 ¡Es el mismo algoritmo que el Best First!

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda A*

Tratamiento de repetidos
 Si es un repetido que está en la estructura de abiertos
 Si su coste es menor substituimos el coste por el nuevo, esto
podrá variar su posición en la estructura de abiertos
 Si su coste es igual o mayor nos olvidamos del nodo
 Si es un repetido que esta en la estructura de cerrados
 Si su coste es menor reabrimos el nodo insertándolo en la
estructura de abiertos con el nuevo coste ¡Atención! No
hacemos nada con sus sucesores, ya se reabrirán si hace falta
 Si su coste es mayor o igual nos olvidamos del nodo

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda A*

A* Ejemplo

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda A*

A* Ejemplo

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda A*

A* Ejemplo

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda A*

A* Ejemplo

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda A*

A* Ejemplo

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda A*

A* Ejemplo

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda A*

A* Ejemplo

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda A*

A* Ejemplo

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda A*

A* Ejemplo

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda A*

A* Ejemplo

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda A*

A* Ejemplo

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda A*

A* Ejemplo

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda IDA*

Búsqueda IDA*
 Similar a ID (es decir iteración de
búsqueda en profundidad con un
límite en la búsqueda)
 En ID el límite lo daba una cota
máxima en la profundidad
 En IDA* el límite lo da una cota
máxima sobre el valor de la
función f
 ¡Ojo! La búsqueda es una DFS
normal y corriente, el heurístico f
sólo se utiliza para podar
 Empezamos con corte = f(inicial)

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda IDA*

Algoritmo IDA*

 La función generar_sucesores solo genera aquellos con una f menor o igual


a la del límite de la iteración
 La estructura de abiertos es ahora una pila (búsqueda en profundidad)
 Hemos de tener en cuenta que si tratamos los nodos repetidos el ahorro
en espacio es nulo

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa


Búsqueda heurística Búsqueda con limitación de memoria

Otros algoritmos con limitación de memoria


 Las reexpansiones de IDA* pueden suponer un elevado
coste temporal
 Existen algoritmos que por lo general reexpanden menos
nodos
 Su funcionamiento se basa en eliminar los nodos menos
prometedores y guardar información que permita
reexpandirlos
 Ejemplos:
 Best first recursivo
 Memory Bound A* (MA*)

Inteligencia Artificial Ing. Ronald A. Rentería Ayquipa

También podría gustarte