fbpx
Wikipedia

Algoritmos de búsqueda en grafos

Los algoritmos de búsqueda en grafos nacen por la necesidad de crear un mecanismo de navegación autónoma, bien sea de robots, coches, o personajes en un videojuego. Algunos de los más conocidos son DFS, BFS, A*, IDA*, Fringe Search o D*.

Descripción

Un grafo, representa un conjunto de nodos unidos en una red. Si dos nodos están unidos, al viajar de uno a otro se considerara sucesor el nodo al que nos movemos, y predecesor el nodo del que venimos. Además, normalmente existirá un coste vinculado al desplazamiento entre nodos. Un algoritmo de búsqueda tratará de encontrar un camino óptimo entre dos nodos como por ejemplo un camino que minimice el coste de desplazamiento, o el número de pasos a realizar. La principal diferencia entre los algoritmos es la información que guardan acerca del grafo. Algunos de ellos no guardan información alguna, simplemente expanden la búsqueda desde el nodo inicial, hasta que se llega al nodo final, otros guardan el coste de viajar desde el origen hasta ese nodo, o incluso una estimación de lo prometedor que es un nodo para conducir el camino a su objetivo. La expansión de la búsqueda se realiza en forma de árbol. Partiendo del nodo inicial, se extenderá la búsqueda a sus nodos vecinos, de cada uno de estos nodos vecinos, a sus respectivos nodos vecinos, y así hasta que uno de los nodos a los que se expande la búsqueda es el nodo objetivo. En esta página se desarrollará un algoritmo de búsqueda lo suficientemente general para trabajar en la mayoría de los grafos, y que da paso a otros métodos de búsqueda más complejos.

Notación

El algoritmo consta de dos listas, Abierta, y Cerrada. En la lista Abierta se guardan los nodos que aún no se han expandido para la búsqueda, que en otras palabras, serían las hojas de un árbol. En la lista Cerrada, se guardan los nodos que ya se han procesado y expandido, estos nodos se guardan porque la expansión de la búsqueda podría intentar volver a pasar por uno de esos nodos y de estar almacenados, se tiene constancia de los nodos que ya se han procesado. Además, cada nodo, almacenará información a cerca de quien es su nodo predecesor.

Ejemplo de algoritmo simple

Pseudocódigo de búsqueda

 

 

 

 

 
 
 
 
 
 
 
 
 
 
 
 

 

Explicación del algoritmo

Primero se crean dos listas que almacenarán nodos, la lista Abiertos, que contiene los nodos que se tienen que expandir, y la lista Cerrados que contiene los que ya han sido expandidos. El nodo de origen, llamado O en este caso, se mete en la lista de Abiertos para ser expandido. En este punto, se inicia la propagación de la búsqueda, se crea un bucle que acabará en dos posibles ocasiones: Cuando la lista Abiertos este vacía, o cuando se encuentre el nodo destino. El bucle consiste en varios pasos: Primero se obtiene el primer nodo de la lista Abiertos. El nodo a coger el arbitrario, en otros algoritmos se cogería un nodo que cumpliera ciertas propiedades, pero no es lo que se busca aquí. Si esta lista está vacía, quiere decir que no quedan más candidatos para la expansión, y aun así no se encontró el destino, el algoritmo ha fallado. Por otra parte, si el nodo que cogimos de la lista Abiertos es el destino, el algoritmo habrá acabado, ya que hemos encontrado el destino. El camino entre el origen y el destino es un conjunto de nodos que se obtendrán guardando cada predecesor del nodo destino. En otro caso, se seguirá expandiendo la lista, obteniendo una lista de sucesores del nodo actual, y guardando en la lista Abiertos, aquellos nodos que no estuvieran antes en una lista, o con otras palabras, aquellos nodos a los que aún no se había llegado. De esta forma, el algoritmo acabará encontrando el destino, o recorriendo todo el mapa.

Efectividad

 
Nota: La animación tiene un fallo, ya que el camino debería de haber empezado en dirección norte en vez de en dirección oeste. Esto ha pasado porque no se metió el cuadro destino en la lista abierta en el momento oportuno (se metió dos turnos más tarde). El algoritmo trata de llegar desde el cuadro verde (el origen), hasta el cuadro rojo (el destino). La zona negra es un nodo por el que no puede pasar. Siguiendo el algoritmo, el nodo inicial se irá expandiendo, pasando a estar el nodo actual en la lista Cerrados (color violeta) y metiendo otros nodos en la lista de Abiertos (color azul). Además cada nodo almacenará quien es su predecesor, que está simbolizado con las muescas en los bordes de los cuadrados. Una vez que la expansión alcanza el nodo destino, se genera un camino siguiendo la cadena de predecesores.

