¿En qué se diferencian los algoritmos de pathfinding de última generación para cambiar gráficos (D *, D * -Lite, LPA *, etc.)?

96

En los últimos años se han desarrollado muchos algoritmos de búsqueda de rutas que pueden calcular la mejor ruta en respuesta a los cambios del gráfico mucho más rápido que A *: ¿qué son y en qué se diferencian? ¿Son para diferentes situaciones, o algunas otras obsoletas?


Estos son los que he podido encontrar hasta ahora:

No estoy seguro de cuál de estos se aplica a mi problema específico: los leeré todos si es necesario, pero me ahorraría mucho tiempo si alguien pudiera escribir un resumen.


Mi problema específico: tengo una cuadrícula con un inicio, un final y algunas paredes. Actualmente estoy usando A * para encontrar la mejor ruta desde el principio hasta el final.

Imagen2

El usuario moverá una pared y tendré que volver a calcular todo el camino. El paso "mover-muro / recalcular ruta" ocurre muchas veces seguidas, por lo que estoy buscando un algoritmo que pueda recalcular rápidamente la mejor ruta sin tener que ejecutar una iteración completa de A *.

Sin embargo, no estoy necesariamente buscando una alteración a A *, podría ser un algoritmo completamente separado.

BlueRaja - Danny Pflughoeft
fuente
3
¿Has echado un vistazo a D *? Es un algoritmo incremental, y si no recuerdo mal, debería manejar una situación exactamente como esta. Una vez vi un robot que lo usaba para encontrar caminos donde había caminantes aleatorios en el entorno.
Juho
77
@Kaveh: ¿Por qué no pedir una visión general del estado de la técnica en algoritmos dinámicos de búsqueda de ruta "a nivel de investigación"? Field-D * tiene menos de 5 años y LEARCH tiene menos de 3 ..
BlueRaja - Danny Pflughoeft
77
No estoy seguro de por qué esta no es una pregunta adecuada para este foro. este no es un tema resuelto y antiguo
Suresh Venkat
55
@ BlueRaja-DannyPflughoeft También creo que esta es una buena pregunta a nivel de investigación. Agregaré una respuesta basada en mi comentario y la expandiré un poco.
Juho
44
@ BlueRaja-DannyPflughoeft Se vinculó en reddit.
U2EF1

Respuestas:

77

Entonces, hojeé los papeles, y esto es lo que vi. Si hay alguien más conocedor en el tema, corríjame si estoy equivocado (o agregue su propia respuesta, ¡y la aceptaré en su lugar!) .

