Académique Documents
Professionnel Documents
Culture Documents
SOMMAIRE
SOMMAIRE...............................................................................................................................................2
LISTE DES FIGURE.................................................................................................................................2
INTRODUCTION......................................................................................................................................3
I. PROBLEMATIQUE..........................................................................................................................4
II. PROSITIONS D’UNE SOLUTION..............................................................................................4
1. A quoi vas nous servir l’algorithme de Dijkstra ?........................................................................4
2. Problème du plus cout chemin.......................................................................................................4
III. PROBLEMATIQUE......................................................................................................................4
IV. PROSITIONS D’UNE SOLUTION..............................................................................................5
3. A quoi vas nous servir l’algorithme de Dijkstra ?........................................................................5
4. Problème du plus cout chemin.......................................................................................................5
V. DEMARCHE SUIVIE ARRIVE A LA SOLUTION ET IMPLEMENTATION..........................7
1. Démarche suivie..............................................................................................................................7
2. Implémentation de notre algorithme de Dijkstra.......................................................................10
3. Comment exécute notre programme prolog...............................................................................12
CONCLUSION.........................................................................................................................................14
BIBLIOGRAPHIQUE.............................................................................................................................15
ANNEXE......................................................................................................................................................16
INTRODUCTION
I. PROBLEMATIQUE
Nous souhaitons nous rendre dans un quartier « B » à partir du quartier « A » dans la ville
de Maroua et pour cella plusieurs chemin possible s’offre à nous. Nous devons choisir le chemin
avec la distance la plus petite pour pouvoir arriver rapidement à notre destination connaissant le
réseau routier de la ville.
Pour résoudre ce problème il existe plusieurs d’algorithmes et notre choix est porté sur
l’algorithme de Dijkstra.
III. PROBLEMATIQUE
Nous souhaitons nous rendre dans un quartier « B » à partir du quartier « A » dans la ville
de Maroua et pour cella plusieurs chemin possible s’offre à nous. Nous devons choisir le chemin
avec la distance la plus petite pour pouvoir arriver rapidement à notre destination connaissant le
réseau routier de la ville.
Pour résoudre ce problème il existe plusieurs d’algorithmes et notre choix est porté sur
l’algorithme de Dijkstra.
5. Principe de l’algorithme
L'algorithme prend en entrée un graphe orienté pondéré par des réels positifs et un sommet
source. Il s'agit de construire progressivement un sous-graphe dans lequel sont classés les
différents sommets par ordre croissant de leur distance minimale au sommet de départ. La
distance correspond à la somme des poids des arcs empruntés.
Au départ, on considère que les distances de chaque sommet au sommet de départ sont infinies,
sauf pour le sommet de départ pour lequel la distance est nulle. Le sous-graphe de départ est
l'ensemble vide.
7. Sinon, retour en 2.
1. Démarche suivie
Les « faits » sont déclarés au début de notre algorithme pour pouvoir construire notre
graphe. Il s’agit en effet de lister tous les arcs avec leur poids respectif sous la forme
acrBi(sommetA, sommetB, poid). Ils accèderont aux données du graphe (les arcs et leur poids)
directement en consultant la base de connaissance. Ils ne modifieront pas la base de connaissance
(pas de création de nouveaux graphes ou modifications). Ils retourneront leur résultat sous forme
de liste (chemin le plus court entre 2 points). On considère donc que la base de connaissance n'est
accessible qu'en lecture seule par nos algorithmes. Nous avons sur la figure ci-dessous quelques
faits déclarés.
a) Les règles
Les règles ici vont nous permettre de définir un arcs bidirectionnelle (arc A-B = arc B-A).
L’équivalence est déclarée sous la forme arc(sommetSrc, sommetDst, poid). Les deux lignes ci
bas signifient que lorsque on a un arcBi(A, B, P), on le prend d’abord comme arc(A, B, P) et
ensuite dans le sens inverse comme arc(B, A, P) .
a) Implémentation
Pour l'implémentation, nous représenterons chaque chemin de la manière suivante : DistanceChemin-
CheminInversé. Les chemins étant inversés, pour un chemin donné, on a directement accès au dernier
point visité, celui-ci se trouvant en tête de liste. Ce n'est qu'à la fin de l'algorithme qu'on inversera la liste
pour avoir le chemin dans le bon sens. Par ailleurs, le fait de mettre sous cette forme (la distance en
premier) permet de trier les chemins par ordre croissant grâce au prédicat keysort/2, ce qui facilite
l'implémentation.
L'étape 2, par exemple, est effectuée par le prédicat bestCandidate/2. Dans ce prédicat, pour
chaque point déjà visité, on fait la liste des arcs partant de ce point et amenant à un point qui ne
fait pas déjà partie du graphe en construction. Grâce au keysort, on détermine le chemin le plus
court depuis l'origine (étape 4). Si aucun chemin n'est trouvé, le prédicat échoue (étape 3).
Plusieurs implémentations de Prolog existent, aussi bien sous Windows que sous Linux.
Parmi elle il y a SWI-Prolog qui est un interpréteur Prolog gratuit et disponible aussi bien sous
Windows que sous Linux. Nous avons choisi de travailler sous Windows.
Installation
Exécution
Une fois l’installation du logiciel terminer, nous devons y charger notre base de connaissances.
Pour cela, aller dans fichier puis consult et cherchons notre fichier de base de connaissance qui a
l’extension « .pl ». Une fois cela fait les commandes suivantes sont utiliser pour manipuler le
programme :
?- chemincour(Souce,Destionaton,X,Y).
Ceci nous permet de poser la question à l’interpréteur Prolog : Quel est le chemin le plus cour ‘X’
et sa distance ‘Y’ quittant le quartier ‘Source’ pour le quartier ‘Destionation’.
?- noeud(X).
Ceci nous permet de poser la question à l’interpréteur Prolog : Quels sont les différents nœuds
qui existent dans notre graphe.
CONCLUSION
En définitive il était question pour nous d’écrire un programme en prolog qui doit
permettre à un utilisateur lambda désirant se rendre dans un quartier « B » à partir du
quartier « A » dans la ville de Maroua de pouvoir déterminer le chemin le plus cours pour y
arriver. Pour parvenir à nos objectifs nous nous sommes appuyés sur l’algorithme de Dijkstra qui
permet de calculer le chemin le plus cours entre deux lieux. Il en ressort que cet algorithme le
mieux placer pour la résolution des problèmes d’optimisation de distance entre deux points.
BIBLIOGRAPHIQUE
ANNEXE