fbpx
Wikipedia

Algoritmo de búsqueda A*

El algoritmo de búsqueda A* (pronunciado "A asterisco", "A estrella" o "Astar" en inglés) se clasifica dentro de los algoritmos de búsqueda en grafos de tipo heurístico o informado. Presentado por primera vez en 1968 por Peter E. Hart, Nils J. Nilsson y Bertram Raphael, el algoritmo A* encuentra, siempre y cuando se cumplan unas determinadas condiciones, el camino de menor coste entre un nodo origen y uno objetivo.

Ejemplo de aplicación del algoritmo A*.

Motivación y descripción

El problema de algunos algoritmos de búsqueda en grafos informados, como puede ser el algoritmo voraz, es que se guían en exclusiva por la función heurística, la cual puede no indicar el camino de coste más bajo, o por el coste real de desplazarse de un nodo a otro (como los algoritmos de escalada), pudiéndose dar el caso de que sea necesario realizar un movimiento de coste mayor para alcanzar la solución. Es por ello bastante intuitivo el hecho de que un buen algoritmo de búsqueda informada debería tener en cuenta ambos factores, el valor heurístico de los nodos y el coste real del recorrido.

Así, el algoritmo A* utiliza una función de evaluación  , donde   representa el valor heurístico del nodo a evaluar desde el actual, n, hasta el final, y  , el coste real del camino recorrido para llegar a dicho nodo, n, desde el nodo inicial. A* mantiene dos estructuras de datos auxiliares, que podemos denominar abiertos, implementado como una cola de prioridad (ordenada por el valor   de cada nodo), y cerrados, donde se guarda la información de los nodos que ya han sido visitados. En cada paso del algoritmo, se expande el nodo que esté primero en abiertos, y en caso de que no sea un nodo objetivo, calcula la   de todos sus hijos, los inserta en abiertos, y pasa el nodo evaluado a cerrados.

El algoritmo es una combinación entre búsquedas del tipo primero en anchura con primero en profundidad: mientras que   tiende a primero en profundidad,   tiende a primero en anchura. De este modo, se cambia de camino de búsqueda cada vez que existen nodos más prometedores.

Propiedades

Como todo algoritmo de búsqueda en amplitud, A* es un algoritmo completo: en caso de existir una solución, siempre dará con ella.

Si para todo nodo n del grafo se cumple  , nos encontramos ante una búsqueda voraz. Si para todo nodo n del grafo se cumple  , A* pasa a ser una búsqueda de coste uniforme no informada.

Para garantizar la optimización del algoritmo, la función   debe ser heurística admisible, esto es, que no sobrestime el coste real de alcanzar el nodo objetivo.

De no cumplirse dicha condición, el algoritmo pasa a denominarse simplemente A, y a pesar de seguir siendo completo, no se asegura que el resultado obtenido sea el camino de coste mínimo. Asimismo, si garantizamos que   es consistente (o monótona), es decir, que para cualquier nodo   y cualquiera de sus sucesores, el coste estimado de alcanzar el objetivo desde n no es mayor que el de alcanzar el sucesor más el coste de alcanzar el objetivo desde el sucesor.

Complejidad computacional

La complejidad computacional del algoritmo está íntimamente relacionada con la calidad de la heurística que se utilice en el problema. En el caso peor, con una heurística de pésima calidad, la complejidad será exponencial, mientras que en el caso mejor, con una buena  , el algoritmo se ejecutará en tiempo lineal. Para que esto último suceda, se debe cumplir que

 

donde h' es una heurística óptima para el problema, como por ejemplo, el coste real de alcanzar el objetivo.

Complejidad en memoria

El espacio requerido por A* para ser ejecutado es su mayor problema. Dado que tiene que almacenar todos los posibles siguientes nodos de cada estado, la cantidad de memoria que requerirá será exponencial con respecto al tamaño del problema. Para solucionar este problema, se han propuesto diversas variaciones de este algoritmo, como pueden ser RTA*, IDA* o SMA*.

Implementación en pseudocódigo

Tratar punto

.:= .   // coste del camino hasta . caso . = . perteneciente a () si g(.) < g(.) entonces // (-----) // nos quedamos con el camino de menor coste .:= MEJORNODO actualizar g(.) y f'(.) propagar g a . de . eliminar . añadir . a ._MEJORNODO caso . = . perteneciente a )-----( si g(.) < g(.) entonces // nos quedamos con el camino de menor coste .:= MEJORNODO actualizar g(.) y f'(.) eliminar . añadir . a ._MEJORNODO caso . no estaba en ).( ni (.) añadir . a ).( añadir . a ._MEJORNODO f'(.) := g(.) + h'(.)


Implementación en pseudocódigo

ABIERTOS := [INICIAL] //inicialización CERRADOS := [] f'(INICIAL) := h'(INICIAL) repetir si ABIERTOS = [] entonces FALLO si no // quedan nodos extraer MEJORNODO de ABIERTOS con f' mí­nima // cola de prioridad mover MEJORNODO de ABIERTOS a CERRADOS si MEJORNODO contiene estado_objetivo entonces SOLUCION_ENCONTRADA := TRUE si no generar SUCESORES de MEJORNODO para cada SUCESOR hacer TRATAR_SUCESOR hasta SOLUCION_ENCONTRADA o FALLO