Los enlaces a cada artículo se pueden encontrar en la publicación de preguntas, arriba.

  • Recálculos simples
    • D * (también conocido como Dynamic A * ) (1994): en la ejecución inicial, D * se ejecuta de manera muy similar a A *, encontrando la mejor ruta de principio a fin muy rápidamente. Sin embargo, a medida que la unidad se mueve de principio a fin, si el gráfico cambia, D * puede recalcular muy rápidamente el mejor camino desde la posición de esa unidad hasta el final, mucho más rápido que simplemente ejecutar A * desde la posición de esa unidad nuevamente. D *, sin embargo, tiene una reputación de ser extremadamente complejo, y ha sido completamente obsoleto por el mucho más simple D * -Lite.
    • Focused D * (1995): una mejora de D * para hacerlo más rápido / "más en tiempo real". No puedo encontrar ninguna comparación con D * -Lite, pero dado que esto es más antiguo y se habla mucho más de D * -Lite, supongo que D * -Lite es de alguna manera mejor.
    • DynamicSWSF-FP (1996): almacena la distancia desde cada nodo hasta el nodo final. Tiene una configuración inicial grande para calcular todas las distancias. Después de los cambios en el gráfico, solo puede actualizar los nodos cuyas distancias han cambiado. No relacionado con A * y D *. Útil cuando desea encontrar la distancia desde múltiples nodos hasta el final después de cada cambio; de lo contrario, LPA * o D * -Lite suelen ser más útiles.
    • LPA * / Incremental A * (2001): LPA * (Lifelong Planning A *) , también conocido como Incremental A * (y, a veces, de manera confusa, como "LPA", aunque no tiene relación con el otro algoritmo llamado LPA) es un combinación de DynamicSWSF-FP y A *. En la primera ejecución, es exactamente lo mismo que A *. Sin embargo, después de cambios menores en el gráfico, las búsquedas posteriores del mismo par de inicio / finalización pueden usar la información de ejecuciones anteriores para reducir drásticamente el número de nodos que deben examinarse, en comparación con A *. Este es exactamente mi problema, por lo que parece que LPA * será mi mejor opción. LPA * difiere de D * en que siempre encuentra el mejor camino desde el mismo comienzo hasta el mismo final; no se usa cuando el punto de inicio se está moviendo(como unidades que se mueven a lo largo de la mejor ruta inicial) . Sin embargo...
    • D * -Lite (2002): este algoritmo usa LPA * para imitar D *; es decir, utiliza LPA * para encontrar la nueva mejor ruta para una unidad a medida que se mueve a lo largo de la mejor ruta inicial y el gráfico cambia. D * -Lite se considera mucho más simple que D *, y dado que siempre se ejecuta al menos tan rápido como D *, tiene D * completamente obsoleto. Por lo tanto, nunca hay ninguna razón para usar D *; use D * -Lite en su lugar.
  • Movimiento en cualquier ángulo
    • Campo D * (2007): una variante de D * -Lite que no restringe el movimiento a una cuadrícula; es decir, la mejor ruta puede hacer que la unidad se mueva a lo largo de cualquier ángulo, no solo 45- (o 90-) grados entre los puntos de la cuadrícula. Fue utilizado por la NASA para encontrar caminos para los rovers de Marte.
    • Theta * (2007): una variante de A * que ofrece mejores rutas (más cortas) que el campo D *. Sin embargo, debido a que se basa en A * en lugar de D * -Lite, no tiene las capacidades de replanificación rápida que tiene Field D *. Ver también .
    • Incremental Phi * (2009): Lo mejor de ambos mundos. Una versión de Theta * que es incremental (también conocida como relanzamiento rápido)
  • Puntos de destino móviles
    • GAA * (2008): GAA * (Generalized Adaptive A *) es una variante de A * que maneja los puntos de destino en movimiento. Es una generalización de un algoritmo incluso anterior llamado "Moving Target Adaptive A *"
    • GRFA * (2010): GFRA * (Recuperación de flecos generalizada A *) parece (?) Ser una generalización de GAA * a gráficos arbitrarios (es decir, no restringidos a 2D) utilizando técnicas de otro algoritmo llamado FRA *.
    • MTD * -Lite (2010): MTD * -Lite (Moving Target D * -Lite) es "una extensión de D * Lite que utiliza el principio detrás de la recuperación de franjas generalizadas A *" para realizar búsquedas rápidas de objetivos móviles.
    • Tree-AA * (2011): (???) Parece ser un algoritmo para buscar terrenos desconocidos, pero se basa en Adaptive A *, como todos los demás algoritmos de esta sección, así que lo puse aquí. No estoy seguro de cómo se compara con los demás en esta sección.
  • Rápido / subóptimo
    • Anytime D * (2005): Esta es una variante "Anytime" de D * -Lite, que se realiza combinando D * -Lite con un algoritmo llamado Anytime Repairing A * . Un algoritmo "en cualquier momento" es uno que puede ejecutarse bajo cualquier restricción de tiempo: encontrará una ruta muy subóptima muy rápidamente para comenzar, y luego mejorará esa ruta cuanto más tiempo se le dé.
    • HPA * (2004): HPA * (Hierarchical Path-Finding A *) es para encontrar una gran cantidad de unidades en un gráfico grande, como en RTS videojuegos (estrategia en tiempo real) . Todos tendrán ubicaciones iniciales diferentes y ubicaciones finales potencialmente diferentes. HPA * divide el gráfico en una jerarquía para encontrar rápidamente rutas "casi óptimas" para todas estas unidades mucho más rápidamente que ejecutar A * en cada una de ellas individualmente. Ver también
    • PRA * (2005): Por lo que entiendo, PRA * (Refinamiento parcial A *) resuelve el mismo problema que HPA *, pero de una manera diferente. Ambos tienen "características de rendimiento similares".
    • HAA * (2008): HAA * (Hierarchical Annotated A *) es una generalización de HPA * que permite un recorrido restringido de algunas unidades sobre algunos terrenos (por ejemplo, un camino pequeño por el que algunas unidades pueden caminar pero otras más grandes no pueden; o un hoyo que solo las unidades voladoras pueden cruzar; etc.)
  • Otro / Desconocido
    • LPA (1997): LPA (algoritmo de búsqueda de ruta sin bucle) parece ser un algoritmo de enrutamiento solo marginalmente relacionado con los problemas que resuelven los otros algoritmos aquí. Solo lo menciono porque este documento se menciona de manera confusa (e incorrecta) en varios lugares en Internet como el documento que presenta LPA *, que no es así.
    • LEARCH (2009): LEARCH es una combinación de algoritmos de aprendizaje automático, que se utiliza para enseñar a los robots cómo encontrar caminos casi óptimos por sí mismos. Los autores sugieren combinar LEARCH con Field D * para obtener mejores resultados.
    • BDDD * (2009): ??? No puedo acceder al papel.
    • SetA * (2002): ??? Esta es, aparentemente, una variante de A * que busca en el modelo de "diagrama de decisión binaria" (BDD) del gráfico. Afirman que en algunos casos ejecuta "varios órdenes de magnitud más rápido que A *" . Sin embargo, si entiendo correctamente, ¿esos casos son cuando cada nodo en el gráfico tiene muchas aristas?

