Vous êtes sur la page 1sur 17

RÉPUBLIQUE DU CAMEROUN REPUBLIC OF CAMEROON

Paix – Travaux – Patrie Peace – Work – Fatherland


********** **********
MINISTÈRE DES ENSEIGNEMENTS MINISTRY OF HIGHER EDUCATION
SUPÉRIEUR **********
********** UNIVERSITY OF MAROUA
UNIVERSITÉ DE MAROUA **********
********** NATIONAL ADVANCED SCHOOL OF
ECOLE NATIONALE SUPÉRIEURE ENGINEERING OF MAROUA
POLYTECHNIQUE DE MAROUA **********
********** DEPARTMENT OF COMPUTER SCIENCES
DÉPARTEMENT D’INFORMATIQUE ET AND TELECOMMUNICATIONS
TELECOMMUNICATIONS **********
**********

TRAVAIL PERSONNEL DE L'ÉTUDIANT


GROUPE 3

UNITE D’ENSEIGNEMENT : INTRODUCTION A LA LOGIQUE


FORMELLE I
Enseigné par : Dr Kaladzavi/ Mr Awé S.
THEME: Shortest Paths Choice in Maroua city
Rédigé et présenté par :
# NOMS PRENOMS MATRICULES
1 AGUEKENG CLORINE 20C0503EP
2 AMAGNIA BEGUEGUEYE EDITH RAISSA 20C0505EP
3 DANZABE MBOBE BORIS 18A0332P
4 ELLA NDO’O II JUSTE HERMAN 20C0510EP
5 KAZE DAHSSE MANUELLA PEREZ 20C0519EP
6 KENFACK DEMANO HULIAM 20C0520EP
7 KHALA SAFI HAMIS
8 KOUAM CHEKAM LEOPOLD JUNIOR 18A0265P
7 LAMBEY BAKARGA CHARLES THIERRY 20C0523EP
8 NETISSA GLO HERMAN 20C0528EP
9 NGUEDA NGUINTO PATRICK 20C0530EP
1 PAMBOUNDAM NJOUENDOU ABDOU AWOUOLOU 20C0532EP
0
1 SIMEU KENMOUE YANN BONARCHI 20C0542EP
1

ANNEE ACADEMIQUE 2020 - 2021


Shortest Paths Choice in Maroua city

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

LISTE DES FIGURE

Figure 1:Essai de graphe de la ville de Maroua...........................................................................8


Figure 2: quelque fait déclaré........................................................................................................9
Figure 3: déclaration des règles permettant d'avoir les arcs bidirectionnels.........................10
Figure 4: implémentation de l'algorithme en prolog.................................................................11
Figure 5: schéma du logiciel SWI-prolog installer sous Windows...........................................12

Rédigé et présenté par : les membres du groupe 3Page 2


Shortest Paths Choice in Maroua city

INTRODUCTION

Prolog est un langage de programmation déclaratif permettant de résoudre des problèmes


logiques. Le nom Prolog est l'acronyme de PROgrammation LOGique. Le principe de la
programmation logique est de décrire l'énoncé d'un problème par un ensemble d'expressions et de
liens logiques au lieu de définir pas à pas la succession d'instructions que doit exécuter
l'ordinateur pour résoudre la problématique. Dans le cadre de notre cours d’introduction à la
logique il sera question pour nous de résoudre le problème du Shortest Paths Choice in Maroua
city (plus cours chemin dans la ville de Maroua) d’un point « A » à un point « B » via la
programmation logique. Pour ce faire nous allons d’abord d’écrire le problème, ensuite proposé
une solution et enfin implémenté la solution en prolog.

Rédigé et présenté par : les membres du groupe 3Page 3


Shortest Paths Choice in Maroua city

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.

II. PROSITIONS D’UNE SOLUTION

Pour résoudre ce problème il existe plusieurs d’algorithmes et notre choix est porté sur
l’algorithme de Dijkstra.

