Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INGENIERÍA EN INFORMÁTICA
INTELIGENCIA ARTIFICIAL
ESTUDIANTE: DARWIN TIPAN, JHONSON GARCIA
DOCENTE: MSC. CARLOS GUANO
SEMESTRE: OCTAVO “A-T “
FECHA:10/02/2020
Figura 2.Proceso de expansión mostrando el conjunto explored y la cola con prioridad frontier
ALGORITMO PARA BÚSQUEDA LIMITADA EN PROFUNDIDAD
El algoritmo para búsqueda en profundidad es una opción razonable para resolver problemas
grandes, dentro de la clase de problemas que se pueden resolver mediante técnicas de
búsqueda de soluciones. Su mayor ventaja reside en una moderada complejidad de
almacenamiento, pero tiene inconvenientes en forma de posibilidad de generar ramas de
longitud infinita que hacen que el algoritmo no sea completo.
En esta ocasión, vamos a describir una modificación sencilla al algoritmo general para
búsqueda en profundidad que trata de evitar el inconveniente de las ramas de longitud
infinita. (Sirota, etall. 2003).
Básicamente, vamos a proceder de la misma forma que para los algoritmos anteriores. El
concepto fundamental para definir el algoritmo sigue siendo el árbol de búsqueda para el
problema.
De nuevo, la característica distintiva del algoritmo que vamos a describir consiste en la forma
en la que construye el árbol de búsqueda, para tratar de localizar el nodo destino que nos
proporcionará la solución al problema.
Figura 1:Nodos
Este algoritmo usa exactamente la misma idea que ya vimos en el algoritmo para búsqueda
en profundidad. La novedad consiste en tratar de estimar a priori cual es la máxima
profundidad L (medida en arcos desde el origen hasta el nodo que se está explorando) que el
algoritmo va a permitir. (Sirota, etall. 2003)
Cuando el algoritmo alcance nodos a profundidad L, no los expandirá para seguir a sus
sucesores y operará como si no tuvieran sucesores, es como si esos posibles sucesores no
existieran.
De esta forma, se evita la posibilidad de que el algoritmo genere ramas de longitud infinita,
ya sea porque hay posibilidad de que se generen bucles en el grafo de estados del problema
o porque, efectivamente, hay muchos estados posibles para el problema y pueden aparecer
ramas demasiado largas en el árbol de búsqueda. (Rihawi. 2009).
La cuestión de los bucles en el grafo de estados del problema se podía salvar con la variante
denominada búsqueda con traza en profundidad, que ya comentamos cuando describimos el
algoritmo para búsqueda en profundidad. Esta variante es más eficiente que la búsqueda
limitada en profundidad para detectar bucles.
Pero la cuestión de aparición de ramas infinitas por existir demasiados estados en el problema
no podíamos salvarla y exigíamos problemas que no fueran capaces de generar ramas
infinitas en el árbol de búsqueda. Con el algoritmo para búsqueda limitada en profundidad
podemos eliminar esta restricción sobre los problemas, pero debemos fijar una profundidad
máxima L.
Frontera común
Una vez que pongamos a funcionar de forma simultánea ambas instancias del algoritmo
para búsqueda en anchura, va a suceder que en determinada iteración las fronteras de ambas
instancias van a colisionar, en el sentido de que ambas fronteras tendrán al menos un nodo
en común (Paz, 2018)
Una vez que se haya localizado una frontera común (que puede ser un único nodo),
tenemos una solución al problema, que resulta de unir las secuencias de nodos que han
localizado ambos algoritmos para llegar a esa frontera. La primera instancia nos
proporciona el camino hasta la frontera común y la segunda instancia nos descubre el resto
del camino hasta el nodo destino (Paz, 2018)
Pero en el caso de la búsqueda bidireccional, cada una de las instancias vendrá a explorar
una profundidad del orden de d/2, así que la complejidad de almacenamiento de la
búsqueda bidireccional vendrá a ser el doble de lo que necesita la búsqueda en anchura para
una profundidad d/2. (Paz, 2018)
Una de las formas para intentar reducir este tiempo de búsqueda a cotas más razonables pasa
por hacer intervenir dentro del funcionamiento del algoritmo de búsqueda conocimiento
adicional sobre el problema que se está intentando resolver. En consecuencia, perderemos en
generalidad, a cambio de ganar en eficiencia temporal (Romero, 2019)
Al igual que se hace con la búsqueda ciega, hemos de definir qué entendemos por búsqueda
del óptimo, por lo que hemos de dar alguna medida del coste de obtener una solución. En
general, este coste se medirá sobre el camino que nos lleva desde el estado inicial del
problema hasta el estado final. No siempre es una medida factible ni deseable, pero nos
centraremos en problemas en los que esta medida del óptimo tenga sentido. Para poder
calcular este coste de forma efectiva, tendremos un coste asociado a los operadores que
permiten pasar de un estado a otro (Romero, 2019).
Según (Romero, 2019). menciona que, en primer lugar, tendremos el coste del camino
recorrido, que podremos calcular simplemente sumando los costes de los operadores
aplicados desde el estado inicial hasta el nodo actual. En consecuencia, este coste es algo
que se puede calcular con exactitud.
En segundo lugar, tendremos un coste más difícil de determinar, el coste del camino que
nos queda por recorrer hasta el estado final. Dado que lo desconocemos, tendremos que
utilizar el conocimiento del que disponemos del problema para obtener una aproximación.
Es aquí donde interviene el adjetivo de "heurística" que se aplica a este tipo de algoritmos
de búsqueda.
Referencias
Hernandez, R. (2017). Búsquedas bidireccional. Obtenido de
https://advanceintelligence.wordpress.com/2014/10/16/busqueda-bidireccional/