Dado todo esto, parece que LPA * es la mejor opción para mi problema.

BlueRaja - Danny Pflughoeft
fuente
Bueno ... también encontré este artículo de @lhrios que compara algunos de los algoritmos.
mg007
Sé que esto es antiguo, pero creo que vale la pena señalar un pequeño defecto en su descripción de Field D *. D * regular no está limitado a "una cuadrícula", está limitado a un gráfico discreto. Lo importante es que para que A *, D * etc. funcionen, debe discretizar un espacio continuo en trozos, lo que limita los ángulos a los que puede moverse. El campo D * elimina esa restricción y le permite tratar los estados sucesores de manera continua, en lugar de discreta (más o menos, el engaño está involucrado). Simplemente utiliza una cuadrícula 2D como ejemplo, D * / A *, etc., de ninguna manera están limitados a una cuadrícula.
LinearZoetrope
Debo mencionar que Field D * está limitado a una cuadrícula, aunque el documento menciona que sí funcionaron en una versión 3D. Esto se debe a la interpolación que usa. Todavía se mantiene que A * y D * funcionan en gráficos con números arbitrarios de estados sucesores, el campo D * es solo una mejora para los escenarios en los que D * utiliza la planificación basada en la cuadrícula.
LinearZoetrope
Una diferencia importante entre el Campo D * y Theta * / Incremental Phi *, es que el Campo D * puede tener pesos únicos para cada cuadrado, mientras que Theta * y Incremental Phi * están limitados a tener el mismo peso para todos los cuadrados que se pueden visitar. Por lo tanto, Incremental Phi * no es superior al Campo D *.
Hola
1
@Jsor: Aquí hay una versión 3D de Field D *: 3D Field D - JPL Robotics
HelloGoodbye
16

Hay una gran advertencia al usar D *, D * -Lite o cualquiera de los algoritmos incrementales en esta categoría (y vale la pena señalar que esta advertencia rara vez se menciona en la literatura). Estos tipos de algoritmos utilizan una búsqueda inversa. Es decir, calculan los costos hacia afuera desde el nodo objetivo, como una onda que se extiende hacia afuera. Cuando los costos de los bordes cambian (por ejemplo, agrega o elimina un muro en su ejemplo), todos tienen varias estrategias eficientes para actualizar solo el subconjunto de los nodos explorados (también conocidos como 'visitados') que se ven afectados por los cambios.

