Recuperando la ruta más corta de un gráfico dinámico


24

Actualmente estoy estudiando los caminos más cortos en gráficos dirigidos. Existen muchos algoritmos eficientes para encontrar el camino más corto en una red, como el de dijkstra o el de bellman-ford. Pero, ¿y si el gráfico es dinámico? Al decir dinámico quiero decir que podemos insertar o eliminar vértices durante la ejecución del programa. Estoy tratando de encontrar un algoritmo eficiente para actualizar las rutas más cortas desde un vértice a cualquier otro vértice , después de insertar un borde , sin necesidad de volver a ejecutar el algoritmo de ruta más corta en el nuevo gráfico. ¿Cómo puedo hacer esto? Gracias por adelantado.u evue

  • Nota: los cambios se pueden realizar después de la primera iteración del algoritmo
  • Nota [2]: se dan dos nodos, la fuente el objetivo. Necesito encontrar el camino más corto entre estos nodos. Cuando se actualiza el gráfico sólo tengo que actualizar , que es el camino más corto entre y .t π ( s , t ) s tstπ(s,t)st
  • Nota [3]: solo me interesa el caso de inserción de borde.

Una definición formal : dado un gráfico . Definir una operación de actualización como 1) una inserción de un borde a o 2) aa eliminación de un borde de . El objetivo es encontrar de manera eficiente el costo de todos los pares de rutas más cortas después de una operación de actualización. Por eficiente, queremos decir al menos mejor que ejecutar un algoritmo de Todos los pares de ruta más corta, como el algoritmo Bellman-Ford, después de cada operación de actualización.e E e EG=(V,E)eEeE


Editar: a continuación hay una versión simplificada del problema:

Se proporciona un gráfico ponderado , que consta de bordes unidireccionales y dos vértices críticos y . También se proporciona un conjunto de bordes bidireccionales candidatos . Tengo que construir una arista para minimizar la distancia de a .s t CG(V,E)stCs t(u,v)Cst


Más preguntas de aclaración: ¿los puntos finales de su ruta permanecen fijos cada vez? ¿Solo le interesa el caso de inserción de bordes o los cambios arbitrarios en el gráfico? Creo que hay investigaciones que responden a su pregunta, pero desafortunadamente no sé realmente dónde buscar. Una búsqueda rápida en Google muestra estas diapositivas que parecen muy útiles, y este documento: "caminos más cortos en gráficos dinámicos" (espero que el enlace funcione). (u,v)
usul

Respuestas:


14

El problema como probablemente haya notado es un problema bastante difícil. Verificar la web conducirá a algunas instancias complejas que probablemente no necesitará. Aquí hay una solución, según sea necesario (es decir, no es necesario volver a calcular todo desde cero).

para el caso de agregar un borde , luego usar su matriz de distancia ya construida, haga lo siguiente:(u,v)

Para cada par de nodos e verifique si - esto se puede hacer en ya que está comparando cada par de nodos.y d ( ( x , u ) ) + c ( ( u , v ) ) + d ( ( v , y ) ) < d ( ( x , y ) ) O ( n 2 )xyd((x,u))+c((u,v))+d((v,y))<d((x,y))O(n2)

Para el caso de la eliminación de bordes: dada la matriz de distancia ya construida, puede tener para cada nodo un árbol de ruta más corta enraizado en . Si el borde eliminado no está en ese árbol, entonces los caminos más cortos desde hasta todos los demás no se ven afectados (siguen siendo los mismos).u e uuueu

Si está en el árbol de la ruta más corta de , entonces para cada nodo tal que la ruta más corta incluya , las rutas cambiarán. Por lo tanto, calcule la ruta más corta de a . Ahora, repita lo anterior para cada nodo; esta no es la mejor solución. De hecho, en el peor de los casos, es asintóticamente equivalente a hacer todo desde cero, pero puede ser mejor en promedio. u v π ( u , v ) e u veuvπ(u,v)euv

