¿Cómo debo volver a planificar A *?

10

Tengo un enemigo jefe que busca caminos y busca al jugador usando el algoritmo A *. Es un entorno bastante complejo, y lo estoy haciendo en Flash, por lo que la búsqueda puede ser un poco lenta cuando se busca a largas distancias. Si el jugador estaba parado, podría buscar solo una vez, pero en este momento estoy buscando en cada cuadro. Esto lleva tanto tiempo que mi framerate está sufriendo.

¿Cuál es la solución habitual a esto? ¿Hay alguna manera de "volver a planificar" A * sin rehacer toda la búsqueda? ¿Debería buscar un poco con menos frecuencia (cada medio segundo o segundo) y aceptar que habrá un poco de imprecisión en el camino?

Gregory Avery-Weir
fuente

Respuestas:

13

No tiene que buscar la ruta completa en un cuadro, lo he hecho dando un límite en el ciclo de búsqueda, la IA comenzará a seguir la poca información que tiene, y en el siguiente cuadro buscaré un poco más , puede tomar 3 fotogramas hasta que se encuentre la ruta. Puede parecer bastante convincente, ya que parece que la IA realmente está buscando.

PhilCK
fuente
+1. Esto también es lo que Mat Buckland describe en su libro de IA. Él lo llama "planificación de ruta en tiempo" ( books.google.ch/… ). Buen material.
bummzack
8

Puede usar la detección de proximidad para ejecutar el algoritmo cada pocos fotogramas si la distancia es muy grande (porque en la mayoría de los casos si la distancia es grande, la ruta objetivo no cambiará drásticamente de fotograma a fotograma). Por ejemplo:

      Distance > 100, run A* every 2 seconds
100 > Distance >  50, run A* every 1 second
50  > Distance >  25, run A* every 10 frames
25  > Distance <  25, run A* every frame

Esto supone que hay una distancia donde ejecutar A * cada cuadro tiene un rendimiento que aún es aceptable. En resumen, elegiría tu segunda opción. Especialmente si lo que tienes está funcionando, evitaría volver a implementar algo más si puedo reducir lo que funciona bien. La conclusión es que tendrás que probarlo para ver si funciona para tu juego.

Nate
fuente
8

Realmente no responde a su pregunta exacta, pero ... si está dispuesto a "hacer trampa", puede hacer que el jugador deje "migas de pan" y que el jefe las siga. Si el camino de migas de pan se cruza, siga el más reciente (esto hace que el jefe evite bucles y otros caminos que pueden ser demasiado largos, sin mencionar que no sigue el camino exacto del jugador)

Esto funcionaría bien si el jefe es algún tipo de animal con un buen sentido del olfato. Esto funcionaría mucho como seguir el aroma del jugador :)

ggambett
fuente
5

Su caso es más o menos lo que HPA * se inventó para abordar. Sin embargo, si parece excesivo, tendería a pensar que la búsqueda de caminos cada medio segundo debería funcionar bastante bien.

caos
fuente
4

Si es un entorno estático, puede calcular previamente la ruta más corta de todos los pares.

Peter Taylor
fuente
2
Si es un pequeño entorno estático.
Depende de la plataforma y la memoria disponible.
Nate
@Joe, @Nate, cierto.
Peter Taylor
2

Creé un juego para una competencia de 48 juegos donde un personaje A * sigue al jugador alrededor de un nivel. Como mi implementación de A * era lenta (no podía ejecutarse en cada cuadro), puse el intervalo en un retraso de tres segundos. Esto tuvo el resultado no deseado de permitir que el jugador "engañara" a la IA por unos momentos. Realmente hizo el juego más divertido.

Más tarde, mejoré el rendimiento de la implementación de A * e intenté ejecutarlo en cada cuadro. El juego dejó de ser divertido porque el enemigo siempre buscaría perfectamente al jugador.

Eso fue inesperado y una buena experiencia de aprendizaje.

GloryFish
fuente
1
Ese es un buen punto. Recuerdo haber leído sobre la búsqueda de caminos en pac-man, donde deliberadamente usaron un algoritmo imperfecto, lo que permitió al jugador burlar a los fantasmas. Cada fantasma tenía una imperfección ligeramente diferente que les daba más carácter. La conclusión aquí es que en los juegos, diversión> todo lo demás.
Nick Van Brunt
0

A menos que desee (o necesite) usar A *, también puede echar un vistazo a los Comportamientos de dirección . Como no hay una planificación de ruta completa por trama involucrada, debería ser mucho más ligero en el procesamiento.


fuente
Utilizo comportamientos de dirección (específicamente Seek) en casos donde no hay obstáculos entre el agente y su objetivo. Desafortunadamente, mi entorno contiene cosas como corredores retorcidos, donde se necesita una solución más inteligente.
Gregory Avery-Weir