Page d'accueil Description du projet

Itinéraires optimaux sur un reseau de bus

Accès rapide

Commentaires

  1. Objectifs
  2. A Grenoble, le réseau de bus/tram est assez complet et redondant pour que je puisse aller de chez moi à la gare SNCF par 6 itinéraires différents utilisant 5 lignes de bus. Alors à chaque fois qu'on a besoin d'aller à la gare pour un horaire précis, soit on prend les 5 livrets d'horaires et on évalue chaque itinéraire, soit on prend 20 minutes de marge et on choisit au hasard...

    Alors un jour, je me suis proposé de rentrer les horaires dont j'avais besoin sur l'ordinateur et d'utiliser un algorithme de "plus court chemin" pour choisir au mieux l'itinéraire. Optimiste, je croyais vraiment que ça ne serait pas compliqué...

    Cependant, au lieu de créer un logiciel qui réponde uniquement à mes besoins, ma formation de génie logiciel m'a poussé à faire quelque chose de très générique : un logiciel capable de rechercher des itinéraires optimaux sur le réseau réel complet de Grenoble, et même sur un réseau de bus quelconque.

    Spécificité du problème traité : mon problème est d'arriver à l'heure, voire un peu en avance. Parmi les données de l'algorithme, il y a donc une heure limite à ne pas dépasser pour l'arrivée. Il pourrait aussi être intéressant de trouver le plus court chemin, sachant qu'on est dans l'abris-bus à partir d'une heure donnée...

  3. Difficultés
  4. Il y a deux types de difficultés dans ce projet : les difficultés liées à la spécificité du réseau de bus grenoblois et celles liées à la notion de plus court chemin sur un tel réseau. Et puis, il y a aussi le fait qu'au moment où j'ai commencé ce projet, je ne connaissais rien aux bases de données, ce qui m'a amené à gérer "à la main" le stockage et la lecture des données du réseau.

    Tout d'abord, au niveau physique, le réseau pose des problèmes :

    Ensuite, au niveau de la définition des horaires :

    Finalement, l'intégration de tous ces paramètres dans un algorithme de recherche du meilleur itinéraire s'est révélée complexe.

  5. Principe
  6. Données de l'algorithme

    Gestion des horaires

    Les horaires des lignes classiques sont interpolés par rapport aux horaires de passage aux arrêts de référence. Les arrêts intermédiaires sont supposés équidistants, ce qui forme une approximation raisonnable en pratique.

    Pour les horaires génériques, on fait aussi une interpolation, non sur le moment du passage, mais sur la durée du voyage entre deux arrêts. Si on ajoute ensuite la fréquence de passage à la durée interpolée, on obtient une borne supérieure au temps Attente + Voyage. Le voyage sera sûrement plus court mais l'heure limite d'arrivée ne sera pas dépassée.

    Plus court chemin

    La recherche du plus court chemin se fait en deux étapes : on recherche d'abord quelles successions de lignes mènent du départ à l'arrivée, puis on cherche pour chaque succession quelle serait la durée minimale du voyage. Les itinéraires sont ensuite affichés du plus court au plus long.

    Pour rechercher les successions de lignes utilisables, on part de l'arrêt de départ et on regarde quelles sont les lignes présentes. Pour chacune de ces lignes, on regarde si elle permet d'atteindre l'arrêt de destination. Si oui, on a un itinéraire valide, sinon, on regarde quelles sont les lignes qu'elle permet d'atteindre et on itère jusqu'à atteindre le nombre maximum de correspondances. Cette partie est la partie la plus coûteuse de la recherche. C'est ici qu'il serait intéressant d'ajouter une heuristique pour limiter le nombre d'itinéraires considérés.

    Pour traiter un itinéraire (succession de lignes), on utilise une structure de treillis : ce treillis represente l'ensemble des chemins possibles pour aller d'un arrêt à un autre en passant par une liste fixée de ligne.

    Le but est de chercher le plus court chemin (en terme d'horaire) entre A et N et passant par L1..L4. Pour cela, sachant l'heure à laquelle on veut être en N, on en déduit l'heure à laquelle on doit être en I,J,K,L et M. Puis on propage, jusqu'à déterminer l'heure à laquelle on doit partir de l'arrêt de départ. Par la même occasion, on obtient les correspondances les plus efficaces.

  7. Format de la base de donnée
  8. Se reporter à : Formats

Démonstration

Si vous ne disposez pas de Tcl/Tk, la commande "make test" effectue une recherche de démonstration. Les données de la recherche sont lues dans le fichier "query" dont l'utilisation directe n'est pas très pratique.

Cependant, si vous disposez de Tcl/Tk, "make test" utilise le script recherche.tcl qui fournit une interface graphique pour définir le fichier de requête ("query").

Définition de la requête

Résultats