1. A quoi vas nous servir l’algorithme de Dijkstra ?


En théorie des graphes, l’algorithme de Dijkstra permet sert à résoudre le problème du plus court
chemin. Il permet, par exemple de déterminer un plus cours chemin pour se rendre d’une ville à
une autre connaissant le réseau routier d’une région. Plus précisément, il calcule les plus courts
chemins à partir d’une source vers tous les autres sommets dans un graphe orienté pondéré par
des réels positifs. On peut aussi l'utiliser pour calculer un plus court chemin entre un sommet de
départ et un sommet d'arrivée. Et donc, nous allons adapter cet algorithme dans le cadre de la
résolution du problème qui nous est poser (Shortest Paths Choice in Maroua city) en utilisant
le langage Prolog.

2. Problème du plus cout chemin

L'algorithme de Dijkstra permet de résoudre un problème algorithmique : le problème du


plus court chemin. Ce problème a plusieurs variantes. La plus simple est la suivante : étant donné
un graphe non-orienté, dont les arêtes sont munies de poids, et deux sommets de ce graphe,
trouver un chemin entre les deux sommets dans le graphe, de poids minimum. L'algorithme de
Dijkstra permet de résoudre un problème plus général : le graphe peut être orienté, et l'on peut
désigner un

III. PROBLEMATIQUE

Rédigé et présenté par : les membres du groupe 3Page 4


Shortest Paths Choice in Maroua city

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.

IV. PROSITIONS D’UNE SOLUTION

Pour résoudre ce problème il existe plusieurs d’algorithmes et notre choix est porté sur
l’algorithme de Dijkstra.

3. A quoi vas nous servir l’algorithme de Dijkstra ?


En théorie des graphes, l’algorithme de Dijkstra permet sert à résoudre le problème du plus court
chemin. Il permet, par exemple de déterminer un plus cours chemin pour se rendre d’une ville à
une autre connaissant le réseau routier d’une région. Plus précisément, il calcule les plus courts
chemins à partir d’une source vers tous les autres sommets dans un graphe orienté pondéré par
des réels positifs. On peut aussi l'utiliser pour calculer un plus court chemin entre un sommet de
départ et un sommet d'arrivée. Et donc, nous allons adapter cet algorithme dans le cadre de la
résolution du problème qui nous est poser (Shortest Paths Choice in Maroua city) en utilisant
le langage Prolog.

4. Problème du plus cout chemin


L'algorithme de Dijkstra permet de résoudre un problème algorithmique : le problème du plus
court chemin. Ce problème a plusieurs variantes. La plus simple est la suivante : étant donné un
graphe non-orienté, dont les arêtes sont munies de poids, et deux sommets de ce graphe, trouver
un chemin entre les deux sommets dans le graphe, de poids minimum. L'algorithme de Dijkstra
permet de résoudre un problème plus général : le graphe peut être orienté, et l'on peut désigner un
unique sommet, et demander d'avoir la liste des plus courts chemins pour tous les autres nœuds
du graphe.

Rédigé et présenté par : les membres du groupe 3Page 5


Shortest Paths Choice in Maroua city

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.

Au cours de chaque itération, on choisit en dehors du sous-graphe un sommet de distance


minimale et on l'ajoute au sous-graphe. Ensuite, on met à jour les distances des sommets voisins
de celui ajouté. La mise à jour s'opère comme suit : la nouvelle distance du sommet voisin est le
minimum entre la distance existante et celle obtenue en ajoutant le poids de l'arc entre sommet
voisin et sommet ajouté à la distance du sommet ajouté. On continue ainsi jusqu'à épuisement des
sommets (ou jusqu'à sélection du sommet d'arrivée).

Voici les étapes de fonctionnement de l'algorithme de Dijkstra :

1. On construit un graphe G' uniquement composé du point de départ


2. On fait la liste des arcs tels que
 Le point de départ appartienne à G'

 Le point d'arrivée appartienne à G (notre graphe de départ) mais pas à G'