Tratar sucesor

SUCESOR.ANTERIOR := VIEJO // coste del camino hasta SUCESOR caso SUCESOR = VIEJO perteneciente a CERRADOS si g(SUCESOR) < g(VIEJO) entonces // (no si monotoní­a) // nos quedamos con el camino de menor coste VIEJO.ANTERIOR := MEJORNODO actualizar g(VIEJO) y f'(VIEJO) propagar g a sucesores de VIEJO eliminar SUCESOR añadir VIEJO a SUCESORES_MEJORNODO caso SUCESOR = VIEJO perteneciente a ABIERTOS si g(SUCESOR) < g(VIEJO) entonces // nos quedamos con el camino de menor coste VIEJO.ANTERIOR := MEJORNODO actualizar g(VIEJO) y f'(VIEJO) eliminar SUCESOR añadir VIEJO a SUCESORES_MEJORNODO caso SUCESOR no estaba en ABIERTOS ni CERRADOS añadir SUCESOR a ABIERTOS añadir SUCESOR a SUCESORES_MEJORNODO f'(SUCESOR) := g(SUCESOR) + h'(SUCESOR)

Observaciones

Como se mencionó anteriormente   es un estimador de   que informa la distancia al nodo objetivo, entonces

Si   hace un estimación perfecta de  , A* converge inmediatamente al objetivo.

Si   = 0, la función   controla la búsqueda.

Si   = 0 y   =0 la búsqueda será aleatoria.

Si   = 0 y   =1 o constante la búsqueda será Primero en Anchura.

Si   nunca sobrestima a   (o subestima), se garantiza encontrar el camino óptimo, pero se desperdicia esfuerzo explorando otras rutas que parecieron buenas.

Si   sobrestima a  , no puede garantizarse la consecución del camino del menor coste

Enlaces externos

  • Explicación interactiva de A* y código fuente.
  • Programa que ilustra el funcionamiento de varios algoritmos de búsqueda.
  •   Wikimedia Commons alberga una galería multimedia sobre Algoritmo de búsqueda A*.
  •   Datos: Q277680
  •   Multimedia: A* Algorithm

