Académique Documents
Professionnel Documents
Culture Documents
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.
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
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'(.)