3. Si la liste est vide, on s'arrête (il n'existe pas de chemin entre les points considérés)
4. A partir de cette liste, on sélectionne l'arc qui minimise la distance entre le point de départ
et le nouveau point
5. On ajoute cet arc à G', ce qui ajoute également un point au graphe. On garde une trace du
chemin ayant permis d'arriver au nouveau point
6. Si le point fraîchement ajouté correspond au point d'arrivée recherché, on s'arrête et on
retourne le chemin complet (qui est le chemin le plus court).

Rédigé et présenté par : les membres du groupe 3Page 6


Shortest Paths Choice in Maroua city

7. Sinon, retour en 2.

V. DEMARCHE SUIVIE ARRIVE A LA SOLUTION ET IMPLEMENTATION

1. Démarche suivie

a) Définition du graphe à utiliser


Nous avons si bas le graphe non orienter qui représente en quelque sorte notre ville de Maroua
(juste à titre illustratif) et où chaque sommet représente un quartier de la ville. Les poids des
arrêtes ou arcs en kilomètre (km) sont déterminer aléatoirement. Nous avons implémenté un
graphe non orienté pouvoir aller d’un point « A » (quartier A) vers un point « B » (quartier B),
mais aussi pour être en mesure de faire le chemin inverse.

Un arrêtes du graphe est caractérisé par :

 Son point de départ


 Son point d'arrivée
 Son poids

Rédigé et présenté par : les membres du groupe 3Page 7


Shortest Paths Choice in Maroua city

Figure 1:Essai de graphe de la ville de Maroua

Rédigé et présenté par : les membres du groupe 3Page 8


Shortest Paths Choice in Maroua city

a) Définitions des prédicats ou faits

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.

Figure 2: quelque fait déclaré

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) .

Rédigé et présenté par : les membres du groupe 3Page 9


Shortest Paths Choice in Maroua city

Figure 3: déclaration des règles permettant d'avoir les arcs bidirectionnels

2. Implémentation de notre algorithme de Dijkstra 

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).

Voici une implémentation de l'algorithme de Dijkstra en Prolog :

Rédigé et présenté par : les membres du groupe 3Page 10


Shortest Paths Choice in Maroua city

Figure 4: implémentation de l'algorithme en prolog

Rédigé et présenté par : les membres du groupe 3Page 11


Shortest Paths Choice in Maroua city

3. Comment exécute notre programme prolog.

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 et exécution du programme sous Windows.

 Installation

sous Windows, la dernière version stable de SWI-Prolog se télécharge sur le site swi-


prolog.org et l’installation du logiciel se fait en exécutant le fichier « .exe » obtenu.

Figure 5: schéma du logiciel SWI-prolog installer sous Windows

 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).

Rédigé et présenté par : les membres du groupe 3Page 12


Shortest Paths Choice in Maroua city

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.

Rédigé et présenté par : les membres du groupe 3Page 13


Shortest Paths Choice in Maroua city

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.

Rédigé et présenté par : les membres du groupe 3Page 14


Shortest Paths Choice in Maroua city

BIBLIOGRAPHIQUE

 Cours d’introduction à la logique formelle I de Dr Kaladzavi/Awé S.


 Cours d’algorithme et structures des données de M.Douwé Vincent.
 Programmer en Prolog http://www.gecif.net/articles/linux/prolog.html
 Algorithme sur les graphes en prolog https://pcaboche.developpez.com/article/prolog/algo-
graphes/?page=page_1
 https://fr.wikipedia.org/wiki/Algorithme_de_Dijkstra

Rédigé et présenté par : les membres du groupe 3Page 15


Shortest Paths Choice in Maroua city

ANNEXE

Les prédicats prédéfinis de SWI-Prolog pour la manipulation des listes.

Rédigé et présenté par : les membres du groupe 3Page 16


sssss

Vous aimerez peut-être aussi