algoritmo, búsqueda, algoritmo, búsqueda, pronunciado, asterisco, estrella, astar, inglés, clasifica, dentro, algoritmos, búsqueda, grafos, tipo, heurístico, informado, presentado, primera, 1968, peter, hart, nils, nilsson, bertram, raphael, algoritmo, encuent. El algoritmo de busqueda A pronunciado A asterisco A estrella o Astar en ingles se clasifica dentro de los algoritmos de busqueda en grafos de tipo heuristico o informado Presentado por primera vez en 1968 por Peter E Hart Nils J Nilsson y Bertram Raphael el algoritmo A encuentra siempre y cuando se cumplan unas determinadas condiciones el camino de menor coste entre un nodo origen y uno objetivo Ejemplo de aplicacion del algoritmo A Indice 1 Motivacion y descripcion 2 Propiedades 3 Complejidad computacional 4 Complejidad en memoria 5 Implementacion en pseudocodigo 5 1 Tratar punto 5 2 Implementacion en pseudocodigo 5 3 Tratar sucesor 6 Observaciones 7 Enlaces externosMotivacion y descripcion EditarEl problema de algunos algoritmos de busqueda en grafos informados como puede ser el algoritmo voraz es que se guian en exclusiva por la funcion heuristica la cual puede no indicar el camino de coste mas bajo o por el coste real de desplazarse de un nodo a otro como los algoritmos de escalada pudiendose dar el caso de que sea necesario realizar un movimiento de coste mayor para alcanzar la solucion Es por ello bastante intuitivo el hecho de que un buen algoritmo de busqueda informada deberia tener en cuenta ambos factores el valor heuristico de los nodos y el coste real del recorrido Asi el algoritmo A utiliza una funcion de evaluacion f n g n h n displaystyle f n g n h n donde h n displaystyle h n representa el valor heuristico del nodo a evaluar desde el actual n hasta el final y g n displaystyle g n el coste real del camino recorrido para llegar a dicho nodo n desde el nodo inicial A mantiene dos estructuras de datos auxiliares que podemos denominar abiertos implementado como una cola de prioridad ordenada por el valor f n displaystyle f n de cada nodo y cerrados donde se guarda la informacion de los nodos que ya han sido visitados En cada paso del algoritmo se expande el nodo que este primero en abiertos y en caso de que no sea un nodo objetivo calcula la f n displaystyle f n de todos sus hijos los inserta en abiertos y pasa el nodo evaluado a cerrados El algoritmo es una combinacion entre busquedas del tipo primero en anchura con primero en profundidad mientras que h n displaystyle h n tiende a primero en profundidad g n displaystyle g n tiende a primero en anchura De este modo se cambia de camino de busqueda cada vez que existen nodos mas prometedores Propiedades EditarComo todo algoritmo de busqueda en amplitud A es un algoritmo completo en caso de existir una solucion siempre dara con ella Si para todo nodo n del grafo se cumple g n 0 displaystyle g n 0 nos encontramos ante una busqueda voraz Si para todo nodo n del grafo se cumple h n 0 displaystyle h n 0 A pasa a ser una busqueda de coste uniforme no informada Para garantizar la optimizacion del algoritmo la funcion h n displaystyle h n debe ser heuristica admisible esto es que no sobrestime el coste real de alcanzar el nodo objetivo De no cumplirse dicha condicion el algoritmo pasa a denominarse simplemente A y a pesar de seguir siendo completo no se asegura que el resultado obtenido sea el camino de coste minimo Asimismo si garantizamos que h n displaystyle h n es consistente o monotona es decir que para cualquier nodo n displaystyle n y cualquiera de sus sucesores el coste estimado de alcanzar el objetivo desde n no es mayor que el de alcanzar el sucesor mas el coste de alcanzar el objetivo desde el sucesor Complejidad computacional EditarLa complejidad computacional del algoritmo esta intimamente relacionada con la calidad de la heuristica que se utilice en el problema En el caso peor con una heuristica de pesima calidad la complejidad sera exponencial mientras que en el caso mejor con una buena h n displaystyle h n el algoritmo se ejecutara en tiempo lineal Para que esto ultimo suceda se debe cumplir que h x g y g x h y displaystyle h x leq g y g x h y donde h es una heuristica optima para el problema como por ejemplo el coste real de alcanzar el objetivo Complejidad en memoria EditarEl espacio requerido por A para ser ejecutado es su mayor problema Dado que tiene que almacenar todos los posibles siguientes nodos de cada estado la cantidad de memoria que requerira sera exponencial con respecto al tamano del problema Para solucionar este problema se han propuesto diversas variaciones de este algoritmo como pueden ser RTA IDA o SMA Implementacion en pseudocodigo EditarTratar punto Editar coste del camino hasta caso perteneciente a si g lt g entonces nos quedamos con el camino de menor coste MEJORNODO actualizar g y f propagar g a de eliminar anadir a MEJORNODO caso perteneciente a si g lt g entonces nos quedamos con el camino de menor coste MEJORNODO actualizar g y f eliminar anadir a MEJORNODO caso no estaba en ni anadir a anadir a MEJORNODO f g h Implementacion en pseudocodigo Editar ABIERTOS INICIAL inicializacion CERRADOS f INICIAL h INICIAL repetir si ABIERTOS entonces FALLO si no quedan nodos extraer MEJORNODO de ABIERTOS con f mi nima cola de prioridad mover MEJORNODO de ABIERTOS a CERRADOS si MEJORNODO contiene estado objetivo entonces SOLUCION ENCONTRADA TRUE si no generar SUCESORES de MEJORNODO para cada SUCESOR hacer TRATAR SUCESOR hasta SOLUCION ENCONTRADA o FALLO Tratar sucesor Editar SUCESOR ANTERIOR VIEJO coste del camino hasta SUCESOR caso SUCESOR VIEJO perteneciente a CERRADOS si g SUCESOR lt g VIEJO entonces no si monotoni a nos quedamos con el camino de menor coste VIEJO ANTERIOR MEJORNODO actualizar g VIEJO y f VIEJO propagar g a sucesores de VIEJO eliminar SUCESOR anadir VIEJO a SUCESORES MEJORNODO caso SUCESOR VIEJO perteneciente a ABIERTOS si g SUCESOR lt g VIEJO entonces nos quedamos con el camino de menor coste VIEJO ANTERIOR MEJORNODO actualizar g VIEJO y f VIEJO eliminar SUCESOR anadir VIEJO a SUCESORES MEJORNODO caso SUCESOR no estaba en ABIERTOS ni CERRADOS anadir SUCESOR a ABIERTOS anadir SUCESOR a SUCESORES MEJORNODO f SUCESOR g SUCESOR h SUCESOR Observaciones EditarComo se menciono anteriormente h x displaystyle h x es un estimador de h x displaystyle h x que informa la distancia al nodo objetivo entoncesSi h x displaystyle h x hace un estimacion perfecta de h x displaystyle h x A converge inmediatamente al objetivo Si h x displaystyle h x 0 la funcion g x displaystyle g x controla la busqueda Si h x displaystyle h x 0 y g x displaystyle g x 0 la busqueda sera aleatoria Si h x displaystyle h x 0 y g x displaystyle g x 1 o constante la busqueda sera Primero en Anchura Si h x displaystyle h x nunca sobrestima a h x displaystyle h x o subestima se garantiza encontrar el camino optimo pero se desperdicia esfuerzo explorando otras rutas que parecieron buenas Si h x displaystyle h x sobrestima a h x displaystyle h x no puede garantizarse la consecucion del camino del menor costeEnlaces externos EditarExplicacion interactiva de A y codigo fuente Programa que ilustra el funcionamiento de varios algoritmos de busqueda Wikimedia Commons alberga una galeria multimedia sobre Algoritmo de busqueda A Datos Q277680 Multimedia A AlgorithmObtenido de https es wikipedia org w index php title Algoritmo de busqueda A amp oldid 137866138, 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