Le problme du plus court chemin nonc du
Le problème du plus court chemin Énoncé du problème et construction d’un modèle Partitionnement des sommets par niveaux d’un graphe fortement connexe sans circuit Théorème d’optimalité 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
Énoncé du problème : Considérons n villes V 1, V 2, …, Vn reliées entre elles par un réseau routier. Bob séjournant en V 1 désire se rendre à la ville Vn. En examinant le réseau routier reliant ces 2 villes et, parmi toutes les possibilités qui s’offrent à lui, il retient quelques villes intermédiaires V 2, V 3, …, Vn-1 par lesquelles il pourrait passer. Bob a un budget limité et désire se rendre de V 1 à 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 ? Le problème du plus court chemin 2
Construction d’un modèle : Le réseau de transport de Bob peut se traduire facilement sous la forme d’un graphe : Vn-2 V 4 V 1 V 3 Vn Vn-1 où les sommets représentent les villes et où les arcs représentent les routes possibles pour aller d’une ville à l’autre. Note : En l’absence d’arcs entre 2 villes, cela signifie qu’il n’y a pas de route directe entre celles-ci. Le problème du plus court chemin 3
Matrice associée au graphe : Nous définissons un graphe orienté G = (S, U) où S = {s 1, s 2, …, sn}, l’ensemble des sommets du graphe, U = {(x, y) S x S | il existe une route directe allant de x à y}, l’ensemble des arcs du graphe. Une matrice A = (aij), i = 1, 2, …, n j = 1, 2, …, n est définie comme suit : aij = associée au graphe G 1 si (si, sj) U 0 autrement. Le problème du plus court chemin 4
Exemple : 2 3 1 4 6 5 1 2 Matrice associée à G : 3 4 5 6 1 2 3 4 5 6 0 1 1 0 0 0 1 1 0 0 0 1 0 1 1 0 0 0 1 0 0 0 Le problème du plus court chemin 5
Matrice 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. Le problème du plus court chemin 6
Exemple d’un graphe arc-valué : 3 B 9 4 8 A 3 4 2 6 E 7 G C D 7 13 F 6 2 H Le problème du plus court chemin 7
Exemple d’un graphe arc-valué : Soit le réseau routier suivant et le graphe correspondant, Le problème du plus court chemin 8
Formulation du problème : En ajoutant un arc fictif (sn, s 1), on obtient : dij zij Min i = 1, 2, …, n j = 1, 2, …, n tel que (si, sj) U sujet à zij j = 1, 2, …, n tel que (si, sj) U = 0 i. zki k = 1, 2, …, n tel que (sk, si) U zn 1 = 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. C’est donc un cas particulier du problème de flot à coût minimal. Le problème du plus court chemin 9
Remarque : Nous sommes amenés à résoudre 3 types de problèmes impliquant des plus courts chemins : (i) un pcc entre un sommet i et un sommet j; (ii) un pcc entre un sommet i et tous les autres sommets du graphe; (iii) 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. Le problème du plus court chemin 10
Rappel de quelques définitions sur la structure de graphe : Chemin : Une suite d’arcs u 1, u 2, …, uk telle que l’extrémité terminale de chaque arc coïncide avec l’extrémité initiale de l’arc suivant dans la suite. Chemin de longueur k : Exemple : Un chemin comprenant k arcs. 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). Le problème du plus court chemin 11
Si un graphe orienté contient un circuit dont la longueur est < 0 (un cycle négatif), il se peut que le plus court chemin n’existe pas. 1 1 -5 5 4 6 2 -1 2 1 3 3 On exclut d’emblée ce type de graphe de la discussion subséquente. Le problème du plus court chemin 12
Graphe non orienté : U désigne plutôt un ensemble d’arê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 d’un graphe non orienté : Une suite d’arêtes distinctes u 1, u 2, …, uk avec la propriété qu’il existe k + 1 sommets x 1, x 2, …, xk+1 tels que ui (xi, xi+1), 1 i k. Exemple : (3, 2) – (3, 5) – (1, 5) – (2, 1) est une chaîne. Cycle : Une chaîne où x 1 = xk+1. Graphe connexe : Graphe non orienté dans lequel il est toujours possible de relier entre eux 2 sommets quelconques par une chaîne. Le problème du plus court chemin 13
Ré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 s’agit 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 l’un des dij était < 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. Le problème du plus court chemin 14
Relation d’ordre 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) Note : x y il existe un chemin de longueur non nulle de x vers y. R est dite aussi relation d’anté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). Le problème du plus court chemin 15
Partitionnement des sommets par niveaux d’un graphe fortement connexe sans circuit Tous les éléments d’un même niveau n’ont pas d’ancêtres dans le niveau qui suit, ni de descendants dans le niveau qui précède. Les éléments du premier niveau n’ont pas d’ancêtres et ceux du dernier niveau n’ont pas de descendants. L’ordre des sommets d’un même niveau est indifférent i. e. les sommets d’un même niveau ne sont pas reliés entre eux par des arcs. Une décomposition par niveaux existe toujours mais elle n’est pas nécessairement unique. Le problème du plus court chemin 16
Illustration de la méthode de partitionnement des sommets par niveaux d’un 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. Le problème du plus court chemin 17
V 0 – A 5 = V 1 – A 2 = V 2 – A 6 = V 3 – A 1 – A 3 = V 4 – A 7 = V 5 – A 4 = Le problème du plus court chemin 18
Procédé : Déterminons d’abord les sommets qui n’ont pas d’ancêtres : V 0 = A 1 + A 2 + … + A 8. On constate que le sommet 5 n’admet aucun arc du type (- , 5). Le sommet 5 forme donc le niveau I. Pour déterminez le niveau II, il faut cher tous les sommets dont le seul ancêtre est 5 : V 1 = V 0 – A 5. Le sommet 2 n’a pas d’autres ancêtres que le sommet 5. Le sommet 2 forme donc le niveau II. Comme on peut le constater, pour obtenir les sommets d’un niveau, il suffit d’enlever au vecteur précédent les lignes associées aux sommets du niveau précédent. Le problème du plus court chemin 19
Le graphe peut alors se mettre sous la forme : Note : Le sommet 1 peut être indifféremment placé dans l’un 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 20 5 – 2 – 6 – 3 – 1 – 7 – 4 – 8.
Note : Le PCC de V 1 à V 8 se résume au graphe : Solution triviale. 8 1 Le PCC de V 2 à V 8 se résume au graphe suivant (il faut négliger V 5 et les arcs qui en sont issus) : 1 8 2 6 7 4 3 Le problème du plus court chemin 21
Théorème d’optimalité de Bellman-Pontryagin : Il s’énonce sous l’une des 2 formes suivantes : Passé - Futur Tout chemin reliant la ville V 1 à la ville Vn est optimal si tout chemin partiel de V 1 à Vk issu de ce chemin est lui-même optimal de V 1 à Vk et ce pour tous les indices k de ce chemin. Futur - Passé Tout chemin reliant la ville V 1 à 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. Le problème du plus court chemin 22
Reprenons l’exemple présenté antérieurement : 3 B C 9 4 2 8 A 3 G 6 E 7 4 D 7 13 F 6 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. Le problème du plus court chemin 23
Présentation d’un algorithme de type Futur-Passé : Renumérotons les villes selon un ordonnancement obtenu à l’aide de l’approche précédente. A B G E C D F H. . . 1 2 3 4 9 1 3 3 8 6 3 4 2 5 4 7 8 5 2 7 4 7 6 13 6 6 7 2 Le problème du plus court chemin 8 24
Il s’agit d’énumérer les chemins de longueur au plus k = 1, puis au plus k = 2, et ainsi de suite, dont l’extrémité terminale est la ville n. Posons vk(i) longueur du PCC de i à n ayant au plus k arcs, i = 1, 2, …, n. k = 1, 2, …, n. Remarque : vk(n) = 0, Posons pk(i) indicateur servant à retracer le PCC de i à n ayant au plus k arcs, i = 1, 2, …, n. k = 1 k > 1 v 1(i) = din, i = 1, 2, …, n - 1. p 1(i) = i, i = 1, 2, …, n. vk(i) = MIN (dij + vk-1(j) ) 1 j n i = 1, 2, …, n - 1. pk(i) = la valeur j pour laquelle MIN est atteint. Le problème du plus court chemin 25
À quel moment s’arrête-t-on ? Étant donné qu’il est toujours possible d’ordonnancer un graphe connexe et sans circuit et de classer ses sommets par niveaux, s’il 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 à l’ité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)), …, p 1(p 2(p 3(… pk-1(i))), n) en éliminant les valeurs identiques. Le problème du plus court chemin 26
Considérons l’exemple précédent : i 1 2 3 4 v 1(i) p 1(i) 1 2 3 4 5 5 6 6 6 7 2 7 8 0 8 v 2(i) p 2(i) 1 2 15 7 9 7 8 7 6 6 2 7 0 8 v 3(i) p 3(i) 17 4 11 5 15 7 9 7 8 7 6 6 2 7 0 8 v 4(i) p 4(i) 17 4 11 5 15 7 9 7 8 7 6 6 2 7 0 8 L’algorithme s’arrête car v 4(i) = v 3(i) i. Exemple : Chemin optimal du sommet 1 au sommet 8 : (1 – 4 – 7 – 8) avec une longueur = 17.
Énoncé de l’algorithme de Bellman – Kalaba (Type Futur – Passé) (0) Renuméroter les sommets suivant l’ordonnancement précédent. Réécrire la matrice des distances. (1) Poser v 1(i) = din, p 1(i) = i, Poser k = 2. (2) Faire vk(i) = MIN (dij + vk-1(j) ) 1 j n i = 1, 2, …, n, i = 1, 2, …, n - 1. pk(i) = la valeur j pour laquelle MIN est atteint. Poser vk(n) = 0, (3) (4) pk(n) = n. Si vk(i) = vk-1(i) i alors aller à (4) sinon faire k = k + 1 aller à (2). vk-1(1) représente la valeur optimale du problème posé. Le problème du plus court chemin 28
Il 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 > 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 Le problème du plus court chemin 29
Remarque : Il n’est pas nécessaire d’ordonnancer les sommets du graphe avant d’appliquer l’algorithme, mais cela est préférable, car il nous permet d’avoir des sous la diagonale de la matrice des distances. Cela permet de simplifier l’algorithme précédent ! 1 2 3 4 5 6 7 8 1 0 2 9 0 3 3 0 4 8 4 7 0 5 3 2 0 Le problème du plus court chemin 6 4 0 7 13 7 6 0 8 6 2 0 30
Énoncé de l’algorithme de type Passé – Futur (0) Renuméroter les sommets suivant l’ordonnancement précédent. Réécrire la matrice des distances. (1) Poser u 1(j) = d 1 j, p 1(j) = j, Poser k = 2. (2) Soit uk(j) longueur du PCC de 1 à j ayant au plus k arcs, j = 1, 2, …, n. j = 2, 3, …, n. faire uk(j) = MIN (dij + uk-1(i) ) 1 i n j = 1, 2, …, n, j = 1, 2, …, n. pk(j) = la valeur i pour laquelle MIN est atteint. Poser uk(1) = 0, (3) pk(1) = 1. Si uk(j) = uk-1(j) j alors aller à (4) sinon faire k = k + 1, Le problème du plus court chemin aller à (2). 31
(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 > 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 Le problème du plus court chemin 32
Critère d’arrêt de cet algorithme : u 1(j) u 2(j) u 3(j) u 4(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 n’y a pas de cycles négatifs, alors un pcc contiendrait au plus n-1 arcs ce qui implique un-1(j) longueur du pcc entre 1 et j j. En fait, l’algorithme arrête lorsque uk(j) = uk-1(j) j. Le problème du plus court chemin 33
Considérons l’exemple précédent : i 1 2 3 4 u 1(j) 0 9 3 8 p 1(j) 1 2 3 4 5 5 6 6 7 7 8 8 u 2(j) p 2(j) 0 1 9 2 3 3 8 4 10 4 6 15 4 8 u 3(j) p 3(j) 0 1 9 2 3 3 8 4 10 4 14 5 15 4 17 7 u 4(j) p 4(j) 0 1 9 2 3 3 8 4 10 4 14 5 15 4 17 7 L’algorithme s’arrête car u 4(j) = u 3(j) j. Exemple : Chemin optimal du sommet 1 au sommet 8 : (1 – 4 – 7 – 8) avec une longueur = 17.
Version « graphique » de l’algorithme de type Passé – Futur Il est possible d’appliquer directement ces algorithmes sur le graphe lui-même au moyen d’un 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. Le problème du plus court chemin 35
Pour 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 9 2 4 2 9 0 1 1 8 3 3 5 5 4 4 2 7 8 4 7 13 6 6 6 6 7 7 2 Le problème du plus court chemin 8 8 36
k = 2 3 9 2 4 2 9 0 1 1 8 3 3 4 4 10 4 5 2 7 8 4 7 13 6 14 5 6 6 15 4 7 2 8 17 7 k = 3 Idem. Le problème du plus court chemin 37
Reprenons le même exemple sans ordonnancement des sommets. L’ordre A - B - C - D - E - F - G – H sera respecté. k = 1 9 B 3 B 9 4 8 A 0 A 7 3 G 8 D 6 E D 7 13 G 4 2 E 3 C C F F 6 2 H Le problème du plus court chemin H 38
k = 2 9 B 3 B 9 4 8 A 0 A 7 3 G 8 14 C 6 E D 7 13 G 4 2 E 3 10 E C F 15 E 6 2 H k = 3 17 F Idem. Note : Lorsqu’il n’existe pas de cycles de longueur négative, cette méthode convient. Le problème du plus court chemin 39
Arborescence des plus courts chemins avec comme origine A À partir des résultats obtenus, on peut construire facilement une telle arborescence. 9 B 3 B 9 4 8 A 0 A 7 3 G 8 14 C 6 E D 7 13 G 4 2 E 3 10 E C F 15 E 6 2 H Le problème du plus court chemin 17 F 40
Approche vorace – Algorithme de DIJKSTRA (dij > 0) Posons LC(s) longueur du pcc entre 1 et s dont les sommets intermédiaires font partie de C, s S. p. C(s) le sommet qui précède s dans ce pcc. (1) Poser C = {1}. LC(i) = d 1 i, i = 2, …, n 0, i = 1. Poser p. C(s) = 1 s 1 S. (2) Trouver k S – C tel que MIN LC(j) j S – C est atteint. Poser C = C {k}. (3) Si C <> S alors poser LC(j) = MIN{LC(j) , LC(k) + dkj} si MIN est atteint à LC(k) + dkj, p. C(j) = k Retournez à l’étape 2. j S–C 41
Théorème : À chaque itération de l’algorithme, lorsque k est ajouté à C, LC(k) est la longueur du pcc de 1 à k, sans restriction. Exemple : 2 2 5 1 7 2 3 1 4 5 5 4 1 3 4 5 7 7 6 Note : L’algorithme fournit le pcc de 1 à tout autre sommet. Si l’on cherche le pcc entre 1 et un sommet s, alors on peut arrêter 42 l’algorithme au moment où s entre dans C.
1 0 2 2 1 3 5 1 4 1 5 4 1 6 1 7 1 C {1} LC p. C 0 2 1 4 2 9 2 4 1 1 1 {1, 2} LC p. C 0 2 1 4 2 9 2 4 1 7 3 1 {1, 2, 3, 5} LC p. C 0 2 1 4 2 8 6 4 1 7 3 14 6 {1, 2, 3, 5, 6} LC p. C Le problème du plus court chemin 43
LC p. C 0 2 1 4 2 8 6 4 1 7 3 13 4 {1, 2, 3, 5, 6, 4} pcc entre 1 et 7 : 7, p. C(7), p. C(4), p. C(6), …, 1 ou encore 7, 4, 6, 3, 2, 1. Le tracé du pcc est obtenu en procédant à reculons. Note : S’il n’y a pas de chemin entre 1 et j dans le graphe, alors LC(j) = à la fin de l’algorithme. Le problème du plus court chemin 44
Recherche du pcc entre chaque paire de sommets L’algorithme de FLOYD – WARSHALL admet des arcs de longueur négative mais pas de cycles négatifs. On pourrait appliquer l’un des algorithmes précédents n fois pour obtenir ce résultat mais l’algorithme suivant est plus efficace. Posons Lij(m) = longueur d’un pcc entre i et j, sujet à la condition que le chemin ne passe pas par les sommets m, m+1, …, n (i et j exceptés), nous avons l’équation de récurrence suivante : Lij(m+1) = min {Lij(m), Lim(m) + Lmj(m)}. Le pcc ne passe pas par m. Le pcc passe par m. Le problème du plus court chemin 45
Énoncé de l’algorithme FLOYD - WARSHALL (1) Poser Lij(1) = dij, pij(1) = j, Poser k = 1. (2) i, j = 1, 2, …, n, i, j = 1, 2, …, n. Faire Lij(k+1) = 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). Le problème du plus court chemin 46
Il reste à retracer le chemin optimal entre i et j. (4) Poser x(1) = j, x(2) = pij(n+1) et t = 3. (5) Faire x(t) = pix(t-1)(n+1). (6) Si t <> n - 1 alors faire t = t + 1, aller à (5) sinon le chemin optimal est le suivant : (i = x(t+1), x(t), …, x(1) = j). FIN Le problème du plus court chemin 47
2 Exemple : 4 1 -2 4 3 1 4 1 3 L(1) 0 4 0 1 4 -2 0 1 3 0 L(2) 0 4 0 1 4 -2 2 0 1 3 0 L(3) 0 4 5 8 0 1 4 -2 2 0 1 3 4 0 L(4) 0 4 5 6 -1 0 1 2 -2 2 0 1 2 3 4 0 p(1) 1 2 3 4 p(2) 1 2 3 4 1 1 3 4 1 2 3 4 p(3) 1 2 2 2 1 2 3 4 1 1 3 4 1 2 2 4 p(4) 1 2 2 3 3 2 3 3 1 1 3 2 3 2 2 4
L(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 Le problème du plus court chemin 49
Conclusion 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, 919 p. » Le problème du plus court chemin 50
- Slides: 50