46 votos

¿Existen algoritmos de encaminamiento más novedosos (que Dijkstra, A*) en las bases de datos del SIG?

Hay obras como Alcanzar la A* de los investigadores de Microsoft y Jerarquías de carreteras de Sanders y Schtolz (si escribo bien el nombre) de Universidad de Karlsruhe . Ambos reducen mucho el orden de los cálculos y aceleran miles de veces los gráficos grandes (véanse los resultados en los documentos enlazados). Este último trabajo condujo a Máquina de enrutamiento de código abierto que desafortunadamente no es lo suficientemente popular y no está adaptado (no pude compilarlo aunque lo intenté).

Al mismo tiempo, las dbs que he probado, Spatialite y PgRouting, según sus docs, ofrecen sólo Dijkstra y A* algoritmos. Ni siquiera he visto que se mencione la búsqueda bidireccional, que ahorra tiempo de cálculo dos veces según mi experiencia.

¿Existen mejores algoritmos para bases de datos u otras aplicaciones?

23voto

FlySwat Puntos 61945

La verdad es que la mayoría de la gente utiliza una variación personalizada del A* algoritmo. Esto lo verás en la mayoría de los "grandes" (no puedo decir quiénes son en un foro público, pero te puedo decir que probablemente utilices uno de ellos - garantizado), donde la modificación de la heurística es muy dependiente de los conjuntos de datos que utilizan.

Usted mencionó pgrouting ya, que yo consideraría una opción "tradicional". Es bueno para hacer algoritmos de enrutamiento simples y para la mayoría de los problemas. También es fácil de usar y utiliza una base de datos tradicional en su backend.

Sin embargo, depende realmente de la escala y el tipo de problema que se intente resolver y el enrutamiento es un gráfico problema.

Una vez más, los "grandes" suelen tener muchos datos asociados a su gráfico (por ejemplo, datos de tráfico, rutas de autobús, recorridos a pie) que afectan al algoritmo de enrutamiento. Estos se conocen como planificadores de viajes multimodales (en los que también se puede elegir el "modo" de planificación -sin carril bici, sólo con transporte público-, ese tipo de cosas). Se puede pensar que la planificación de viajes también se convierte en una cuestión de tiempo (por ejemplo, si se camina volver unos bordes atrás, podrá coger el metro que le lleve a su destino adelante mucho más rápido que si sólo se tratara de navegar por los bordes hacia delante utilizando el coste más bajo).

Los "grandes" no almacenan sus datos en una base de datos tradicional propiamente dicha, sino que utilizan gráficos precalculados (¡bienvenidos los clusters de hadoop/mapreduce!). Como puedes imaginar, estos grafos llegan a ser realmente grandes, por lo que saber cómo conectar las aristas de los grafos adyacentes puede ser un reto.

De todos modos, te recomendaría que miraras algunos proyectos de gráficos de enrutamiento multimodal:

Servidor de gráficos me viene a la mente. No hay mucha documentación, pero sí un montón de genialidades de codificación (AFAIK, creo que MapQuest utiliza una variación de este proyecto para algunos de sus productos de enrutamiento).

Otra opción sería el OpenTripPlanner que tiene un montón de gente inteligente detrás (incluyendo gente de graphserver).

15voto

Swinders Puntos 1042

No estoy seguro de que sea más nuevo pero pgRouting tiene un Algoritmo Shooting-Star :

El algoritmo Shooting-Star es el último de los algoritmos de ruta más corta de pgRouting. Su particularidad es que realiza el recorrido de enlace a enlace, no de vértice a vértice como los algoritmos Dijkstra y A-Star como los algoritmos Dijkstra y A-Star. Esto permite definir relaciones entre enlaces, por ejemplo, y por ejemplo, y resuelve algunas otras problemas de los algoritmos basados en vértices como "enlaces paralelos", que tienen el mismo origen y destino pero con costes diferentes.

La extensión Network Analyst de ESRI utiliza el enfoque jerárquico que mencionaste para limitar los tiempos de resolución:

Encontrar el camino más corto exacto en un conjunto de datos de la red nacional es tiempo debido al gran número de de aristas que hay que buscar. Para mejorar el rendimiento, los conjuntos de datos de red pueden modelar la jerarquía natural de un sistema de transporte en el que la conducción en una autopista interestatal es preferible a conducir por las carreteras locales. Una vez que una red jerárquica se ha creado, una modificación de la red bidireccional de Dijkstra se utiliza para calcular una ruta entre un origen y un destino.

Hay un documento muy detallado papel blanco con ejemplos sobre este enfoque en el sitio de ESRI - sin embargo, es necesario iniciar sesión para descargarlo (Hierarchical Routes In ArcGIS Network Analyst White Paper).

11voto

Kiran Puntos 320

Contracción La jerarquía es un algoritmo muy rápido:

Este algoritmo es amigable con la memoria RAM mientras se ejecuta una consulta (para mantener un gráfico contraído se necesita algo más de memoria RAM así como un preprocesamiento masivo)

Hay otros algoritmos, como los que resuelven el enrutamiento del transporte público:

Microsoft también está investigando:

(bueno, Daniel Delling también es de Karlsruhe)

Puede obtener una buena introducción y una visión general de los algoritmos disponibles:

Advertencia: conferencias en alemán (!). pero al menos las cabeceras pueden ayudarle a obtener más información (ALT, Arc-Flags, CHASE, ...) o la literatura anexa!

actualización

GraphHopper ahora implementa jerarquías de contracción y también otros algoritmos, también puede probar el demo .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X