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:
- D * (1994)
- Centrado D * (1995)
- DynamicSWSF-FP (1996)
- LPA (1997)
- LPA * / Incremental A * (2001)
- D * Lite (2002)
- SetA * (2002)
- HPA * (2004)
- En cualquier momento D * (2005)
- PRA * (2005)
- Campo D * (2007)
- Theta * (2007)
- HAA * (2008)
- GAA * (2008)
- BÚSQUEDA (2009)
- BDDD * (2009 - No puedo acceder a este documento: |)
- Phi incremental * (2009)
- GFRA * (2010)
- MTD * -Lite (2010)
- Árbol-AA * (2011)
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.
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.
fuente
Respuestas:
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.
Dado todo esto, parece que LPA * es la mejor opción para mi problema.
fuente
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.
fuente
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).
fuente
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.
fuente
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
fuente
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.
fuente