Rapport de projet 2010 - Algorithme de Dijkstra

publicité
Rapport de projet 2010
- Algorithme de Dijkstra-
L2 Timothée Poulain (IM)
16 décembre 2009
Table des matières
1 Introduction
3
2 Cahier des charges
4
1.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Introduction au rapport . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 Analyse
3.1 Vue générale de la solution . . . . . . . . . .
3.1.1 Notions Fondamentales . . . . . . .
3.2 Modélisation . . . . . . . . . . . . . . . . .
3.2.1 Algorithme particulier : L'algorithme
3.3 Interface graphique . . . . . . . . . . . . . .
3.3.1 Description . . . . . . . . . . . . . .
3.3.2 Les Evénements . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
de Dijkstra.
. . . . . . .
. . . . . . .
. . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
5
. 5
. 5
. 6
. 8
. 9
. 9
. 11
4 Conclusion
12
A Bibliographie
12
1
1
1.1
INTRODUCTION
Introduction
Présentation
Ceci est mon projet informatique de deuxième années de licence, l'objectif est de
construire un programme qui permet de visualiser graphiquement le plus court chemin
entres deux sommets qui seront symbolisés par des villes. Tous ceci avec l'étude au
préalable de L'Algorithme de Dijkstra indispensable à la réalisation de ce projet .
1.2
Fonctionnalités
Les diérentes fonctionnalités que j'ai réalisées sont les suivantes :
Tout d'abord, il fallut construire deux chiers texte, l'un étant le chier routes.txt se composent de la liste des sommets du graphe et la liste pour chacun de ces successeurs.
Chaque sommet étant dénis au préalable par un trigramme qui sera identié dans le
second chier texte ville.txt , tous ceci dans la construction du graphe. Le chier
texte routes.txt disposera aussi de la distance entre la ville choisit et chacun de ces
successeurs et la vitesse maximal autorisé sur ce trajet.
Ensuite, la fonctionnalité qui me semble être la plus importante dans ce projet, le
calcul du chemin le plus court. Cette fonctionnalité qui sera plus précisément décrite
dans une autre partie, n'a été possible qu'avec l'aide de l'algorithme de Dijkstra. Celle-ci
nous permettra soit de calculer le trajet le plus court, soit le trajet qui mettra le moins
de temps possibles. De plus, en ce qui concerne la fonctionnalité qui sert à exploiter les
resultats, l'ordinateur me renvera toutes les données que ce soit la distance ou le temps
du trajet ainsi qu'un listing de toutes les villes ou l'utilisateur à du passer.
Au contraire, dans une partie plus graphique une fonctionnalité qui permet d'acher
une carte de France ainsi que toutes les villes choisis pour cet eet. Ainsi que la possibilité
de choisir soit par clique sur les villes de la carte, soit à l'aide d'un bouton les deux villes,
ou autres intermédiaire choisis pour le trajet.
Quant à la fonctionnalité de calcul du temps et de la durée la plus courte entre deux
sommets sur l'interface graphique elle sera achée dans un panneau.
1.3
Introduction au rapport
Pendant la lecture de mon rapport vous vous rendrez compte qu'il se décompose en
plusieurs parties : La première est de type introductif elle décrit le projet, établit la problématique général de ce projet. Puis, je m'occuperais du cahier des charges, qui au-delà
de nous permettre de faire une liste de fonctionnalités elle nous permettra de conclure
sur la bonne réalisation de toutes les fonctionnalités.
Enn, j'exposerais une analyse plus détaillé de l'ensemble du projet, avec une modélisation des notions fondamentales et une description d'un algorithme en particulier, des
3
LATEX
2
CAHIER DES CHARGES
classes et méthodes. Et pour nir, une description sur l'interface graphiques et ces composants.
2
Cahier des charges
Les diérentes fonctionnalités qui compose le projet sont :
• Création du chier texte routes , avec la liste des villes choisis sous forme de
•
•
•
•
•
•
•
•
trigrammes (Trois lettres) et de ces succeseurs (villes le plus à proximité de celle
choisi). Les distances entre la ville choisit et son succeseur devra y être explicité et
la vitesse maximal autorisée sur le trajet.
Création d'un deuxieme chier texte villes qui permettra de dénir chaque
trigrammes.(PAR = Paris)
Création du graphe à l'aide des deux chiers textes.
Calcul du plus court chemin entre deux villes, à l'aide de l'algorithme de Dijkstra.
L'algorithme de Dijkstra devra prendre en compte, les deux conditions qui sont la
distance et le temps. Et donc de calculer le plus court chemin soit, de plus petite
distance, soit de plus faible temps de parcours.
La création de deux tableaux pour l'algoritme, le premier étant pour le cout
du plus court chemin à chaque étape . Le second, devra stocker le sommet de
l'avant derniere tout en concidérant qu'il prend toujours le plus court parcourt.
L'utilisateur devra pouvoir entrer une ville de départ et une ville d'arrivée. Et en
donnant les plus court trajet soit par le temps ou la distance, devrons nous être
indispensable au calcul des distances totales et du temps totales.
Pour la partie graphique, la presence d'une carte de France est indispensable possédant les villes du chiers textes.
Plusieurs couleurs devront être à l'actif, rouge s'il s'agit d'une autoroute et bleue
s'il s'agit d'une nationnal.
Quelques Composants permettant de lancer l'algorithme de choisir une ville de
départ et d'arrivée graphiquement et un qui permettra de choisir le parcourt le
plus court.
4
LATEX
3
3
3.1
ANALYSE
Analyse
Vue générale de la solution
3.1.1 Notions Fondamentales
Tout d'abord, le bonne conception et la bonne adaptation, au niveau symbolique des
deux chiers textes est d'une importance capitale. Sans une bonne lecture de ces deux
derniers, l'algorythme ne fonctionnera jamais correctement.
Construire l'algorithme de Dijkstra en java, et l'utiliser dans une interface graphique.
Il faut utiliser celui-ci pour recréer l'environnement d'un gps , c'est-à-dire gérer une
interface graphique ou manuellement un trajet entre deux villes. An de permettre de
calculer le plus court chemin entres ces deux sommets ainsi que ces villes escale.
L'utilisateur devra être en mesure à l'aide de plusieurs outils conceptuels tel que le
clique sur une des villes ou le choix dans une liste déroulantes, de se choisir un parcourt.
L'ajout d'une ville ou d'une autre route ne devra pas altéré le code de départ.
De plus, il faudra gérer le fait que le chemin le plus court (en distance) ne veut pas
forcément dire le chemin le plus rapide. Ainsi que de gérer par un système de couleur le
fait que l'utilisateur parcourt une nationale ou une autoroute.Le fait que l'utilisateur aura
à sa demande soit le choix entre le durée d'un trajet entre deux villes, soit la distance
entre ces deux. Néamoins, il pourra être agrémenté des villes intermédiaires.
5
LATEX
3.2
Modélisation
3.2
3
ANALYSE
Modélisation
Figure 1 Diagramme de classes
Liste des fonctions importantes ainsi que leur descriptif :
Dans la Class Draw-city :
• Draw_Line() ;
Fonction qui permet de tracer des lignes sur la carte de France permettant au click
sur Calcul de faire joindre en passant par les villes intermédiaires, les deux
sommets souhaités.
• Draw_ar() ;
Fonction qui permet de dessiner des petits cercles de couleur autour des villes pour
permettre à l'utilisateur de savoir ou cliquer pour choisir une ville.
• Draw_road() ;
6
LATEX
3.2
Modélisation
3
ANALYSE
Fonction qui permet de changer la couleur de la routes suivant ce que l'utilisateur
décide du chemin à prendre, c'est-à-dire soit rouge pour les autoroutes, soit bleue
en ce qui concerne les routes nationnales .
Dans la Class Dijkstra :
• Init_graph () ;
Fonction qui permet l'installation du graphe , et du début des calculs avec les deux
tablaux de Sommets et de Successeurs.
• City_Djikstra() ;
Calcul du chemin avec le graphe, permettant de pouvoir ressortir les resultats les
plus important du projet qui nous serviront pour ensuite calculer et acher toutes
les valeurs disponibles.
Dans la class Interface-mapp :
• initialize() ;
Fonction qui initialise tous les composants de l'interface et qui de plus implante
l'image, la carte de France dans l'interface graphique.
• change_Jc() ;
Fonction qui permet de faire changer la liste déroulante permettant de mettre en
premier la ville qui a été choisit, donc cliquer sur la carte.
• mouseClicked() ;
Fonction qui permet de récuperer les coordonées de l'endroit ou l'utilisateur a
cliquer sur la carte.
• start() ;
Fonction qui permet de pouvoir lancer l'interface, car au départ les boutons ne sont
pas cliquables.
• réinitialize() ;
Fonction qui permet de réinitialiser la carte de France a vide et de pouvoir refaire
un trajet.
• Affichage_JT() ;
fonction qui permet d'acher les valeurs et résultats dans l'endroit souhaité.
• Affichage_roadcity() ;
Permet d'acher les traits et les petites ronds qui représente les routes et les villes.
• initialize() ; Start(); reinitialize();
Dans la Class Calcul-Res : Pas de méthodes particulières simplement des accesseurs et mutateurs permettant pour d'autre Class de pouvoir les utiliser.
Dans la Class Read-Cord :
• Read_File() ;
Cette Fonction permet de décrypter le chier texte Coordonnees.txt qui
me sera très utile pour tous ce qui résultera de l'interface graphique et surtout du
choix par clique sur une des villes .
7
LATEX
3.2
Modélisation
3
ANALYSE
Dans la Class Villes : Pas de méthode particulière dans cette Class. Simplement
des outils qui serviront à l'ensemble des autres classes.
Dans la Class Villes-adj : Pas de méthode particulière dans cette Class tout
come la Class Villes
Dans la Class Creation-graph :
• LireFichier() ;
Fonction donné au départ an de pouvoir se déplacer dans le chier texte et le lire.
• Constr_graph() ;
Fonction qui sert à la construction du graphe à l'aide des éléménts lis dans le chier
Texte.
• Ajout_city() ;
Fonction qui permet l'ajout d'une ville sans que le code ne change.
• Ajout_road() ;
Fonction qui permet l'ajout d'une route sans qu'il n'y est de problè me.
Dans la Class Time-Run :
• Init();
Fonction qui permet de perdre en paramètre la durée, la vitesse et le temps. An
d'utiliser ces donnés après le lancement de l'algorithme.
3.2.1 Algorithme particulier : L'algorithme de Dijkstra.
Figure 2 Graphe de représentation pour l'utilisation de Dijkstra
Ce célèbre algorithme nous permet de résoudre un problème de gestion de temps et de
distance pour en calculer le chemin le plus court entre deux sommets en d'autre termes
cela peut être applé un "pathnder".
8
LATEX
3.3
Interface graphique
3
ANALYSE
Explication du fonctionnement : Il s'agit de construire progressivement, à par-
tir des données initiales, un sous-graphe dans lequel sont classés les diérents sommets(A,B,C,D,E et F cf. Figure 2.)par ordre croissant de leur distance minimale au
sommet de départ. La distance correspond à la somme des poids des arêtes empruntées
(dans notre cas ce seront les distances entre les villes).
La première étape consiste à mettre de côté le sommet de départ et à repérer la distance du sommet de départ aux autres sommets du graphe. Cette distance est innie si
aucun arc ne relie le sommet au sommet de départ, elle est de n s'il existe un arc reliant
ce sommet au sommet de départ et que le poids le plus faible (s'il existe plusieurs arcs)
est de n.
La seconde étape consiste à repérer le sommet qui possède alors la plus courte distance au sommet de départ et à le mettre de côté. Pour tous les sommets restants, on
compare alors la distance trouvée précédemment à celle que l'on obtiendrait via le sommet que l'on vient de mettre de côté et on ne conserve que la plus petite des valeurs. et on
continue ainsi jusqu'à épuisement des sommets ou jusqu'à sélection du sommet d'arrivée.
3.3
Interface graphique
3.3.1 Description
Figure 3 Capture d'écran de la fenêtre principale : Parcours Paris - Lyon
9
LATEX
3.3
Interface graphique
3
ANALYSE
F igure 3. Exemple qui permet d'avoir la distance entre paris et lyon, avec la ville
comme dijon qui fait l'intermediaire pour le parcours.
Figure 4 Capture d'écran de la fenêtre principale : Parcours Cholet - Clermont
F igure 4. Exemple qui montre la diference de couleur du traçage de l'itinéraire suivant
les limitation de vitesse (rouge = autoroutes, bleu = national)
F igure 5. Exemple montrant le calcul de durée ainsi que les villes intermediaire pour
le parcours Beziers nice.
10
LATEX
3.3
Interface graphique
3
ANALYSE
Figure 5 Capture d'écran de la fenêtre principale : Parcours Beziers - Nice
La Fenêtre principale :
3.3.2 Les Evénements
• Lancer l'algorithme : Permet de rendre actif tous les boutons et permet de voir la
carte de France, il lance aussi tout le programme, si il n'y a pas de clique sur ce
bouton, le programme ne démarre pas.
• Réinitialiser : Permet après avoir fait un calcul de temps ou de distance de parcourt
de réinitialiser tout le programme et de pouvoir recommencer un autre parcourt.
• City_dep :
Permet de choisir la ville de départ, un choix entre une quarantaine de ville.
• City_mid :
Permet de choisir la ville intermédiaire, si l'utilisateur ne clique pas dessus, il peut
être mis automatiquement si l'utilisateur clique sur 3 villes sur la carte.
• City_arr :
Permet de choisir la ville d'arrivée, si cela ne sait pas déjà actualiser par le clique
sur une ville sur la carte de France.
• Calculate :
Ce bouton est le plus indispensable, il sert à récupérer les informations émises
par l'utilisateur, tracer le chemin le plus court entre la ville de départ et la ville
d'arrivée. Il permet aussi d'ajouter les informations sur le durée ou la distance du
trajet sur le panneau fais à cette eet.
11
LATEX
A
BIBLIOGRAPHIE
• Time ou Distance :
Ce bouton checkbox est utile pour choisir la fonctionnalité choisit pour le lancement
de l'algorithme.
4
Conclusion
Tout au long, de ce projet j'ai essayé de récréer en étant le plus réaliste possible
une simulation de gps . La tache n'est pas été des plus simple, la compréhension de
l'algorithme de Dijkstra a été l'une des plus choses à concevoir. Néanmoins, le projet a
été intéressant dans le fait de concevoir un algorithme et de le retraduire en java. Même si
quelques erreurs sont encore dans le projet et que la partie graphique n'est pas réussi au
maximum. D'autres fonctionnalités aurait pu être envisagé comme une vrai conception
de route, ou des diérences entres un parcourt en voiture, ou un parcourt en train par
exemple, tout ceci pour dire qu'il y a encore de multiples amélioration possible.
A
Bibliographie
•
•
•
•
Google
Developez.com
Siteduzero.com
Wikipedia.com
12
LATEX
Téléchargement