2. ¿Que es?
Es un algoritmo de búsqueda que encuentra la ruta de menor coste entre dos
puntos siempre y cuando se cumplan una serie de condiciones.
Es ampliamente utilizado en las ciencias de la computación para encontrar rutas y
que tan transitable es una gráfica, es decir, se refiere al problema de visitar todos
los nodos en una gráfica dada de forma particular , esto no es más que el proceso
de trazado de la ruta más eficiente entre unos puntos llamados nodos.
3. Historia
Fue descrito por primera vez en 1968 como una extensión del algoritmo de Dijkstra
(1959), por Peter Hart, Nils Nilsson y Bertran Raphael, que expusieron que el A*
lograba un mejor desempeño con respecto al tiempo usando heurísticas.
4. El algoritmo A* es usualmente utilizado en los problemas para encontrar la mejor
ruta o camino, lo que realiza el algoritmo es construir todas las rutas desde un
punto inicial hasta encontrar alguna que llegue al nodo final o meta. De éste modo
solamente construye aquellas rutas que son candidatas a formar una solución o
camino desde el inicio hasta el nodo final. Para poder determinar que rutas son las
que tienen mayor probabilidad de llegar al nodo meta, el algoritmo utiliza una
heurística basada en la distancia de cualquier punto dado hacía la meta.
5. Donde se diferencia el algoritmo A* de otros algoritmos avaros de “best-first
search” es el hecho de que va tomando en cuenta la distancia que ya ha recorrido
hasta el momento, haciendo de este modo una respuesta mucho más completa y
óptima.
6. La función de evaluación es el resultado de la suma de otras dos funciones, una
que indica el coste del camino que se ha seguido hasta un cierto nodo la cual se
representa como g(x) y otra que nos da una estimación de la distancia del punto o
nodo en que nos encontramos hasta la meta que está representada como h(x).
Entonces la función de evaluación es el resultado de la suma de h(x) y g(x).
7. Entonces cada una de ellas se representa de la siguiente manera:
costo: representa el valor explícito de movernos de nuestro punto actual al siguiente en
alguna dirección dada, si no se especifica se toma como unitario ya que pertenece a
una distribución uniforme.
abs: representa el valor absoluto de la operación dentro del paréntesis.
nodox, nodoy: son las coordenadas (x, y) del nodo en el que nos encontramos
actualmente.
objetivox , objetivoy : representa las coordenadas de posición de nuestra meta u
objetivo al cual deseamos llegar.
8. Cuando comenzamos a analizar el problema nuestro nodo origen tiene un valor
inicial 0 (cero) tanto en h como en g.
Posteriormente g(x) se representa de la siguiente manera:
Donde:
α: representa un valor entre 0 y 1 dado por las circunstancias del problema a
resolver.
padreg : es el valor obtenido de la ecuación g(x) del anterior nodo padre. Cuando
Cuando iniciamos los cálculos por primera vez, este valor es 0 para el nodo origen.
9. En esta ecuación debemos prestar atención especial conforme vayamos avanzado
en el “pathfinding” ya que debemos sumar al resultado obtenido en la ecuación
anterior el mismo valor g del padre anterior de nueva forma, es decir, tendríamos
algo así:
10. De esta forma podemos empezar a realizar los cálculos para cada uno de los nodos
que se vayan analizando. Este algoritmo consiste entonces en atravesar una gráfica
(de forma definida normalmente) siguiendo una ruta con el menor costo conocido
manteniendo una cola sorteada de prioridades con segmentos de rutas alternas a
lo largo del camino para que si en un momento dado la ruta que se está siguiendo
arroja un valor (costo) superior en comparación con otro segmento de ruta
encontrado, esta abandona esa ruta actual de alto coste y en vez de ella toma la
que le brinda un camino más “barato”. De esta forma el proceso sigue hasta
alcanzar la meta u objetivo.
11. Empezando en un nodo inicial dado, el algoritmo expande el nodo con el menor
valor de f’(x). Este algoritmo mantiene un conjunto de soluciones parciales
almacenadas en una cola de prioridad. El proceso continua hasta que una meta
tiene un valor f’(x) menor que cualquier otro nodo en la cola o hasta que el árbol
ha sido recorrido completamente. Como aspecto positivo podemos considerar que
ningún otro algoritmo óptimo nos garantiza expandir menos nodos que A*, pero
éste requiere un alto consumo de memoria
12. Aplicaciones del algoritmo A*
un ejemplo de ello es el videojuego pacman en el que se aplicaba al
comportamiento de los fantasmitas y en la resolución de los problemas de Sudoku
de 8 variables. También se puede utilizar para resolver el cubo Rubik mostrándonos
cómo hacerlo con la menor cantidad de movidas.
13. Beneficio de este método
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.
14. Propiedades del algoritmo
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 optimalidad del algoritmo, la función debe ser admisible, esto
es, que no sobrestime el coste real de alcanzar el nodo objetivo.
15. 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.
16. Ejemplo
En una ciudad se desea llegar (con el menor coste) de la plaza bolívar a la
biblioteca Virgilio Barco