La gran advertencia es que la ubicación de estos cambios con respecto a la ubicación del objetivo marca una enorme diferencia en la eficiencia de los algoritmos. Mostré en varios documentos y mi tesis que es completamente posible que el peor de los casos de cualquiera de estos algoritmos incrementales sea peor que tirar toda la información y comenzar de nuevo con algo no incremental como el viejo A *.

Cuando la información de costo modificada está cerca del perímetro del frente de búsqueda en expansión (la región "visitada"), pocas rutas tienen que cambiar y las actualizaciones incrementales son rápidas. Un ejemplo pertinente es un robot móvil con sensores conectados a su cuerpo. Los sensores solo ven el mundo cerca del robot y, por lo tanto, los cambios están en esta región. Esta región es el punto de partida de la búsqueda, no el objetivo, por lo que todo funciona bien y los algoritmos son muy eficientes para actualizar la ruta óptima para corregir los cambios.

Cuando la información de costo modificada está cerca del objetivo de la búsqueda (o su escenario ve las ubicaciones de cambio de objetivo, no solo el comienzo), estos algoritmos sufren una desaceleración catastrófica. En este escenario, casi toda la información guardada debe actualizarse, porque la región cambiada está tan cerca del objetivo que casi todas las rutas precalculadas pasan por los cambios y deben ser reevaluadas. Debido a la sobrecarga de almacenar información adicional y cálculos para realizar actualizaciones incrementales, una reevaluación en esta escala es más lenta que un nuevo comienzo.

Dado que su escenario de ejemplo parece permitir que el usuario mueva cualquier muro que desee, sufrirá este problema si usa D *, D * -Lite, LPA *, etc. El rendimiento temporal de su algoritmo será variable, dependiendo del usuario entrada. En general, "esto es algo malo" ...

Como ejemplo, el grupo de Alonzo Kelly en CMU tenía un programa fantástico llamado PerceptOR que intentaba combinar robots terrestres con robots aéreos, todos compartiendo información de percepción en tiempo real. Cuando intentaron usar un helicóptero para proporcionar actualizaciones de costos en tiempo real al sistema de planificación de un vehículo terrestre, se toparon con este problema porque el helicóptero podía volar por delante del vehículo terrestre, viendo cambios en los costos más cerca de la meta y, por lo tanto, disminuyendo la velocidad abajo sus algoritmos. ¿Discutieron esta observación interesante? No. Al final, lo mejor que lograron fue hacer que el helicóptero volara directamente sobre el vehículo terrestre, convirtiéndolo en el mástil sensor más caro del mundo. Claro, estoy siendo mezquino. Pero es un gran problema del que nadie quiere hablar, y deberían,

Solo hay un puñado de documentos que discuten esto, principalmente por mí. De los artículos escritos por los autores o estudiantes de los autores de los artículos originales enumerados en esta pregunta, solo puedo pensar en uno que realmente mencione este problema. Likhachev y Ferguson sugieren tratar de estimar la escala de actualizaciones requeridas y eliminar la información almacenada si se estima que la actualización incremental demorará más que un nuevo comienzo. Esta es una solución bastante sensata, pero también hay otras. Mi doctorado generaliza un enfoque similar en una amplia gama de problemas computacionales y está yendo más allá del alcance de esta pregunta, sin embargo, puede encontrar las referencias útiles ya que tiene una visión general exhaustiva de la mayoría de estos algoritmos y más. Ver http://db.acfr.usyd.edu.au/download.php/Allen2011_Thesis.pdf?id=2364para más detalles.

Schwolop
fuente
1
Gracias por agregar estos detalles :) En mi aplicación, el muro se mueve hacia el principio con la misma frecuencia que hacia el final. Implementé BFS, A * y LPA *; A * era en realidad un poco más lento que BFS (mis espacios tienden a estar confinados, por lo que A * solo busca un poco menos de nodos que BFS; mientras tanto, BFS solo necesita una cola, que se puede implementar para que sea más rápida que una cola de prioridad) , pero usando LPA * promediado para ser más del doble de rápido.
BlueRaja - Danny Pflughoeft
9

