Vous êtes sur la page 1sur 3

Algoritmo de bsqueda A*

Ejemplo de aplicacin del algoritmo A*.


El algoritmo de bsqueda A* (pronunciado "A asterisco" o "A estrella") se clasifica
dentro de los algoritmos de bsqueda en grafos. 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.

ndice

1 Motivacin y descripcin

2 Propiedades

3 Complejidad computacional

4 Complejidad en memoria

5 Implementacin en pseudocdigo
o 5.1 Tratar punto
o 5.2 Implementacin en pseudocdigo
o 5.3 Tratar sucesor

6 Observaciones

7 Enlaces externos

Motivacin y descripcin
El problema de algunos algoritmos de bsqueda en grafos informados, como puede ser
el algoritmo voraz, es que se guan en exclusiva por la funcin heurstica, la cual puede
no indicar el camino de coste ms bajo, o por el coste real de desplazarse de un nodo a
otro (como los algoritmos de escalada), pudindose dar el caso de que sea necesario
realizar un movimiento de coste mayor para alcanzar la solucin. Es por ello bastante
intuitivo el hecho de que un buen algoritmo de bsqueda informada debera tener en
cuenta ambos factores, el valor heurstico de los nodos y el coste real del recorrido.
As, el algoritmo A* utiliza una funcin de evaluacin

, donde

representa el valor heurstico 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 informacin 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
en abiertos, y pasa el nodo evaluado a cerrados.

de todos sus hijos, los inserta

El algoritmo es una combinacin entre bsquedas 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 bsqueda cada vez
que existen nodos ms prometedores.

Propiedades
Como todo algoritmo de bsqueda en amplitud, A* es un algoritmo completo: en caso
de existir una solucin, siempre dar con ella.
Si para todo nodo n del grafo se cumple

, nos encontramos ante una

bsqueda voraz. Si para todo nodo n del grafo se cumple


bsqueda de coste uniforme no informada.

, A* pasa a ser una

Para garantizar la optimizacin del algoritmo, la funcin


debe ser heurstica
admisible, esto es, que no sobrestime el coste real de alcanzar el nodo objetivo.
De no cumplirse dicha condicin, 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 mnimo. Asimismo, si garantizamos que
es consistente (o montona), 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 ms el coste de
alcanzar el objetivo desde el sucesor.

Complejidad computacional
La complejidad computacional del algoritmo est ntimamente relacionada con la
calidad de la heurstica que se utilice en el problema. En el caso peor, con una heurstica
de psima 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 heurstica 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 tamao del problema. Para
solucionar este problema, se han propuesto diversas variaciones de este algoritmo, como
pueden ser RTA*, IDA* o SMA*.

Implementacin en pseudocdigo
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 .
aadir . a ._MEJORNODO
caso . = . perteneciente a )-----(
si g(.) < g(.) entonces
// nos quedamos con el camino de menor coste
.:= MEJORNODO
actualizar g(.) y f'(.)
eliminar .
aadir . a ._MEJORNODO
caso . no estaba en ).( ni (.)
aadir . a ).(
aadir . a ._MEJORNODO
f'(.) := g(.) + h'(.)

Vous aimerez peut-être aussi