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).