LE PROBLEME DU PLUS COURT CHEMIN
Dans cette leçon nous définissons le modèle de plus court chemin, présentons des exemples
d'application et proposons un algorithme de résolution dans le cas où les longueurs des arcs sont
toutes positives.
I Exemples d'introduction
Exemple 1
La recherche d'un plus "court" chemin d'un point à un autre est un problème de la vie quotidienne. Il
a d’ailleurs donné lieu aux développements de sites Internet qui se proposent de déterminer pour
vous le meilleur itinéraire que ce soit en distance, en temps ou en coût. Il suffit de taper "recherche
d’itinéraire" sur un navigateur pour s’en convaincre !
On imagine aisément que ce type de problème est modélisable par un graphe et par la recherche sur
ce graphe du "meilleur chemin".
Exemple 2
Un problème de remplacement de matériel.
Vous devez décider de la politique de remplacement dans un parc automobile pour les années à venir.
Sachant que le coût d'entretien annuel d'un véhicule croît avec l'âge alors que son prix de revente
diminue, vous vous demandez quand il est opportun de remplacer un véhicule par un neuf.
Initialement vous disposez d'un véhicule neuf et il vous faut déterminer à quelle période il faudra le
remplacer par un véhicule neuf.
On suppose être dans un environnement déterministe, c'est à dire que l'avenir est connu avec
certitude, au moins en ce qui concerne l'évolution des coûts.
Ce deuxième problème donne lieu au même type de modélisation que celui de la recherche d’un
itinéraire optimal, ce qui n’est pas évident a priori. Il est possible de le représenter par un problème
de plus court chemin dans un graphe.
II Définition du problème de plus court chemin dans un graphe
Définition d'un graphe valué
Un graphe valué est un graphe aux arcs desquels on associe un nombre réel appelé longueur de
l'arc.
On notera l(x,y) la longueur de l'arc (x,y).
Définition de la longueur d'un chemin
Etant donné un chemin d'un sommet x à un sommet y, on appelle longueur du chemin, la somme
des longueurs des arcs qui le constituent.
Remarques
Le nombre réel associé à chaque arc peut représenter bien autre chose qu'une longueur au sens
géométrique du terme. Par exemple, un temps, un coût, ... c'est pourquoi il peut être négatif.
Dans certains ouvrages, on utilise le mot "poids" plutôt que "longueur".
Le problème du plus court chemin 1
Définition du problème de plus court chemin
On peut s'intéresser à la recherche d'un plus court chemin dans un graphe :
1 - entre deux sommets donnés
2 - d'un sommet à tous les autres
3 - entre tous les couples de sommets
Le problème 2 n'est pas plus difficile à résoudre que le problème 1 et le problème 3 peut être résolu
par application du problème 2 à tous les sommets.
On s'intéresse donc au problème 2.
Le problème du plus court chemin
Etant donné un graphe valué et s un sommet racine de ce graphe, trouver les plus courts chemins de
ce sommet à tous les sommets du graphe.
Remarques
1 - Si le sommet de départ n’est pas racine du graphe, il existe des sommets qui ne seront pas
accessibles, le problème du plus court chemin ne se pose alors que pour les sommets descendants de
s. Dans le graphe 1 ci-dessous, le sommet "c" n'est pas descendant du sommet s.
2 - Le graphe 2 présente une particularité qui va interdire de trouver une solution au problème du
plus court chemin de s aux autres sommets du graphe.
Il existe dans ce graphe un circuit de longueur négative : le circuit a, b, c, a a pour longueur -1. On
peut construire le chemin s, a, b, c, a, b, c, a, b... dont la longueur n'est pas bornée inférieurement.
On peut donc faire diminuer autant que l’on veut la longueur des chemins de s à a en empruntant une
infinité de fois le circuit.
Un tel circuit est appelé "circuit absorbant".
III Modélisation du problème de remplacement de véhicule
Le premier exemple de détermination d'un parcours optimal se modélise de manière immédiate par un
problème de plus court chemin dans un graphe.
Le deuxième exemple de remplacement de matériel est un peu plus délicat et nécessite une analyse
préalable des décisions.
Nous allons voir deux modélisations de ce problème qui diffèrent selon la manière de représenter les
décisions.
Analyse des décisions à prendre
Première modélisation
A la fin de chaque année, on examine ce qu'on fait du véhicule : on le garde ou on en change.
Deuxième modélisation
Chaque fois qu'on change de véhicule on décide a priori du nombre de périodes pendant lequel on le
conservera.
Le problème du plus court chemin 2
Dans l'un et l'autre des cas, on connaît les conséquences en terme de coût (achat, entretien, revente).
Il s'agit de représenter la succession des décisions que l'on peut prendre.
Première modélisation
A la fin de la première année, la décision à prendre est de vendre ou de garder.
Il en est de même à la fin de chaque année.
Les différentes étapes sont représentées par un sommet.
Initialement on est au sommet 0 avec un véhicule neuf que l'on achète. Les conséquences financières
sur l'année 1 dépendent du choix fait à la fin de l'année : si on vend le véhicule à la fin de l'année on
se trouve dans la situation représentée par le sommet 1.1, si on le garde on est dans un autre état
représenté par le sommet 1.2. Les 2 arcs (0, 1.1) et (0, 1.2) correspondent à ces deux décisions.
Pour l'année 2, quelque soit l'état en début d'année (1.1 ou 1.2) on aura 2 choix possibles à la fin de
l'année : vendre ou garder.
Pour simplifier, on suppose qu'à la fin de l'année 4 on vend le véhicule, il n'y a donc qu'un seul arc
issu d'un sommet numéroté 3.i. Quelle que soit la situation dans laquelle on se trouve à la fin de
l'année 3, on vend à la fin de l'année 4.
Le graphe obtenu est une arborescence.
Un chemin du sommet 0 à un des sommets du niveau 4 représente une suite de décisions possibles.
Par exemple, le chemin qui passe par les sommets 0, 1.1, 2.2, 3.3 puis 4.4 correspond à un premier
véhicule vendu à la fin de la première année, remplacé par un véhicule que l'on garde à la fin de la
deuxième année pour le revendre à la fin de la troisième année pour le remplacer et le revendre à la
fin de la 4ème année.
A chaque arc de ce graphe on associe un nombre réel correspondant aux conséquences financières de
la décision pour l'année : on suppose pour simplifier que le prix d'acquisition PA ne varie pas et on
connaît le coût d'entretien annuel CEi ainsi que la valeur de revente RVi d'un véhicule en fonction de
son âge.
Par exemple, pour l'arc(0, 1.1) le coût total annuel est de PA + CE1 - RV1 : prix d'achat plus coût
d'entretien la première année moins valeur de revente au bout d'un an.
Pour (0, 1.2) ce coût est : PA + CE1 puisqu'on ne revend pas.
Pour (1.2, 2.3) on a un coût de CE2 - RV2 puisqu'on utilise un véhicule pendant sa deuxième année et
qu'on le revend à la fin.
On value ainsi tous les arcs. On notera la présence d'arcs qui peuvent être valués par un nombre
négatif ; par exemple il est probable que CE2 - RV2 soit négatif.
La recherche de la meilleure stratégie est modélisée par la recherche du plus court chemin dans ce
graphe du sommet racine aux sommets de niveau 4.
Le problème du plus court chemin 3
Cette représentation revient en fait à énumérer toutes les possibilités, ce qui n'est pas très efficace !
Deuxième modélisation
Dans ce modèle, les décisions correspondent à la durée pendant laquelle on va garder un véhicule
neuf.
Ceci est pertinent dans la mesure où lorsqu'on achète un nouveau véhicule peu importe l'âge de celui
que l'on vient de vendre. Dans le graphe précédent, qu'on soit au sommet 2.1 ou au sommet 2.2 on
aborde l'année 3 avec obligation d'acheter un véhicule après avoir vendu un véhicule d'un an d'âge
dans le premier cas et de deux ans d'âge dans le second. Mais les décisions à prendre ultérieurement
sont identiques.
Dans cette deuxième modélisation, on représente la suite des décisions par un graphe dont les
sommets correspondent aux échéances i= 0, 1,..., 4.
Un arc du sommet i au sommet j indique l'acquisition d'un véhicule neuf à la date i et à sa revente à
la date j.
Un chemin du sommet 0 au sommet 4 représente une suite de décisions.
Par exemple, le chemin correspondant à l’arc (0,1) suivi de l’arc (1,4) correspond à l'acquisition d'un
véhicule pour 1 an suivi d'un deuxième véhicule gardé 3 ans.
Comme dans le modèle précédent, on associe à chaque arc l'évaluation des coûts consécutifs à la
décision représentée : achat plus coût d'entretien pendant les années où le véhicule est conservé
moins valeur de revente.
A l'arc (0, 1) on associe une longueur égale au prix d'acquisition additionné de l’entretien pendant 1
ans diminué de la valeur de revente au bout de 1 ans.
A l'arc (0, 4) qui correspond à l'acquisition d'un véhicule pour 4 ans, on associe le prix d'acquisition
plus les coûts d'entretien pendant 4 ans diminué de la valeur de revente au bout de 4 ans
La recherche de la meilleure stratégie est modélisée par la recherche du plus court chemin dans ce
graphe du sommet 0 au sommet 4.
Le problème du plus court chemin 4
IV Résolution d'un problème de plus court chemin
A - Introduction
Les problèmes présentés en introduction sont maintenant modélisés par un problème de plus court
chemin dans un graphe.
Dans la démarche de l'aide à la décision telle qu'elle a été décrite dans la leçon d'introduction, il s'agit
maintenant de choisir une méthode de résolution.
Ce qui nécessite d'en connaître au moins une !
Considérons le graphe suivant :
On souhaite déterminer le plus court chemin du sommet A au sommet D.
On peut évidemment essayer d'énumérer tous les chemins d'une manière si possible systématique :
A B F D, A G C D, A G C E D, A G C F D, A G F D, A G B F D, A H B F D
puis calculer leurs longueurs.
Ici la taille du graphe le permet mais ceci risque de devenir rapidement impossible.
Pour résoudre ce problème, on fait appel à des algorithmes.
Ces algorithmes de recherche de plus court chemin exploitent les propriétés du graphe.
Dans cette leçon nous examinons le cas particulier où les valuations de tous les arcs sont positives. Ce
n'est pas le cas du graphe ci-dessus que nous retrouverons dans la leçon suivante.
B - Résolution dans le cas où toutes les longueurs seraient positives
L'algorithme présenté est le très célèbre algorithme de Moore-Dijkstra.
Algorithme de MOORE-DIJKSTRA : énoncé
Les données
- un graphe dont les arcs sont valués par des nombres positifs,
- un sommet s racine du graphe à partir duquel on veut déterminer les plus courts chemins aux autres
sommets,
- pour chaque sommet x de X, l’ensemble succ(x) de ses successeurs.
Le problème du plus court chemin 5
Initialisation
POUR tous les sommets x dans S Poser ! (x) = + ∞
Poser ! (s) = 0 E = Ø S = X
Corps de l’algorithme
TANTQUE il existe x dans S
FAIRE
Choisir dans S le sommet x avec ! (x) minimum
Mettre x dans E et l’enlever de S
POUR y ∈ succ(x) ! S {on examine tous les successeurs de x qui sont dans S}
SI ! (y) > ! (x) + l(x,y) ALORS poser ! (y) = ! (x) + l(x,y) et père (y) = x
FINPOUR
FINFAIRE
FIN
Les résultats
Pour chaque sommet, ! (x) est égal à longueur d'un plus court chemin de s à x.
Père(y) = x indique que le sommet x est le prédécesseur de y sur le plus court chemin de s à y.
Analyse de l'algorithme
L'algorithme comporte une phase d'initialisation.
A chaque sommet on attribue une étiquette, encore appelée marque, notée ! (x) (lambda de x).
Cette étiquette vaut 0 pour le point de départ et infini pour les autres sommets.
Le corps de l'algorithme consiste à examiner les sommets les uns après les autres, dans un ordre
donné.
On choisit le sommet ayant la plus petite étiquette et on le sort de l'ensemble S des sommets à
examiner pour le mettre dans l'ensemble E des sommets examinés.
Une fois un sommet x choisi, on examine tous ses successeurs qui sont dans S : pour chacun d'eux on
compare leur étiquette à celle du sommet x augmentée de la longueur de l'arc reliant x à ce
successeur.
Selon le résultat de cette comparaison, on change ou non l'étiquette de y.
Si l'étiquette est changée, on enregistre qu'elle a été obtenue à partir de x.
On recommence tant qu'il reste des sommets à examiner.
Dès qu'un sommet est choisi et mis dans l'ensemble E, sa marque n'est plus modifiée ; elle est égale à
la longueur d'un plus court chemin du sommet de départ à ce sommet.
On dispose aussi des informations pour déterminer le plus court chemin de s à ce sommet.
Exemple
Avant de démontrer la validité de cet algorithme mettons-le en oeuvre sur le graphe suivant :
Le problème du plus court chemin 6
La suite des calculs est résumée dans le tableau suivant :
S choix de s a b c d e
x dans S
Initialisation 0 +∞ +∞ +∞ +∞ +∞
Itération 1 sabde s -- 5 (s) -- 1 (s) -- --
Itération 2 cabde c -- 3(c) 3(c) -- 6(c) --
Itération 3 abde a -- -- -- -- 5 (a) --
Itération 4 bde b -- -- -- -- 4(b) 7(b)
Itération 5 de d -- -- -- -- -- 6(d)
Itération 6 e e -- -- -- -- -- --
Entre parenthèses, on a noté le nom du père (sommet qui a permis de lui attribuer sa marque).
Par exemple, à l'itération 3, les sommets s et c sont définitivement étiquetés. On choisit parmi les
sommets restant dans S un de marque minimale, a et b ont tous deux comme marque 3, on retient
par exemple a.
On examine alors ses 2 successeurs b et d. La marque de b n'a pas besoin d'être changée : on a ! (b)
= 3 < ! (a) + l(a,b) = 3 + 1
En revanche, on a ! (d) = 6 > ! (a) + l(a,d) = 3 + 2, on pose donc ! (d) = 5 et on retient que le
sommet d a été marqué à partir de a.
Détermination des plus courts chemins
Les étiquettes fournissent la longueur des plus courts chemins de s aux différents sommets. Pour
déterminer les plus courts chemins eux-même, on remonte de "père" en père" : par exemple le
sommet e a pour père d, qui a pour père b, qui a pour père c, qui a pour père s.
On en déduit que le plus court chemin de s à e est le chemin s c b d e de longueur 6.
Les plus courts chemins sont représentés en gras sur le graphe ci-dessous.
Le problème du plus court chemin 7
Remarques
1 - Considérons le graphe suivant dans lequel l'arc (b,e) a maintenant pour longueur 3.
Dans ce cas de figure, le sommet e possède deux pères, puisqu’on a simultanément :
! (e) = ! (b) + l(b,e) = 6 et ! (e) = ! (d) + l(d,e) = 6
On a plusieurs plus courts chemins de s à e : s c b e et s c b d e.
2 - Efficacité de l'algorithme de Moore Dijkstra
Nous avons déjà souligné l'importance d'avoir une idée du temps de calcul que prendront les
algorithmes sur les "gros" problèmes que sont généralement les problèmes réels.
L'algorithme de Moore Dijkstra est dans la catégorie des "bons" algorithmes. Lorsque la taille du
problème augmente, le temps de calcul croit comme n2, carré du nombre de sommets du graphe.
Démonstration de la validité de l'algorithme de Moore-Dijkstra
Cette démonstration est une démonstration par récurrence.
Rappel du principe de la récurrence
On doit démontrer qu'une propriété P(n), qui dépend d'un entier n, est vraie quel que soit n (n≥0).
On démontre qu'elle est vraie pour n= 0 (P(0) est vraie)
On fait l'hypothèse qu'elle est vraie au rang p, P(p) est vraie, et on démontre qu'elle est alors vraie au
rang p+1.
On peut en déduire qu'elle est vraie pour tout n.
La démonstration de la validité de l'algorithme de Moore-Dijkstra s'appuie sur les 2 résultats suivants :
Propriété 1
Soit (y,x) un arc tel que y∈E et x∈S alors ! (x) ≤ ! (y) + l(y,x)
Démonstration
Lorsqu’il a été examiné et mis dans E, x étant un de ses successeurs, on a comparé ! (y) + l(y,x) à
! (x) et le cas échéant changé l'étiquette de x de telle sorte que l'on ait : ! (x) ≤ ! (y) + l(y,x).
Depuis, la marque de x n'a pu que diminuer.
Propriété 2
Au début de chaque itération, pour tout sommet x de marque finie, il existe un chemin de s à x de
longueur ! (x).
Le problème du plus court chemin 8
Démonstration
Ce résultat est immédiat compte tenu de la manière dont les marques sont attribuées.
Démonstration de la validité de l'algorithme de Moore-Dijkstra
Hypothèse de récurrence :
A l'issue de la pième itération, l'étiquette de tous les sommets de l'ensemble E est égale à la longueur
du plus court chemin de s à ce sommet.
On veut démontrer qu'il en sera de même pour le sommet sélectionné et mis dans E à la p+1 ème
itération.
Lors de la première itération, seul le sommet s est dans E : on a ! (s) = 0 qui représente bien la
longueur d'un plus court chemin de s à lui même ; au pire il peut exister un circuit de longueur nulle
de s à s puisque les longueurs des arcs sont positives.
Supposons donc qu'à l'issue de la pième itération, l'étiquette de chaque sommet de E soit égale à la
longueur du plus court chemin de s à ce sommet.
Soit x le sommet de S sélectionné à l'itération suivante.
Considérons un chemin quelconque C sx de s à x.
Ce chemin est constitué d'un chemin C sh de s
à h dans E, puis d'un arc (h,k) avec h∈E et k∈
S et d'un chemin de Ckx de k à x .
La longueur de ce chemin est égale à : L(Csx) = L(C sh) + l(h,k) + L(C kx)
D'après l'hypothèse de récurrence : L(C sh) ≥ ! (h)
Les longueurs des arcs étant positives on a L(C kx) ≥ 0 donc L(Csx) ≥ ! (h) + l(h,k)
et d'après la propriété 1 L(C sx) ≥ ! (h) + l(h,k) ≥ ! ( k)
D'après le choix de x dans S ( sommet de marque minimum) on a ! (k) ≥ ! (x)
et donc L(Csx) ≥ ! (x)
On en déduit que la longueur de n'importe quel chemin de s à x est au moins égale à ! (x).
En outre, d'après la propriété 2, il existe un chemin de s à x de longueur ! (x).
! (x)est donc égal à la longueur d'un plus court chemin de s à x.
Le problème du plus court chemin 9