si desea obtener mejores resultados que esto, eche un vistazo a:

  1. Demetrescu, Camil y Giuseppe F. Italiano. "Un nuevo enfoque dinámico para todos los pares de caminos más cortos". Revista de la ACM (JACM) 51.6 (2004): 968-992. (se puede encontrar libremente en Google)

  2. o echa un vistazo a esta encuesta bien escrita


17

El problema que está solicitando es un problema algorítmico bien conocido. En realidad todavía está abierto, cuán difícil es exactamente este problema. También debe saber que hay diferentes encarnaciones de este problema. En contraste con lo que está pidiendo, generalmente solo se devuelven las distancias, mientras que está solicitando los caminos más cortos reales. Tenga en cuenta que estos caminos ya pueden ser muy largos. Los algoritmos de gráficos dinámicos distinguen solo entre eliminaciones de bordes (algoritmos de dg decrementales), solo inserciones de bordes (algoritmos de dg incrementales) e inserciones y eliminaciones de bordes (algoritmos de dg completamente dinámicos). Por lo tanto, está interesado en algoritmos incrementales .

Los algoritmos mencionados en la publicación de AJed están ligeramente desactualizados. Hay nuevos resultados de Thorup, vea aquí, en la página 8 para una breve encuesta. El algoritmo APSP exacto completamente dinámico actualmente mejor de Thorup (para consultas de distancia, no la ruta), necesita tiempo de actualización amortizado, mientras que admite peor tiempo de consulta. Tenga en cuenta que si tiene bordes , entonces podría recalcular desde cero con Dijkstra y montones de Fibonacci y obtener el mismo tiempo de ejecución que en el algoritmo de Thorup. Entonces, si sus gráficos no son densos, recomendaría usar Dijkstra.O ( 1 ) O ( n log n )O(n2(logn+log2(1+m/n))O(1)O(nlogn)

No conozco ningún mejor algoritmo incremental . Pero debe hacer una búsqueda en la web si existen resultados más recientes para este problema especializado.


No necesito actualizar todas las rutas más cortas en el gráfico, sino solo entre un par dado . ¿Hay algo mejor para eso? (s,t)
Rontogiannis Aristofanis

@RondogiannisAristophanes, de hecho, lo que se ha propuesto hasta ahora es de alguna manera el mejor. Eche un vistazo a este documento que afirma que: "los problemas de rutas más cortas de fuente única incremental y decreciente, para gráficos ponderados dirigidos o no dirigidos, son, en un sentido fuerte, al menos tan difíciles como las rutas más cortas estáticas de todos los pares problema." (para ser honesto, solo he leído la introducción) - referencia: "En problemas dinámicos de caminos más cortos", Roditty & Zwick - pero ¿podría decirnos cuál es el problema exacto que tiene? ¿Qué escenario específico? ¿Qué has puesto hasta ahora? - Quizás podamos ayudarte mejor.
AJed

@RondogiannisAristophanes cuanto mejor sea el rendimiento, más difícil será implementarlo (en la mayoría de los casos) y, a veces, en aplicaciones prácticas, no necesita tanta mejora en el rendimiento.
AJed

@AJed Edité mi publicación para incluir una descripción simplificada del problema.
Rontogiannis Aristofanis

5

Creo que el algoritmo AD * podría ayudarte.

http://www.cs.cmu.edu/~ggordon/likhachev-etal.anytime-dstar.pdf

Cuando se recibe información actualizada sobre el gráfico subyacente, el algoritmo repara gradualmente su solución anterior. El resultado es un enfoque que combina los beneficios de los planificadores incrementales y en cualquier momento para proporcionar soluciones eficientes a problemas de búsqueda complejos y dinámicos.

Aspectos destacados de AD *: es "en cualquier momento", lo que significa que puede darle una "solución subóptima" muy rápidamente, aunque puede que no sea la mejor. Sin embargo, dado el tiempo suficiente, devolverá la solución óptima. Además, puede restringir la solución subóptima para que no sea peor que la solución óptima mediante alguna constante definida por el usuario. Esto le brinda la posibilidad de usar esto en un escenario de planificación en tiempo real donde tener una solución correcta (donde 'bien' está teóricamente limitado) es mejor que no tener ninguna solución.

http://www.cs.cmu.edu/~maxim/software.html

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.