Está en la página 1de 8

UNIVERSIDAD POLITÉCNICA ESTATAL DEL CARCHI

INGENIERÍA EN INFORMÁTICA
INTELIGENCIA ARTIFICIAL
ESTUDIANTE: DARWIN TIPAN, JHONSON GARCIA
DOCENTE: MSC. CARLOS GUANO
SEMESTRE: OCTAVO “A-T “
FECHA:10/02/2020

BÚSQUEDA DE COSTO UNIFORME

En ciencia de la computación, la búsqueda de costo uniforme (bcu) es un algoritmo


de búsqueda no informada utilizado para recorrer sobre grafos el camino de costo mínimo
entre un nodo raíz y un nodo destino.
la búsqueda comienza por el nodo raíz y continúa visitando el siguiente nodo que
tiene menor costo total desde la raíz. los nodos son visitados de esta manera hasta que
el nodo destino es alcanzado. Típicamente, el algoritmo implica la expansión de
nodos mediante la adición, a una cola con prioridad, de todos los nodos vecinos no
expandidos que están conectados al último nodo analizado. en la cola, cada nodo se
asocia con su costo total desde la raíz, donde se les da mayor prioridad a los caminos
de costo mínimo. el nodo en la cabeza de la cola es expandido, adicionando sus nodos
vecinos con el costo total desde la raíz hasta el nodo respectivo.
la búsqueda de costo uniforme es completa y óptima si el costo de cada paso excede
algún límite eps positivo.1 el tiempo para el caso peor y la complejidad espacial es o(b1 +
c*/ε), donde c* es el costo de la solución óptima y b es el factor de ramificación. cuando
todos los costos ENTRE LOS NODOS SON IGUALES, ESTO SE CONVIERTE EN O(BD
+ 1).2
Ejemplo
Pseudocode de búsqueda de costo uniforme

Figura 1.Pseudocode de búsqueda de costo uniforme

proceso de expansión mostrando el conjunto "explored" y la cola con prioridad


"frontier":

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).

Construcción del árbol de búsqueda

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.

Búsqueda limitada en profundidad

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)

Algoritmo para búsqueda limitada en profundidad

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.

En general, vamos a denominar diámetro del problema a la mayor profundidad L a la que


puede hallarse una solución al mismo. De esta forma, podemos describir el algoritmo para
búsqueda limitada en profundidad como una variante del algoritmo para búsqueda en
profundidad que se limita a explorar sólo el diámetro del problema.

Lo que no cambia respecto al algoritmo para búsqueda en profundidad es la exigencia de que


no pueda resultar un número infinito de descendientes al expandir un nodo, porque el
algoritmo podría quedar fácilmente atrapado en uno de estos nodos. (Rihawi. 2009).
BUSCAR BIDIRECCIONAL

Buscar bidireccionalmente, es como su nombre lo indica, búsquedas en dos direcciones al


mismo tiempo: uno hacia adelante desde el estado inicial y el otro hacia atrás de la parte final.
Esto se hace generalmente mediante la expansión de árbol con factor de ramificación b y la
distancia desde el principio hasta el objetivo es d. La búsqueda se detiene cuando búsquedas
desde ambas direcciones se reúnen en el centro. Búsqueda bidireccional es un algoritmo de
búsqueda de fuerza bruta que requiera un estado objetivo explícito en lugar de simplemente
una prueba para una condición meta (Hernandez, 2017)

Figura 2: Búsqueda Bidireccional

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)

Si la profundidad del nodo destino en el árbol de búsqueda original es d, es de esperar que


ambas instancias del algoritmo confluyan en una frontera común a profundidad d/2.

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)

Ventajas e inconvenientes de la búsqueda bidireccional

Básicamente, lo que tenemos es el algoritmo para búsqueda en anchura ejecutado de forma


que el tamaño de la frontera no se dispara por tener que llegar a grandes profundidades. En
este sentido, el algoritmo para búsqueda bidireccional es completo porque tarde o temprano
ambas instancias de búsqueda van a coincidir en una frontera común.

No es óptimo, de la misma forma que no lo es el algoritmo para búsqueda en anchura. Es


decir, sólo es óptimo si la función de coste es una función monótona respecto de la longitud
de cada solución (medida en número de nodos que contiene).

Rendimiento de la búsqueda bidireccional

Siendo d la profundidad del nodo destino en el árbol de búsqueda original y h el número


promedio de descendientes de cada nodo en el árbol, la complejidad para almacenamiento
de la búsqueda en anchura es del orden de O(hd), que es bastante grande y es el mayor
problema del algoritmo para búsqueda en anchura (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)

BÚSQUEDA INFORMADA O HEURÍSTICA

Es evidente que los algoritmos de búsqueda ciega (o no informada) serán incapaces de


encontrar soluciones en problemas en los que el tamaño del espacio de búsqueda sea grande,
ya que todos ellos tienen un coste temporal que es exponencial en el tamaño del dato de
entrada, por lo que cuando se aplican a problemas reales el tiempo para encontrar la mejor
solución a un problema no es asumible.

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)

Figura 3: Búsqueda Informada

Calculando costes para optimizar

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).

En la mayoría de los problemas, debido al tamaño del espacio de búsqueda, no podemos


plantearnos generar todo el grafo asociado de una vez, sino que deber ser generado a
medida que es explorado, por lo que se tienen dos elementos fundamentales que intervienen
en el coste del camino que va desde el estado inicial hasta la solución que buscamos:

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/

Paz, F. (2018). Algoritmo para búsqueda bidireccional. Obtenido de


https://www.revolucionia.com/2018/01/Algoritmo_para_busqueda_bidireccional.html

Romero, S. (2019). Búsquedas Informadas. Obtenido de http://www.cs.us.es/~fsancho/?e=62

También podría gustarte