Existe-t-il de nouveaux algorithmes de routage (que Dijkstra, A *) dans les bases de données SIG?


46

Il existe des travaux tels que Reach for A * de chercheurs Microsoft et Highway Hierarchies de Sanders et Schtolz (si j'épelle correctement le nom) de Karlsruhe Uni . Tous les deux réduisent beaucoup l'ordre des calculs et accélèrent des milliers de fois sur de grands graphiques (voir les résultats dans les documents liés). Ce dernier travail a conduit à Open Source Routing Machine , qui malheureusement n’est pas assez populaire et n’est pas adapté (je ne pouvais pas le compiler, bien que j’ai essayé de le faire).

Dans le même temps, les dbs que j'ai essayés, Spatialite et PgRouting, ne proposent, selon leur documentation, que des algorithmes Dijkstra et A * . Je n'ai même pas vu la recherche bidirectionnelle mentionnée, ce qui économise deux fois le temps de calcul de mon expérience.

Existe-t-il de meilleurs algorithmes pour les bases de données ou d’autres applications?


1
Avez-vous posté votre question sur les listes de diffusion des utilisateurs ou des développeurs de pgRouting? Vous pourriez obtenir une meilleure réponse directement de cette communauté. Liste des utilisateurs: ( lists.osgeo.org/mailman/listinfo/pgrouting-users ) Liste des développeurs: ( lists.osgeo.org/mailman/listinfo/pgrouting-dev )
RyanDalton le

+1 excellente question. Je me demande quel algorithme google utilise pour obtenir des directions . Question connexe ici .
Kirk Kuykendall

1
Étant donné que Google a soutenu l’équipe de Karlsruhe ( algo2.iti.uni-karlsruhe.de/english/index.php ), je suppose qu’ils utilisent leur logiciel, qui est essentiellement un routeur Open Source.
culebrón

Réponses:


23

La vérité est que la plupart des gens utilisent une variante personnalisée de l' algorithme A * . Vous verrez cela dans la plupart des «gros joueurs» (je ne peux pas dire qui ils sont sur un forum public, mais je peux vous dire que vous en utilisez probablement un, c'est garanti), où la modification de l'heuristique est très dépendant des jeux de données qu’ils utilisent.

Vous avez déjà parlé de la planification , ce que je considérerais comme une option "traditionnelle". C'est bon pour faire des algorithmes de routage simples et pour la plupart des problèmes. Il est également facile à utiliser et utilise une base de données traditionnelle dans son backend.

Néanmoins, cela dépend vraiment de l’échelle et du type de problème que vous essayez de résoudre et le routage est un problème graphique .

Encore une fois, les «gros joueurs» ont généralement beaucoup de données associées à leur graphique (par exemple, des données de trafic, des itinéraires de bus, des chemins piétonniers) qui affectent l'algorithme de routage. Celles-ci sont connues sous le nom de planificateurs de voyages multimodaux (où vous avez également le choix entre des "modes" de planification - pas de piste cyclable, mais uniquement des transports en commun - ce genre de chose). Vous pouvez penser comment la planification du voyage devient aussi une question urgente (si vous marchez en arrière quelques bords arrière, vous pourrez prendre le métro qui vous mènera à votre destination avant beaucoup plus rapidement que si vous venez d' essayer de naviguer dans les bords avant en utilisant le coût le plus bas).

Les "gros joueurs" ne stockent pas leurs données dans une base de données traditionnelle, ils utilisent des graphes pré-calculés (bienvenue aux clusters hadoop / mapreduce!). Comme vous pouvez l’imaginer, ces graphiques deviennent vraiment volumineux. Il peut donc être difficile de savoir comment relier les bords des graphiques adjacents.

Quoi qu'il en soit, je vous recommanderais d’examiner certains projets de graphe de routage multimodal:

Graphserver vient à l'esprit. Pas beaucoup de documentation, mais beaucoup de génialité de codage pur (autant que je sache, MapQuest utilise une variante de ce projet pour certains de leurs produits de routage).

Une autre option serait OpenTripPlanner, qui compte beaucoup de personnes intelligentes (y compris des personnes de graphserver).


15

Pas sûr que ce soit plus récent, mais pgRouting a un algorithme Shooting-Star :

L'algorithme Shooting-Star est le dernier en date des algorithmes les plus courts du chemin pgRouting. Sa spécialité est qu'il navigue de lien en lien, et non de sommet en sommet comme le font les algorithmes de Dijkstra et A-Star. Cela permet par exemple de définir des relations entre liens et de résoudre d'autres problèmes d'algorithmes basés sur les sommets, tels que les «liens parallèles», qui ont la même source et la même cible mais des coûts différents.

L'extension Network Analyst d'ESRI utilise l' approche hiérarchique que vous avez mentionnée pour limiter les temps de résolution:

La recherche du chemin le plus court exact sur un jeu de données réseau à l'échelle nationale prend beaucoup de temps en raison du grand nombre d'arêtes à rechercher. Pour améliorer les performances, les jeux de données réseau peuvent modéliser la hiérarchie naturelle dans un système de transport où la conduite sur une autoroute inter-États est préférable à la conduite sur des routes locales. Une fois qu'un réseau hiérarchique a été créé, une modification de la Dijkstra bidirectionnelle est utilisée pour calculer un itinéraire entre une origine et une destination.

Un livre blanc très détaillé avec des exemples de cette approche est disponible sur le site ESRI. Toutefois, vous devez vous connecter pour le télécharger (livre blanc Routes hiérarchiques dans ArcGIS Network Analyst).


11

La hiérarchie de contraction est un algorithme très rapide:

Cet algorithme prend en charge la RAM lors de l’exécution d’une requête (pour contenir un graphique contracté, il faut un peu plus de RAM ainsi qu’un prétraitement massif).

Il existe d'autres algorithmes, y compris ceux qui résolvent l'acheminement du transport en commun:

Microsoft effectue également des recherches:

(Daniel Delling vient aussi de Karlsruhe)

Vous pouvez obtenir une bonne introduction et une vue d'ensemble des algorithmes disponibles:

Attention: cours d'allemand (!). mais au moins les en-têtes peuvent vous aider à obtenir plus d'informations (ALT, Arc-Flags, CHASE, ...) ou la littérature jointe!

mise à jour

GraphHopper implémente maintenant des hiérarchies de contraction ainsi que d'autres algorithmes. Vous pouvez également essayer la démo .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.