¿Es A * eficiente incluso cuando los obstáculos se mueven?

30

Estoy empezando a aprender sobre la búsqueda de rutas y he estado investigando el algoritmo A * y mi principal preocupación es que todos los ejemplos que he visto muestran obstáculos estáticos con los que se calcula.

Si tengo obstáculos en movimiento, digamos otros personajes, por ejemplo, moviéndome también para que el personaje tenga que orientarse, supongo que tendré que ejecutar el algoritmo en cada cuadro, pero me preocupa que sea bastante costoso para que el hardware procese cada cuadro para cada actor en movimiento.

Entonces, ¿A * sigue siendo lo suficientemente eficiente como para usarlo siempre que los obstáculos también se muevan, o hay otro método para encontrar el camino que maneje los obstáculos en movimiento con mayor elocuencia?

Ethan The Brave
fuente

Respuestas:

27

Existen múltiples algoritmos que son mucho más rápidos que A * cuando necesita recalcular una ruta con obstáculos en movimiento. Ver aquí en "Recálculos simples".

Sin embargo, no es probable que encuentres una solución estándar para ninguno de ellos, por lo que en el 99% de los casos son excesivos para un juego. Su tiempo se gastaría mejor utilizando una solución A * existente y totalmente optimizada, y utilizando los trucos existentes comunes para acelerar la búsqueda de caminos en los juegos:

  • Solo recalculando el mejor camino en intervalos poco frecuentes
  • Compartir las mejores rutas entre varias unidades ( ejemplo )
  • Crear un gráfico jerárquico para que solo necesite recalcular parte de la ruta

Puede encontrar más información sobre estos trucos y más en todo este sitio, o en las páginas A * de Amit.

BlueRaja - Danny Pflughoeft
fuente
10

Sí. A * sigue siendo el camino a seguir en casi todos los casos. Es su cálculo de costo de nodo el que se vuelve dinámico y, por lo tanto, más complejo de calcular y rastrear.

Si ya sabe dónde estarán los obstáculos en movimiento en el futuro, su A * puede tener en cuenta la temporalidad de los obstáculos en la función de costo.

Por ejemplo: este nodo se alcanzará en 4 tics, ocupado desde el tick # 3 hasta el tick # 6, por lo que el costo de viaje en este nodo es 6 - 4 = +2 ticks. Ese todavía puede ser el mejor camino.

La dirección de desplazamiento del obstáculo también debe tenerse en cuenta.

Si no lo sabe de antemano, entonces puede asumir que no hay obstáculos y volver a calcular el camino cuando se alcanzan los obstáculos, pero tendrá que hacer algo con respecto a los puntos muertos y los bloqueos en vivo. (Lo mismo se aplica si puede predecir dónde estarán los obstáculos, pero eso en sí mismo es un tipo de evitación de punto muerto / bloqueo en vivo y eso puede ser lo suficientemente bueno para su propósito).

Un punto muerto es cuando ambos esperan que el otro se mueva y ninguno se mueve.

Un livelock es cuando ambos ( o más <- esto es importante tener en cuenta) se mueven para evitar al otro en la misma dirección y terminan yendo y viniendo sin progreso.

Resolver bloqueos en vivo puede volverse muy complejo y eso depende completamente de las reglas y la mecánica de colisión de su juego (por ejemplo: ¿deberían luchar y destruir el obstáculo?).

A menudo se trata de que sus objetos en movimiento programen reservas de nodo / ruta (no olvide las cancelaciones cuando cambian de ruta o mueren) para que otros objetos en movimiento puedan planificar con anticipación.

Una vez que tenga esta información, también puede planificar intercepciones.

Stephane Hockenhull
fuente
19
Oh, Dios mío, "livelock": has descrito esa horrible cosa de esquivar de izquierda a derecha que termino teniendo que hacer en los pasillos todo el tiempo.
Ethan The Brave
2
Una solución simple de vida / punto muerto es elegir aleatoriamente entre las opciones disponibles (por ejemplo, 50% de probabilidad de no moverse y 50% de probabilidad de moverse hacia la izquierda). Mientras cada actor elija al azar, hay una probabilidad distinta de cero de que el bloqueo se resuelva.
Draco18s
@ Draco18s Y exponencialmente aumentar el tamaño de su agitando un lado a otro hasta que uno deja paso (Puede que haya que acabamos de describir cómo se resuelven las colisiones de Ethernet!)
Cort Amón - Restablecer Mónica
Supongo que podrían jugar Rock Paper Scissors o un juego amistoso del Dilema del Prisionero de la Placa de Petri . ; P
Draco18s