Desarrollo de Juegos e IA

Algoritmo de Búsqueda A*: Búsqueda de Rutas en Juegos e IA

¿Cómo navegan los NPCs por laberintos complejos en los videojuegos? ¿Por qué Google Maps es tan rápido al encontrar tu ruta? La respuesta es casi siempre el algoritmo de búsqueda A* (A-Estrella). Aprende la magia de las heurísticas que hace de A* el rey de la búsqueda de rutas.

15 Min de lectura Actualizado: Junio 2026 Nivel Intermedio
LGT
Learn Graph Theory Team
Expert Operations Research Engineers

1. ¿Qué es el Algoritmo A*?

El algoritmo A* (pronunciado "A-Estrella") es un algoritmo de recorrido de grafos y búsqueda de rutas que se usa ampliamente en informática debido a su completitud, optimalidad y eficiencia óptima. Inventado en 1968 por Peter Hart, Nils Nilsson y Bertram Raphael del Instituto de Investigación de Stanford, fue diseñado originalmente para ayudar al robot Shakey a navegar por las habitaciones.

Hoy en día, A* es el estándar absoluto de la industria para el enrutamiento y la búsqueda de rutas. Ya sea que un personaje en un juego de estrategia esté caminando por una cuadrícula, o que un GPS esté calculando el viaje más rápido a través de un país, es probable que A* (o una variante del mismo) esté haciendo el trabajo pesado.

2. El Problema con el Algoritmo de Dijkstra

Para entender por qué A* es brillante, primero debemos entender qué mejora. Antes de A*, el estándar de oro para encontrar el camino más corto era el Algoritmo de Dijkstra.

El algoritmo de Dijkstra garantiza encontrar el camino más corto. Sin embargo, es fundamentalmente "ciego". Cuando le pides a Dijkstra que encuentre un camino de Nueva York a Los Ángeles, explorará carreteras que conducen a Boston, Miami y Chicago con el mismo entusiasmo con el que explora carreteras en dirección oeste. Busca hacia afuera en un círculo perfecto (o esfera) en todas las direcciones por igual hasta que accidentalmente choca con el objetivo.

En un mapa grande, explorar todas las direcciones posibles es increíblemente lento y desperdicia enormes cantidades de potencia de procesamiento. Necesitamos un algoritmo que sea lo suficientemente "inteligente" como para saber en qué dirección está el objetivo, para que pueda priorizar la exploración de caminos que se dirigen hacia el objetivo.

3. La Salsa Secreta: Heurísticas (f = g + h)

A* resuelve el problema de la "ceguera" introduciendo una Heurística. Una heurística es una suposición educada. En la búsqueda de rutas, es una función que estima qué tan lejos está un nodo del destino final.

A* asigna una puntuación a cada nodo que descubre. El nodo con la puntuación más baja es el que explora a continuación. La ecuación central de A* es:

f(n) = g(n) + h(n)

Al agregar el componente h(n), A* es atraído hacia el objetivo como un imán. Ignorará los caminos que van en la dirección opuesta al objetivo, reduciendo drásticamente el espacio de búsqueda en comparación con el algoritmo de Dijkstra.

4. Eligiendo la Heurística Correcta

La magia de A* depende completamente de la precisión de la función heurística h(n). Si tu heurística sobreestima la distancia al objetivo, A* ya no garantiza encontrar el camino más corto. Si la subestima, se vuelve más lento. Por lo tanto, elegir la heurística correcta para tu juego o mapa específico es crítico.

Distancia de Manhattan (Para Cuadrículas sin Diagonales)

Si tu juego usa una cuadrícula (como Pac-Man o un roguelike tradicional) y los personajes solo pueden moverse Arriba, Abajo, Izquierda o Derecha, debes usar la Distancia de Manhattan. Calcula el número total de bloques horizontal y verticalmente entre el nodo actual y el objetivo.

function heuristic(node, goal) {
    return abs(node.x - goal.x) + abs(node.y - goal.y)
}