Como se aprecia, la expansión se realiza sin orientación alguna, a lo largo y ancho del espacio. Esto aumentará considerablemente el tiempo de computación, ya que se procesan muchos más nodos que si la expansión estuviera orientada en la dirección del destino. Otro factor a tener en cuenta es que a pesar de haber alcanzado el nodo destino, el algoritmo no finaliza hasta que lo procesa, o en otras palabras, hasta que pasa a ser el primer nodo de la lista Abiertos. Estas dos taras, están relacionadas con la prioridad de búsqueda, y en algoritmos más avanzados se corrige mediante el uso de estimadores heurísticos como la distancia manhattan, o la distancia euclídea. Usando estos estimadores el algoritmo procesará primero los nodos de la lista abierta que tengan una menor distancia al origen, evitando así expansiones innecesarias.

Otra desventaja importante del algoritmo, es que no tiene capacidad para resolver cambios inesperados en el mapa. Una vez calculada la ruta, si un obstáculo se interpone en el camino obtenido no se hará absolutamente nada por evitarlo. Esto se resuelve en algoritmos como D*, que si tienen en cuenta estas variaciones.

Referencias

Programa en Java que ilustra el uso de algoritmos de búsqueda.

de ese mismo programa.

  •   Datos: Q5668333

algoritmos, búsqueda, grafos, algoritmos, búsqueda, grafos, nacen, necesidad, crear, mecanismo, navegación, autónoma, bien, robots, coches, personajes, videojuego, algunos, más, conocidos, fringe, search, Índice, descripción, notación, ejemplo, algoritmo, simp. Los algoritmos de busqueda en grafos nacen por la necesidad de crear un mecanismo de navegacion autonoma bien sea de robots coches o personajes en un videojuego Algunos de los mas conocidos son DFS BFS A IDA Fringe Search o D Indice 1 Descripcion 2 Notacion 3 Ejemplo de algoritmo simple 3 1 Pseudocodigo de busqueda 3 2 Explicacion del algoritmo 3 3 Efectividad 4 ReferenciasDescripcion EditarUn grafo representa un conjunto de nodos unidos en una red Si dos nodos estan unidos al viajar de uno a otro se considerara sucesor el nodo al que nos movemos y predecesor el nodo del que venimos Ademas normalmente existira un coste vinculado al desplazamiento entre nodos Un algoritmo de busqueda tratara de encontrar un camino optimo entre dos nodos como por ejemplo un camino que minimice el coste de desplazamiento o el numero de pasos a realizar La principal diferencia entre los algoritmos es la informacion que guardan acerca del grafo Algunos de ellos no guardan informacion alguna simplemente expanden la busqueda desde el nodo inicial hasta que se llega al nodo final otros guardan el coste de viajar desde el origen hasta ese nodo o incluso una estimacion de lo prometedor que es un nodo para conducir el camino a su objetivo La expansion de la busqueda se realiza en forma de arbol Partiendo del nodo inicial se extendera la busqueda a sus nodos vecinos de cada uno de estos nodos vecinos a sus respectivos nodos vecinos y asi hasta que uno de los nodos a los que se expande la busqueda es el nodo objetivo En esta pagina se desarrollara un algoritmo de busqueda lo suficientemente general para trabajar en la mayoria de los grafos y que da paso a otros metodos de busqueda mas complejos Notacion EditarEl algoritmo consta de dos listas Abierta y Cerrada En la lista Abierta se guardan los nodos que aun no se han expandido para la busqueda que en otras palabras serian las hojas de un arbol En la lista Cerrada se guardan los nodos que ya se han procesado y expandido estos nodos se guardan porque la expansion de la busqueda podria intentar volver a pasar por uno de esos nodos y de estar almacenados se tiene constancia de los nodos que ya se han procesado Ademas cada nodo almacenara informacion a cerca de quien es su nodo predecesor Ejemplo de algoritmo simple EditarPseudocodigo de busqueda Editar B u s q u e d a e n g r a f o displaystyle color BlueViolet Busqueda en grafo C r e a r d o s l i s t a s v a c i a s A b i e r t o s y C e r r a d o s displaystyle color Blue Crear color Sepia dos listas vacias color OliveGreen Abiertos color Sepia y color OliveGreen Cerrados M e t e r e l n o d o o r i g e n O e n l a l i s t a A b i e r t o s displaystyle color Blue Meter color Sepia el nodo origen color OliveGreen O color Sepia en la lista color OliveGreen Abiertos R e p e t i r displaystyle color Blue Repetir S i A b i e r t o s e s t a v a c i a e n t o n c e s displaystyle color Sepia Si color OliveGreen Abiertos esta vacia color Sepia entonces D e v o l v e r e r r o r displaystyle color Red Devolver error dd S e l e c c i o n a r e l p r i m e r n o d o N d e A b i e r t o s y p o n e r l o e n C e r r a d o s displaystyle color Sepia Seleccionar el primer nodo color OliveGreen N color Sepia de color OliveGreen Abiertos color Sepia y ponerlo en color OliveGreen Cerrados S i N D e s t i n o e n t o n c e s displaystyle color Sepia Si color OliveGreen N Destino color Sepia entonces D e v o l v e r N displaystyle color Magenta Devolver N dd R e c u e r d a q u e e s t e e s u n a l g o r i t m o d e b u s q u e d a e n u n g r a f o displaystyle color Gray Recuerda que este es un algoritmo de busqueda en un grafo dd P a r a o b t e n e r e l c a m i n o q u e u n e e l n o d o o r i g e n y d e s t i n o s e u t i l i z a r a o t r o a l g o r i t m o displaystyle color Gray Para obtener el camino que une el nodo origen y destino se utilizara otro algoritmo dd E x p a n d i r N o b t e n i e n d o u n c o n j u n t o d e s u c e s o r e s displaystyle color Blue Expandir color OliveGreen N color Sepia obteniendo un conjunto de sucesores P a r a c a d a S S u c e s o r e s N displaystyle color Sepia Para cada S in color Blue Sucesores color OliveGreen N color Sepia S i S A b i e r t a y S C e r r a d a e n t o n c e s displaystyle color Sepia Si color OliveGreen S color Sepia notin color OliveGreen Abierta color Sepia y color OliveGreen S color Sepia notin color OliveGreen Cerrada color Sepia entonces G u a r d a r N c o m o e l p r e d e c e s o r d e S displaystyle color Blue Guardar color OliveGreen N color Sepia como el predecesor de color OliveGreen S dd M e t e r S e n l a l i s t a A b i e r t o s displaystyle color Blue Meter color OliveGreen S color Sepia en la lista color OliveGreen Abiertos dd H a s t a q u e e l n o d o d e s t i n o s e h a y a e n c o n t r a d o displaystyle color Blue Hasta color Sepia que el nodo destino se haya encontrado Explicacion del algoritmo Editar Primero se crean dos listas que almacenaran nodos la lista Abiertos que contiene los nodos que se tienen que expandir y la lista Cerrados que contiene los que ya han sido expandidos El nodo de origen llamado O en este caso se mete en la lista de Abiertos para ser expandido En este punto se inicia la propagacion de la busqueda se crea un bucle que acabara en dos posibles ocasiones Cuando la lista Abiertos este vacia o cuando se encuentre el nodo destino El bucle consiste en varios pasos Primero se obtiene el primer nodo de la lista Abiertos El nodo a coger el arbitrario en otros algoritmos se cogeria un nodo que cumpliera ciertas propiedades pero no es lo que se busca aqui Si esta lista esta vacia quiere decir que no quedan mas candidatos para la expansion y aun asi no se encontro el destino el algoritmo ha fallado Por otra parte si el nodo que cogimos de la lista Abiertos es el destino el algoritmo habra acabado ya que hemos encontrado el destino El camino entre el origen y el destino es un conjunto de nodos que se obtendran guardando cada predecesor del nodo destino En otro caso se seguira expandiendo la lista obteniendo una lista de sucesores del nodo actual y guardando en la lista Abiertos aquellos nodos que no estuvieran antes en una lista o con otras palabras aquellos nodos a los que aun no se habia llegado De esta forma el algoritmo acabara encontrando el destino o recorriendo todo el mapa Efectividad Editar Nota La animacion tiene un fallo ya que el camino deberia de haber empezado en direccion norte en vez de en direccion oeste Esto ha pasado porque no se metio el cuadro destino en la lista abierta en el momento oportuno se metio dos turnos mas tarde El algoritmo trata de llegar desde el cuadro verde el origen hasta el cuadro rojo el destino La zona negra es un nodo por el que no puede pasar Siguiendo el algoritmo el nodo inicial se ira expandiendo pasando a estar el nodo actual en la lista Cerrados color violeta y metiendo otros nodos en la lista de Abiertos color azul Ademas cada nodo almacenara quien es su predecesor que esta simbolizado con las muescas en los bordes de los cuadrados Una vez que la expansion alcanza el nodo destino se genera un camino siguiendo la cadena de predecesores Como se aprecia la expansion se realiza sin orientacion alguna a lo largo y ancho del espacio Esto aumentara considerablemente el tiempo de computacion ya que se procesan muchos mas nodos que si la expansion estuviera orientada en la direccion del destino Otro factor a tener en cuenta es que a pesar de haber alcanzado el nodo destino el algoritmo no finaliza hasta que lo procesa o en otras palabras hasta que pasa a ser el primer nodo de la lista Abiertos Estas dos taras estan relacionadas con la prioridad de busqueda y en algoritmos mas avanzados se corrige mediante el uso de estimadores heuristicos como la distancia manhattan o la distancia euclidea Usando estos estimadores el algoritmo procesara primero los nodos de la lista abierta que tengan una menor distancia al origen evitando asi expansiones innecesarias Otra desventaja importante del algoritmo es que no tiene capacidad para resolver cambios inesperados en el mapa Una vez calculada la ruta si un obstaculo se interpone en el camino obtenido no se hara absolutamente nada por evitarlo Esto se resuelve en algoritmos como D que si tienen en cuenta estas variaciones Referencias EditarPrograma en Java que ilustra el uso de algoritmos de busqueda Codigo fuente de ese mismo programa Datos Q5668333 Obtenido de https es wikipedia org w index php title Algoritmos de busqueda en grafos amp oldid 134782749, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos