Una técnica para acelerar el algoritmo A* mediante puntos de referencia diferenciales
El algoritmo A* es uno de los métodos más utilizados en videojuegos y robótica para encontrar la ruta más corta entre dos puntos. Sin embargo, su eficiencia depende en gran medida de la función heurística que lo guía hacia el objetivo. Un análisis publicado en Red Blob Games propone una técnica conocida como "heurísticas diferenciales" que reutiliza puntos de referencia precalculados para mejorar el rendimiento sin necesidad de modificar el propio algoritmo.
El problema de la heurística tradicional
Según la fuente, A* utiliza una heurística basada en distancia para orientarse hacia la meta, similar a un viento que empuja en la dirección correcta. Cuando esta heurística apunta bien, el algoritmo es rápido; cuando apunta mal —por ejemplo, hacia el este cuando el camino más corto está al oeste— se desperdician recursos explorando nodos innecesarios. El motivo principal es que la heurística convencional basada en distancia no conoce la ubicación de los muros ni los obstáculos del mapa.
La solución ideal sería una "heurística perfecta" que sí conozca la disposición de los muros. Es posible calcularla, pero resulta impráctica: cambia con cada objetivo, es demasiado costosa de calcular en tiempo real y demasiado voluminosa para almacenar de forma anticipada. Aquí es donde entran en juego los puntos de referencia o "landmarks".
La clave: reutilizar cálculos previos
La técnica propuesta consiste en calcular una vez la distancia exacta hasta un punto de referencia y reutilizar esa información para acelerar búsquedas posteriores. Si conocemos el camino desde un punto B hasta un landmark L, podemos estimar con gran precisión el camino hacia cualquier punto X que se encuentre cerca de esa ruta.
El fundamento matemático es la desigualdad del triángulo, que establece que la suma de dos lados de un triángulo es al menos tan larga como el tercero. Adaptada a grafos dirigidos, la fórmula se expresa como: cost(B, X) ≥ cost(B, L) - cost(X, L). Es decir, podemos obtener una cota inferior útil para la heurística sin necesidad de calcular el coste exacto.
Múltiples puntos de referencia
Un único landmark no cubre todos los posibles puntos de destino. Por ello, la fuente recomienda utilizar múltiples puntos de referencia y tomar el máximo de todas las cotas inferiores calculadas. Cada landmark ofrece una mejora diferente según la posición del inicio y el objetivo.
La ubicación de los landmarks no es trivial. El análisis señala que los puntos de referencia deben situarse en posiciones que cubran la mayor cantidad posible de pares inicio-objetivo. Una opción es colocarlos en los bordes del mapa, donde pueden asistir a trayectos que crucen las zonas principales. Para mapas estáticos, la planificación puede hacerse en la fase de diseño; para mapas dinámicos o generados proceduralmente, se sugiere usar algoritmos automatizados que generan rutas aleatorias y seleccionan las ubicaciones más útiles.
Consideraciones de implementación
El artículo destaca varios factores a tener en cuenta al decidir dónde colocar los landmarks: si todos los caminos tienen la misma probabilidad de uso (en juegos tipo Dwarf Fortress, algunos destinos son mucho más frecuentes que otros), si el mapa es estático o cambia con el tiempo, y si el mundo es abierto o se compone de salas y pasillos.
Un aspecto crítico mencionado es el comportamiento cuando cambia el mapa tras calcular las distancias. Si un muro se destruye, la heurística podría sobreestimar la distancia y A devolvería un camino no óptimo hasta actualizar la tabla. Si se añade un muro, la heurística será más baja de lo deseable y A tardará más en ejecutarse. En ambos casos, el algoritmo sigue funcionando, solo que con menor eficiencia.
Conclusión
Las heurísticas diferenciales representan un enfoque elegante para acelerar A* sin modificar el algoritmo central. Como señala la fuente, incluso si un landmark no está colocado de forma óptima, sigue siendo útil y nunca empeora el rendimiento respecto a la heurística tradicional. La técnica resulta especialmente valiosa en juegos con mapas estáticos donde se pueden precalcular múltiples puntos de referencia durante el desarrollo, ofreciendo mejoras sustanciales en el rendimiento del pathfinding.