Distancia Euclidiana (Para Mundos Abiertos o Movimiento en Cualquier Ángulo)

Si los personajes pueden moverse en cualquier dirección (o si estás enrutando en un mapa continuo), debes usar la Distancia Euclidiana. Esta es la distancia en línea recta entre dos puntos, calculada usando el teorema de Pitágoras.

function heuristic(node, goal) {
    return sqrt((node.x - goal.x)^2 + (node.y - goal.y)^2)
}

Distancia de Chebyshev (Para Cuadrículas con Diagonales)

Si tu juego usa una cuadrícula pero permite el movimiento diagonal (donde moverse en diagonal cuesta lo mismo que moverse en línea recta), usas la distancia de Chebyshev. Toma el máximo de las diferencias horizontales o verticales.

function heuristic(node, goal) {
    return max(abs(node.x - goal.x), abs(node.y - goal.y))
}

Visualiza la Diferencia

Mira a Dijkstra y A* competir para resolver el mismo laberinto. Nota cómo Dijkstra inunda todo el mapa, mientras que A* crea un camino enfocado como un láser directamente hacia la salida.

Inicia el Visualizador de A*

5. Ejecución Paso a Paso de A*

Así es exactamente como el algoritmo mantiene su estado y procesa los nodos durante la ejecución:

  1. Inicialización: Crea dos conjuntos: un conjunto OPEN (nodos a evaluar) y un conjunto CLOSED (nodos ya evaluados). Agrega el nodo inicial al conjunto OPEN.
  2. Inicio del Bucle: Encuentra el nodo en el conjunto OPEN con el costo f más bajo. Llamemos a este el nodo Current (Actual).
  3. Comprobar Objetivo: Si el nodo Current es el objetivo, ¡has terminado! Sigue los punteros padres hacia atrás para reconstruir el camino.
  4. Mover a Closed: Elimina el nodo Current del conjunto OPEN y agrégalo al conjunto CLOSED.
  5. Expandir Vecinos: Mira todos los vecinos adyacentes del nodo Current. Por cada vecino:
    • Si el vecino es un obstáculo (pared) o está en el conjunto CLOSED, ignóralo.
    • Calcula el costo g del vecino (g Actual + distancia al vecino).
    • Si el vecino no está en el conjunto OPEN, calcula sus costos h y f, establece su padre a Current, y agrégalo al conjunto OPEN.
    • Si el vecino ya está en el conjunto OPEN, comprueba si este nuevo camino hacia el vecino es mejor (tiene un costo g más bajo). Si es así, actualiza su padre y el costo g.
  6. Repetir: Vuelve al Paso 2. Si el conjunto OPEN se vacía y no se ha alcanzado el objetivo, no hay un camino válido.

6. Aplicaciones Reales en Desarrollo de Juegos e IA

A* es la columna vertebral del movimiento en los espacios digitales.

Preguntas frecuentes

¿Cómo se diferencia el algoritmo A* del de Dijkstra?

A* utiliza una función heurística (que estima la distancia al objetivo) para guiar la búsqueda, mientras que Dijkstra es ciego y explora en todas direcciones por igual. Esto hace que A* sea más rápido y enfocado.

¿Qué es una heurística admisible en A*?

Una heurística admisible es aquella que nunca sobreestima el costo real para alcanzar el objetivo. La admisibilidad garantiza que A* encontrará el camino más corto.

¿Cuándo debo elegir la distancia de Manhattan frente a la euclidiana?

Usa la distancia de Manhattan para cuadrículas donde el movimiento se limita a 4 direcciones (arriba, abajo, izquierda, derecha). Usa la distancia euclidiana para entornos continuos que permiten el movimiento en cualquier ángulo.

Exploración Adicional

Domina la Búsqueda de Rutas

Leer sobre A* es bueno, pero construir laberintos y ver al algoritmo resolverlos es mejor. Dibuja paredes, establece puntos de inicio y fin, y observa cómo las diferentes heurísticas cambian el patrón de búsqueda en tiempo real.

Inicia el Visualizador de A*