J'ai été impliqué dans le développement de l'un à journy planificateur système de Stockholm de Transport Public en Suède. Il est basé sur l'algorithme de Djikstra, mais avec de résiliation avant chaque nœud a été visité dans le système. Aujourd'hui, quand il y a fiable coordonnées disponibles pour chaque arrêt, je suppose que l'algorithme A* serait le choix.
Les données sur les prochaines trafic a été extrait à partir de plusieurs bases de données régulièrement et compilé dans grandes tables chargées dans la mémoire de notre recherche de cluster de serveur.
Une des clés de la fameuse algorith a l'aide d'un chemin d'accès de la fonction de coût basée sur les voyages et le temps d'attente multiplié par diffrent weightes. Connu en suédois "kresu"temps ces pondérée fois de tenir compte du fait que, par exemple, une minute de temps d'attente est habituellement d'équivalent dans les "inconvénients" de deux minutes de temps de trajet.
KRESU Poids de la table
- x1 - durée de trajet
- x2 - Marche entre les arrêts
- x2 - Attente à un arrêt
pendant le voyage. S'arrête sous le toit,
avec des magasins, etc peuvent obtenir un peu
moins de poids et bondé stations d'
supérieur à adapter l'algorithme.
- Le poids pour le temps d'attente à l'arrêt de la première est une fonction de l'intensité du trafic et peut être comprise entre 0,5 à 3.
Structure de données
La zone
Un nom de domaine où vous le voyage de début ou de fin. Un Arrêt de Bus pourrait être une zone avec deux Arrêts. Une plus grande Station avec plusieurs plates-formes pourrait être une zone avec un arrêt pour chaque plate-forme.
Données: Nom, s'Arrête dans la zone
Arrête
Un tableau avec tous les arrêts de bus, de train et de métro. Notez que vous avez généralement besoin de deux arrêts, l'un pour chaque direction, car il faut un certain temps pour traverser la rue ou à pied à l'autre plate-forme.
Données: Nom, Des Liens, Des Nœuds
Liens
Une liste avec d'autres arrêts, vous pouvez rejoindre à pied à partir de cet arrêt.
Données: d'Autres s'Arrêter, le Temps de marcher sur les autres Stop
Lignes/Tours
Vous avez un certain nombre sur le bus et une destination. Le bus commence à un arrêt et passe plusieurs arrêts, sur son chemin vers la destination.
Données: Le Numéro, Le Nom, La Destination
Les nœuds
En général, vous avez un calendrier, avec le moins le temps pour le moment où il devrait être à la première et à la dernière étape d'une Tournée. Chaque fois qu'un bus/train passe à une halte, vous ajouter un nouveau nœud dans le tableau. Cette table peut avoir des millions de valeurs par jour.
Données: Ligne/Tour, Arrêter, Heure d'Arrivée, Heure de Départ, marge d'Erreur, Nœud Suivant dans la Tour
Recherche
Tableau de la même taille que les Nœuds tableau utilisé pour stocker comment vous y êtes arrivé, et le coût du chemin.
Données: lien Arrière avec Nœud Précédent (pas de définir si le Nœud est non visités), Coût de Chemin (infinit pour non visitée)