Pathfinding (routage, la planification de voyage, ...) des algorithmes sur les graphes avec des restrictions de temps
J'ai une base de données de bus/train/... s'arrête et l'arrivée/heure de départ sur chaque date, et ainsi de suite. Je suis à la recherche d'un moyen de faire une recherche de la manière la plus rapide(la plus courte/moins cher/moins de transitions) trajet entre deux lieux. Je voudrais avoir des emplacements arbitraires dans l'avenir, en utilisant les données OpenStreetMap pour faire de la randonnée entre les arrêts et à partir de l'arrêt de début/fin, cependant, pour le moment, je veux juste trouver un chemin entre deux arrêts dans la base de données.
Le problème est que je n'arrive pas à trouver beaucoup d'infos sur ce sujet, par exemple cette page de Wikipedia a beaucoup de texte avec absolument aucune information utile en elle.
Ce que j'ai trouvé est le GTFS format, utilisé dans Google Transit. Alors que ma ville n'est pas un public de flux de données (même pas un privé), j'ai déjà toutes les informations importantes que le GTFS contient et de faire une transformation serait trivial.
Il y a quelques GTFS logiciel basé sur, comme comme OpenTripPlanner qui peut aussi faire piéton/voiture/moto /vélo de routage à l'aide de OpenStreetMap.
Cependant, le code de routage n'est pas bien documenté (au moins depuis que j'ai trouvé) et je n'ai pas besoin de la totalité de la chose.
Tous je suis à la recherche pour certains une bonne vue d'ensemble des algorithmes que je pouvais utiliser leur performance, peut-être que certains pseudo-code.
Donc, la question est, étant donné une liste d'arrêts, de routes et d'arrivée/départ/temps de trajet, comment puis-je facilement trouver le chemin le plus rapide de l'arrêt à Un stop B?
Vous devez vous connecter pour publier un commentaire.
chaque bus/train sera un avantage.
w:Edges->R
,qui indique le temps/l'argent/... pour chaque bord.L'algorithme de Dijkstra, et qui trouve son chemin d'accès minimal à tous les sommets à partir d'une source donnée.
(*) Pour les " moins de transitions, votre poids est en fait 1 pour chaque bord, de sorte que vous pouvez même optimiser ce par l'exécution d'un BFS ou même bi-directionnel BFS au lieu de dijkstra, comme je l'ai expliqué dans ce post [Il est expliqué pour la distance sociale, mais c'est le même algorithme].
MODIFIER
comme une modification à la non-statique de la nature du graphe [timing] vous avez mentionné sur commentaires [pour le prix et le nombre de transitions, ce que j'ai mentionné ci-dessus s'applique toujours, comme ces graphiques sont statiques], vous pouvez utiliser un distance vector routing algorithm, qui, en fait, destinée à travailler pour la dynamique des graphes, et est distribué variation de Bellman Ford algorithme.
L'algorithme idée:
voisins [le vecteur indique combien il des "coûts" de voyager à partir de l'envoi d'un sommet à chaque autre sommet.