Title: Le problme du plus court chemin
1Le problème du plus court chemin
Énoncé du problème et construction dun modèle
Partitionnement des sommets par niveaux dun
graphe fortement connexe sans circuit
Théorème doptimalité de Bellman-Pontryagin
Algorithme de type Futur-Passé
Algorithme de type Passé-Futur (version graphique)
Approche vorace Algorithme de DIJKSTRA
Recherche du pcc entre chaque paire de sommets
Algorithme de FLOYD WARSHALL
2Énoncé du problème
Considérons n villes V1, V2, , Vn reliées entre
elles par un réseau routier.
Bob séjournant en V1 désire se rendre à la ville
Vn. En examinant le réseau routier reliant ces 2
villes et, parmi toutes les possibilités
qui soffrent à lui, il retient quelques villes
intermédiaires V2, V3, , Vn-1 par lesquelles il
pourrait passer.
Bob a un budget limité et désire se rendre de V1
à Vn par le plus court chemin sans nécessairement
passer par toutes les villes intermédiaires.
Par quelles villes, Bob doit-il passer pour
minimiser la distance totale parcourue ?
3Construction dun modèle
Le réseau de transport de Bob peut se traduire
facilement sous la forme dun graphe
Vn-2
V2
V4
Vn
V1
V3
Vn-1
où les sommets représentent les villes et où les
arcs représentent les routes possibles pour aller
dune ville à lautre.
Note
En labsence darcs entre 2 villes, cela signifie
quil ny a pas de route directe entre celles-ci.
4Matrice associée au graphe
Nous définissons un graphe orienté G (S, U) où
S s1, s2, , sn, lensemble des sommets du
graphe,
U (x, y) ? S x S il existe une route directe
allant de x à y, lensemble des arcs du graphe.
Une matrice A (aij), i 1, 2, , n associée
au graphe G j 1, 2, , n est définie comme
suit 1 si (si, sj) ? U aij 0
autrement.
5Exemple
2
3
1
4
6
5
1 2 3 4 5 6
- 0 1 1 0 0 0
- 0 0 1 1 0 0
- 0 0 0 1 1 0
- 1 0 0 0 1 0
- 1 1 0 0 0 1
- 0 0 0 0 0 0
Matrice associée à G
6Matrice des distances
Soit D (dij) la matrice des distances entre
chacune des villes où
dij représente la distance de la route reliant
directement la ville Vi à la ville Vj.
On suppose par convention que
dij ? si i ? j et (si, sj) ? U 0 si i j.
Note
Cette matrice des distances peut représenter une
mesure de temps, de coût, de probabilité ou autre
chose.
7Exemple dun graphe arc-valué
3
B
C
4
9
4
2
8
6
A
E
D
3
7
7
6
13
G
F
2
H
8Exemple dun graphe arc-valué
Soit le réseau routier suivant et le graphe
correspondant,
9Formulation du problème
En ajoutant un arc fictif (sn, s1), on obtient
? dij zij
Min
i 1, 2, , n j 1, 2, , n tel que (si, sj) ? U
0 ?i.
? zij
? zki
-
sujet à
j 1, 2, , n tel que (si, sj) ? U
k 1, 2, , n tel que (sk, si) ? U
zn1 1
zij ? 0
i 1, 2, , n j 1, 2, , n tel que (si, sj) ?
U.
Cela équivaut à envoyer une unité de flot de 1 à
n au moindre coût. Cest donc un cas particulier
du problème de flot à coût minimal.
10Remarque
Nous sommes amenés à résoudre 3 types de
problèmes impliquant des plus courts chemins
- un pcc entre un sommet i et un sommet j
- un pcc entre un sommet i et tous les autres
sommets du graphe - un pcc entre chaque paire de sommets dans un
graphe.
Les méthodes proposées pour résoudre le premier
problème sont appropriées pour les 2 autres
problèmes également.
On peut utiliser la méthode du simplexe en
programmation linéaire pour résoudre ce problème
mais il existe des méthodes beaucoup plus
efficaces.
11Rappel de quelques définitions sur la structure
de graphe
Chemin
Une suite darcs u1, u2, , uk telle que
lextrémité terminale de chaque arc coïncide avec
lextrémité initiale de larc suivant dans la
suite.
Chemin de longueur k
Un chemin comprenant k arcs.
Exemple Chemin de longueur 5 du graphe
G (1,2) (2, 3) (3, 5) (5, 2) (2, 4).
Circuit
Un chemin de longueur finie dont le sommet
origine est identique au sommet extrémité du
chemin.
Exemple Circuit de longueur 4 du graphe G
(2, 3) (3, 5) (5, 1) (1, 2).
12Si un graphe orienté contient un circuit dont la
longueur est lt 0 (un cycle négatif), il se peut
que le plus court chemin nexiste pas.
-5
1
1
6
1
5
4
2
-1
3
2
3
On exclut demblée ce type de graphe de la
discussion subséquente.
13Graphe non orienté
U désigne plutôt un ensemble darêtes i.e. un
ensemble de paires non ordonnées de sommets de S.
Exemple (3, 2) (3, 5) (1,5) (2, 1) sont
des arêtes du graphe.
Chaîne dun graphe non orienté
Une suite darêtes distinctes u1, u2, , uk avec
la propriété quil existe k 1 sommets x1, x2,
, xk1 tels que ui ? (xi, xi1), ? 1 ? i ? k.
Exemple (3, 2) (3, 5) (1,5) (2, 1) est
une chaîne.
Cycle
Une chaîne où x1 xk1.
Graphe connexe
Graphe non orienté dans lequel il est toujours
possible de relier entre eux 2 sommets
quelconques par une chaîne.
14Résolution du plus court chemin sur un graphe non
orienté
Cela se ramène au même problème que celui posé
sur un graphe orienté, à condition que les dij ?
0 pour tout (i,j).
Il sagit de remplacer chaque arête (i, j) dans
le graphe par 2 arcs (i, j) et (j, i) portant
tout deux la même mesure dij dji.
Si lun des dij était lt 0, ceci créerait des
cycles négatifs.
Graphe fortement connexe
Graphe orienté où il existe tjrs un chemin allant
de x à y ? x, y ? S.
Nous allons nous intéresser dans ce qui suit aux
graphes fortement connexes sans circuit.
15Relation dordre strict R
Soit un graphe orienté G fortement connexe et
sans circuit, soit x, y ? S et x ? y, considérons
la relation suivante (R) x ? y ? il existe un
chemin de longueur non nulle de x vers y.
Note
R est dite aussi relation dantériorité si x ?
y , on dira que x est un ancêtre de y et
que y est un descendant de x. R est transitive
x ? y et y ? z ? x ? z. R est antisymétrique x
? y ? non (y ? x).
16Partitionnement des sommets par niveaux dun
graphe fortement connexe sans circuit
Tous les éléments dun même niveau nont pas
dancêtres dans le niveau qui suit, ni de
descendants dans le niveau qui précède.
Les éléments du premier niveau nont pas
dancêtres et ceux du dernier niveau nont pas de
descendants.
Lordre des sommets dun même niveau est
indifférent i.e. les sommets dun même niveau ne
sont pas reliés entre eux par des arcs.
Une décomposition par niveaux existe toujours
mais elle nest pas nécessairement unique.
17Illustration de la méthode de partitionnement des
sommets par niveaux dun graphe fortement connexe
sans circuit
Exemple
1
8
5
4
2
7
6
3
Ai ? la iième ligne de la matrice associée au
graphe.
18V0 A5
V1 A2
V2 A6
V3 A1 A3
V4 A7
V5 A4
19Procédé
Déterminons dabord les sommets qui nont pas
dancêtres
V0 A1 A2 A8.
On constate que le sommet 5 nadmet aucun arc du
type (- , 5). Le sommet 5 forme donc le niveau I.
Pour déterminez le niveau II, il faut chercher
tous les sommets dont le seul ancêtre est 5
V1 V0 A5.
Le sommet 2 na pas dautres ancêtres que le
sommet 5. Le sommet 2 forme donc le niveau II.
Comme on peut le constater, pour obtenir les
sommets dun niveau, il suffit denlever au
vecteur précédent les lignes associées
aux sommets du niveau précédent.
20Le graphe peut alors se mettre sous la forme
Note
Le sommet 1 peut être indifféremment placé dans
lun quelconque des niveaux IV, V ou VI.
En supposant les sommets 1 et 3 au niveau IV, on
peut choisir comme ordonnancement 5 2 6 1
3 7 4 8 ou encore 5 2 6 3 1
7 4 8.
21Note
Le PCC de V1 à V8 se résume au graphe
Solution triviale.
8
1
Le PCC de V2 à V8 se résume au graphe suivant (il
faut négliger V5 et les arcs qui en sont issus)
1
8
7
4
2
6
3
22Théorème doptimalité de Bellman-Pontryagin
Il sénonce sous lune des 2 formes suivantes
Passé - Futur
Tout chemin reliant la ville V1 à la ville Vn est
optimal si tout chemin partiel de V1 à Vk issu de
ce chemin est lui-même optimal de V1 à Vk et ce
pour tous les indices k de ce chemin.
Futur - Passé
Tout chemin reliant la ville V1 à la ville Vn est
optimal si tout chemin partiel de Vk à Vn issu de
ce chemin est lui-même optimal de Vk à Vn et ce
pour tous les indices k de ce chemin.
23Reprenons lexemple présenté antérieurement
3
B
C
4
9
4
2
8
6
A
E
D
3
7
7
6
13
G
F
2
H
En énumérant tous les chemins possibles de A à H,
on en déduit que la distance minimale est 17 et
que le PCC est AEFH.
Note
On peut vérifier que le théorème est satisfait
pour E et F.
24Présentation dun algorithme de type Futur-Passé
Renumérotons les villes selon un ordonnancement
obtenu à laide de lapproche précédente.
A B G E C D F H . . . . . . . . . . . . . . . . .
. . . . . . . 1 2 3 4 5 6 7 8
3
4
5
4
2
2
7
4
3
9
7
6
3
6
13
8
1
6
7
2
8
25Il sagit dénumérer les chemins de longueur au
plus k 1, puis au plus k 2, et ainsi de
suite, dont lextrémité terminale est la ville n.
Posons vk(i) ? longueur du PCC de i à n ayant au
plus k arcs, ? i 1, 2, , n.
Remarque
vk(n) 0, ? k 1, 2, , n.
Posons pk(i) ? indicateur servant à retracer le
PCC de i à n ayant au plus k arcs, ? i 1, 2,
, n.
v1(i) din, ? i 1, 2, , n - 1.
k 1
p1(i) i, ? i 1, 2, , n.
k gt 1
vk(i) MIN (dij vk-1(j) ) ? i 1, 2, , n -
1. 1?j?n
pk(i) la valeur j pour laquelle MIN est atteint.
26À quel moment sarrête-t-on ?
Étant donné quil est toujours possible
dordonnancer un graphe connexe et sans circuit
et de classer ses sommets par niveaux, sil y a N
niveaux, le sommet 1 appartient au premier
niveau, le sommet n au dernier niveau, les
chemins reliant le sommet 1 au sommet n sont au
plus de longueur N 1.
En pratique, on arrête à litération k où vk(i)
vk-1(i) ? i.
Comment retracer le chemin optimal de i à n ?
(i, pk-1(i), pk-2(pk-1(i)), , p1(p2(p3(
pk-1(i))), n)
en éliminant les valeurs identiques.
27Considérons lexemple précédent
i 1 2 3 4 5 6 7 8 v1(i) ? ? ? ?
? 6 2 0 p1(i) 1 2 3 4 5 6 7 8 v2(i) ? ? 15 9
8 6 2 0 p2(i) 1 2 7 7 7 6 7 8 v3(i) 17 11 15
9 8 6 2 0 p3(i) 4 5 7 7 7 6 7 8 v4(i) 17 11
15 9 8 6 2 0 p4(i) 4 5 7 7 7 6 7 8
Lalgorithme sarrête car v4(i) v3(i) ? i.
Exemple
Chemin optimal du sommet 1 au sommet 8 (1 4
7 8) avec une longueur 17.
28Énoncé de lalgorithme de Bellman Kalaba (Type
Futur Passé)
(0) Renuméroter les sommets suivant
lordonnancement précédent. Réécrire la matrice
des distances.
(1) Poser v1(i) din, ? i 1, 2, , n, p1(i)
i, ? i 1, 2, , n. Poser k 2.
vk(i) MIN (dij vk-1(j) ) ? i 1, 2, , n -
1. 1?j?n
(2)
Faire
pk(i) la valeur j pour laquelle MIN est atteint.
Poser
vk(n) 0, pk(n) n.
(3) Si vk(i) vk-1(i) ? i alors aller à
(4) sinon faire k k 1 aller à (2).
(4) vk-1(1) représente la valeur optimale du
problème posé.
29Il reste à retracer le chemin optimal.
(5) Poser t k 1 et x(t) 1.
(6) Faire x(t 1) pt(x(t)).
(7) Si t gt 1 alors faire t t 1, aller à
(6) sinon le chemin optimal est le suivant
(1, x(k-2), x(k-3), , x(2), x(1),
n) où on élimine tous les sommets qui se
répètent sauf un. Il reste à renuméroter
les indices comme ils étaient initialement.
FIN
30Remarque
Il nest pas nécessaire dordonnancer les sommets
du graphe avant dappliquer lalgorithme, mais
cela est préférable, car il nous permet davoir
des ? sous la diagonale de la matrice des
distances.
Cela permet de simplifier lalgorithme précédent !
- 1 2 3 4 5 6 7 8
- 0 9 3 8 ? ? ? ?
- ? 0 ? 4 3 ? ? ?
- ? ? 0 7 ? ? 13 ?
- ? ? ? 0 2 ? 7 ?
- ? ? ? ? 0 4 6 ?
- ? ? ? ? ? 0 ? 6
- ? ? ? ? ? ? 0 2
- ? ? ? ? ? ? ? 0
31Énoncé de lalgorithme de type Passé Futur
(0) Renuméroter les sommets suivant
lordonnancement précédent. Réécrire la matrice
des distances.
(1) Poser u1(j) d1j, ? j 1, 2, , n, p1(j)
j, ? j 1, 2, , n. Poser k 2.
(2)
Soit uk(j) ? longueur du PCC de 1 à j ayant au
plus k arcs, ? j 1, 2, , n.
uk(j) MIN (dij uk-1(i) ) ? j 2, 3, ,
n. 1?i?n
faire
pk(j) la valeur i pour laquelle MIN est atteint.
Poser
uk(1) 0, pk(1) 1.
(3) Si uk(j) uk-1(j) ? j alors aller à
(4) sinon faire k k 1, aller à (2).
32(4) uk-1(n) représente la valeur optimale du
problème posé.
Il reste à retracer le chemin optimal.
(5) Poser t k 1 et x(t) n.
(6) Faire x(t 1) pt(x(t)).
(7) Si t gt 1 alors faire t t 1, aller à
(6) sinon le chemin optimal est le suivant
(1, x(1), x(2), , x(k - 2), n) où on
élimine tous les sommets qui se répètent sauf
un. Il reste à renuméroter les indices comme
ils étaient initialement.
FIN
33Critère darrêt de cet algorithme
u1(j) ? u2(j) ? u3(j) ? u4(j) ? uk(j) ?
longueur du pcc entre 1 et j ?j.
Si le graphe contient au moins un chemin entre 1
et j et il ny a pas de cycles négatifs, alors un
pcc contiendrait au plus n-1 arcs ce qui implique
que un-1(j) ? longueur du pcc entre 1 et j ?j.
En fait, lalgorithme arrête lorsque uk(j)
uk-1(j) ? j.
34Considérons lexemple précédent
i 1 2 3 4 5 6 7 8 u1(j) 0 9 3 8 ? ? ?
? p1(j) 1 2 3 4 5 6 7 8 u2(j) 0 9 3 8 10 ?
15 ? p2(j) 1 2 3 4 4 6 4 8 u3(j) 0 9 3 8
10 14 15 17 p3(j) 1 2 3 4 4 5 4 7 u4(j) 0
9 3 8 10 14 15 17 p4(j) 1 2 3 4 4 5 4 7
Lalgorithme sarrête car u4(j) u3(j) ? j.
Exemple
Chemin optimal du sommet 1 au sommet 8 (1 4
7 8) avec une longueur 17.
35Version graphique de lalgorithme de type
Passé Futur
Il est possible dappliquer directement ces
algorithmes sur le graphe lui-même au moyen dun
marquage des sommets.
À chaque sommet j est associé une double case
Indicateur servant à retracer le PCC de 1 à j.
Valeur minimale des chemins allant du sommet 1 à
ce sommet j.
Reprenons le même exemple.
36Pour déterminer les valeurs minimales associées
aux sommets, il est préférable de procéder à
leurs évaluations selon un ordonnancement connu
1 2 3 4 5 6 7 8.
k 1
3
8
4
5
?
9
2
4
5
4
2
2
7
4
3
9
7
6
3
3
3
0
1
?
6
6
13
8
1
6
7
?
7
2
8
?
8
37k 2
3
8
4
4
10
9
2
4
5
4
2
2
7
4
3
9
7
6
3
3
3
0
1
14
5
6
13
8
1
6
7
15
4
2
8
17
7
Idem.
k 3
38Reprenons le même exemple sans ordonnancement des
sommets.
Lordre A - B - C - D - E - F - G H sera
respecté.
k 1
3
9
B
C
?
B
C
4
9
4
2
D
?
8
6
8
A
E
D
E
0
A
3
7
7
6
13
G
F
2
3
G
F
?
H
H
?
39k 2
3
9
B
E
10
B
C
4
9
4
2
C
14
8
6
8
E
A
E
D
0
A
3
7
7
6
13
G
F
2
3
G
E
15
H
F
17
Idem.
k 3
Note
Lorsquil nexiste pas de cycles de longueur
négative, cette méthode convient.
40Arborescence des plus courts chemins avec comme
origine A
À partir des résultats obtenus, on peut
construire facilement une telle arborescence.
3
9
B
E
10
B
C
4
9
4
2
C
14
8
6
8
E
A
E
D
0
A
3
7
7
6
13
G
F
2
3
G
E
15
H
F
17
41Approche vorace Algorithme de DIJKSTRA (dij gt 0)
Posons LC(s) ? longueur du pcc entre 1 et s dont
les sommets intermédiaires font partie de
C, ?s ? S. pC(s) ? le sommet qui précède s dans
ce pcc.
(1)
Poser C 1. LC(i) d1i, i 2, , n
0, i 1. Poser pC(s) 1 ?s ? 1 ? S.
Trouver k ? S C tel que MIN LC(j) est
atteint. j ? S C
(2)
Poser C C ?k.
Si C ltgt S alors poser LC(j) MINLC(j) , LC(k)
dkj ?j ? SC si MIN est atteint à LC(k)
dkj, pC(j) k ?j ? SC
(3)
Retournez à létape 2.
42Théorème
À chaque itération de lalgorithme, lorsque k est
ajouté à C, LC(k) est la longueur du pcc de 1 à
k, sans restriction.
Exemple
2
7
2
2
5
5
5
3
1
4
7
1
4
1
3
7
4
5
6
Note
Lalgorithme fournit le pcc de 1 à tout autre
sommet. Si lon cherche le pcc entre 1 et un
sommet s, alors on peut arrêter lalgorithme au
moment où s entre dans C.
43C
5
6
7
4
1
2
3
?
?
?
0
2
5
4
1
LC
1
1
1
1
1
1
pC
0
2
4
9
4
?
?
1, 2
LC
1
2
2
1
1
1
pC
0
2
4
9
4
7
?
1, 2, 3
LC
1
2
2
1
3
1
pC
0
2
4
9
4
7
?
1, 2, 3, 5
LC
1
2
2
1
3
1
pC
0
2
4
8
4
7
14
1, 2, 3, 5, 6
LC
pC
1
2
6
1
3
6
440
2
4
8
4
7
13
1, 2, 3, 5, 6, 4
LC
pC
1
2
6
1
3
4
pcc entre 1 et 7
7, pC(7), pC(4), pC(6), , 1 ou encore
7, 4, 6, 3, 2, 1.
Le tracé du pcc est obtenu en procédant à
reculons.
Note
Sil ny a pas de chemin entre 1 et j dans le
graphe, alors LC(j) ? à la fin de lalgorithme.
45Recherche du pcc entre chaque paire de sommets
Lalgorithme de FLOYD WARSHALL admet des arcs
de longueur négative mais pas de cycles négatifs.
On pourrait appliquer lun des algorithmes
précédents n fois pour obtenir ce résultat mais
lalgorithme suivant est plus efficace.
Posons Lij(m) longueur dun pcc entre i et j,
sujet à la condition que le chemin ne passe pas
par les sommets m, m1, , n (i et j exceptés),
nous avons léquation de récurrence suivante
Lij(m1) min Lij(m), Lim(m) Lmj(m).
Le pcc ne passe pas par m.
Le pcc passe par m.
46Énoncé de lalgorithme FLOYD - WARSHALL
Poser Lij(1) dij, ? i,j 1, 2, , n. pij(1)
j, ? j 1, 2, , n. Poser k 1.
(1)
? i,j 1, 2, , n,
(2)
Faire Lij(k1) min Lij(k), Lik(k)
Lkj(k), Si le pcc passe par k alors pij(k 1)
k sinon pij(k 1) pij(k)
(3) Si k n alors aller à (4) sinon faire
k k 1, aller à (2).
47Il reste à retracer le chemin optimal entre i et
j.
(4) Poser x(1) j, x(2) pij(n1) et t 3.
(5) Faire x(t) pix(t-1)(n1).
(6) Si t ltgt n - 1 alors faire t t
1, aller à (5) sinon le chemin optimal est
le suivant (i x(t1), x(t), , x(1) j).
FIN
482
Exemple
4
3
4
4
1
1
1
-2
3
L(1)
L(2)
L(3)
L(4)
- 0 4 ? ?
- 0 1 4
- -2 ? 0 1
- ? 3 ? 0
- 0 4 ? ?
- 0 1 4
- -2 2 0 1
- ? 3 ? 0
- 0 4 5 8
- 0 1 4
- -2 2 0 1
- ? 3 4 0
- 0 4 5 6
- -1 0 1 2
- -2 2 0 1
- 2 3 4 0
p(1)
p(2)
p(3)
p(4)
- 1 2 3 4
- 1 2 3 4
- 1 2 3 4
- 1 2 3 4
- 1 2 3 4
- 1 2 3 4
- 1 1 3 4
- 1 2 3 4
- 1 2 2 2
- 1 2 3 4
- 1 1 3 4
- 1 2 2 4
- 1 2 2 3
- 3 2 3 3
- 1 1 3 2
- 3 2 2 4
49L(5)
- 0 4 5 6
- -1 0 1 2
- -2 2 0 1
- 2 3 4 0
p(5)
- 1 2 2 3
- 3 2 3 3
- 1 1 3 2
- 3 2 2 4
Chemin optimal entre 1 et 4
x
1
3
2
4
50Conclusion
Ce sujet a été traité dans la plupart des livres
portant sur la recherche opérationnelle.
Toutefois, je vous réfère au livre suivant
Ronald L. Rardin, Optimization in
Operations Research. Prentice Hall, 1998,
919p.