La idea principal es utilizar un algoritmo incremental, que sea capaz de aprovechar los cálculos anteriores cuando la ruta calculada inicial se bloquea. Esto a menudo se investiga en el contexto de robots, navegación y planificación.

Koenig & Likkachev, Replanificación rápida para navegación en terrenos desconocidos, IEEE Transactions on Robotics, vol. 21, N ° 3, junio de 2005 presenta D * Lite. Parece seguro decir que D * está desactualizado en el sentido de que D * Lite siempre es tan rápido como D *. Además, D * es complejo, difícil de entender, analizar y ampliar. La Figura 9 proporciona el pseudocódigo para D * Lite, y la Tabla 1 muestra resultados experimentales con D * Lite en comparación con BFS, Atrás hacia atrás *, Hacia adelante A *, DynamicSWSF-P y D *.

No conozco los algoritmos más nuevos que enumeras (en cualquier momento D *, campo D *, LEARCH). Hace muy poco vi un robot que usaba D * Lite para planificar en un entorno con caminantes aleatorios. En este sentido, no creo que D * Lite esté desactualizado de ninguna manera. Para su problema práctico, supongo que no hay nada malo en probar la forma habitual de ingeniería: adopte un enfoque y, si no se ajusta a sus necesidades, intente con otra cosa (más compleja).

Juho
fuente
4

Me gustaría agregar algo acerca de la exploración rápida de árboles aleatorios o RRT. La idea básica tiene una buena discusión en Internet, pero probablemente sea seguro comenzar con los enlaces de la página de Wikipedia y con los documentos originales de Kuffner y LaValle sobre el tema.

La característica más importante de los RRT es que pueden manejar espacios con valores reales de dimensiones extremadamente altas sin asfixiarse. Pueden manejar dinámicas, no son óptimas pero son probabilísticamente completas (se garantiza que tendrán éxito si es posible ya que el tiempo de cálculo llega al infinito) y son capaces de manejar objetivos en movimiento. Hay algunas extensiones que les permiten trabajar en espacios no estáticos, el mejor de los cuales parece ser el trabajo RRT multiparte que he vinculado a continuación.

Saul Reynolds-Haertle
fuente
0

Las estructuras de datos llamadas oráculos de distancia manejan tales problemas. Sin embargo, la mayoría de los resultados de la investigación son solo para gráficos estáticos .

Si los gráficos son cuadrículas (y, por lo tanto, planas), existen algunas estructuras de datos dinámicas (no está claro si las constantes son lo suficientemente pequeñas para la aplicación en cuestión):

Los caminos más cortos exactos:

Jittat Fakcharoenphol, Satish Rao: gráficos planos, bordes de peso negativo, caminos más cortos y tiempo casi lineal. J. Comput. Syst. Sci. 72 (5): 868-889 (2006)

Caminos más cortos aproximados:

Philip N. Klein, Sairam Subramanian: Un esquema de aproximación totalmente dinámico para los caminos más cortos en gráficos planos. Algorithmica 22 (3): 235-249 (1998)

Ittai Abraham, Shiri Chechik, Cyril Gavoille: oráculos de distancia aproximada completamente dinámicos para gráficos planos a través de etiquetas de distancia prohibidas. STOC 2012: 1199-1218

Christian Sommer
fuente
Lo sentimos, pero si solo funcionan en gráficos estáticos, ¿a qué te refieres con "manejan tales problemas"? El problema planteado es específicamente sobre gráficos no estáticos.
BlueRaja - Danny Pflughoeft
permítanme cambiar el énfasis: la mayoría de los resultados son solo para gráficos estáticos. Existen algunas estructuras de datos dinámicos. seguido de una lista de esas estructuras de datos dinámicos.
Christian Sommer
0

En la escuela me metí en la optimización de colonias de hormigas . En algunos textos se promocionaba como una solución para el cambio continuo de gráficos, redes de enrutamiento, etc. No es una solución de ingeniería, sino una adaptación de cómo las hormigas navegan alrededor de los obstáculos mediante la difusión de feromonas para marcar caminos buenos y malos. No tengo idea si funciona para su problema, pero creo que es un punto de vista interesante.

silversplinter
fuente