1 / 50

Le problème du plus court chemin

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

sloan
Télécharger la présentation

Le problème du plus court chemin

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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 s’offrent à 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 ? Le problème du plus court chemin

  3. Construction d’un modèle : Le réseau de transport de Bob peut se traduire facilement sous la forme d’un 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 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

  4. Matrice associée au graphe : Nous définissons un graphe orienté G = (S, U) où S = {s1, s2, …, 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 associée au graphe G j = 1, 2, …, n est définie comme suit : 1 si (si, sj)  U aij = 0 autrement. Le problème du plus court chemin

  5. Exemple : 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 : Le problème du plus court chemin

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

  7. Exemple d’un graphe arc-valué : 3 B C 4 9 4 2 8 6 A E D 3 7 7 6 13 G F 2 H Le problème du plus court chemin

  8. Exemple d’un graphe arc-valué : Soit le réseau routier suivant et le graphe correspondant, Le problème du plus court chemin

  9. Formulation 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 i = 1, 2, …, n; j = 1, 2, …, n tel que (si, sj)  U. zij 0 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

  10. Remarque : 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. Le problème du plus court chemin

  11. Rappel de quelques définitions sur la structure de graphe : Chemin : Une suite d’arcs u1, u2, …, 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 : 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). Le problème du plus court chemin

  12. 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. -5 1 1 6 1 5 4 2 -1 3 2 3 On exclut d’emblée ce type de graphe de la discussion subséquente. Le problème du plus court chemin

  13. 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 u1, u2, …, uk avec la propriété qu’il existe k + 1 sommets x1, x2, …, 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ù x1 = 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

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

  15. 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) x  y  il existe un chemin de longueur non nulle de x vers y. Note : 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

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

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

  18. V0 – A5 = V1 – A2 = V2 – A6 = V3 – A1 – A3 = V4 – A7 = V5 – A4 = Le problème du plus court chemin

  19. Procédé : Déterminons d’abord les sommets qui n’ont pas d’ancêtres : V0 = A1 + A2 + … + A8. 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 chercher tous les sommets dont le seul ancêtre est 5 : V1 = V0 – A5. 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

  20. 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 5 – 2 – 6 – 3 – 1 – 7 – 4 – 8.

  21. Note : 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 2 6 7 4 3 Le problème du plus court chemin

  22. 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 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. Le problème du plus court chemin

  23. Reprenons l’exemple 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. Le problème du plus court chemin

  24. 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 5 6 7 8 3 4 4 5 2 2 7 4 3 9 7 6 3 6 13 8 1 6 7 2 8 Le problème du plus court chemin

  25. 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. vk(n) = 0,  k = 1, 2, …, n. Remarque : 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 > 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. Le problème du plus court chemin

  26. À 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)), …, p1(p2(p3(… pk-1(i))), n) en éliminant les valeurs identiques. Le problème du plus court chemin

  27. Considérons l’exemple 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 L’algorithme s’arrê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 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 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é. Le problème du plus court chemin

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

  30. 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 • 0 9 3 8     •  0  4 3    •   0 7   13  •    0 2  7  •     0 4 6  •      0  6 •       0 2 •        0 Le problème du plus court chemin

  31. É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 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). Le problème du plus court chemin

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

  33. Critère d’arrê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 n’y 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, l’algorithme arrête lorsque uk(j) = uk-1(j)  j. Le problème du plus court chemin

  34. Considérons l’exemple 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 L’algorithme s’arrête car u4(j) = u3(j)  j. Exemple : Chemin optimal du sommet 1 au sommet 8 : (1 – 4 – 7 – 8) avec une longueur = 17.

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

  36. 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 8 4 5  9 2 4 4 5 2 2 7 4 3 9 7 3 3 6 3 1 0  6 6 13 8 1 6 7  7 2 8  8 Le problème du plus court chemin

  37. k = 2 3 8 4 4 10 9 2 4 4 5 2 2 7 4 3 9 7 3 3 6 3 1 0 14 5 6 13 8 1 6 7 15 4 2 8 17 7 Idem. k = 3 Le problème du plus court chemin

  38. Reprenons le même exemple sans ordonnancement des sommets. L’ordre 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 E A E D A 0 3 7 7 6 13 G F 2 3 G F  H H  Le problème du plus court chemin

  39. k = 2 3 9 B E 10 B C 4 9 4 2 C 14 8 6 8 E A E D A 0 3 7 7 6 13 G F 2 3 G E 15 H F 17 Idem. k = 3 Note : Lorsqu’il n’existe pas de cycles de longueur négative, cette méthode convient. Le problème du plus court chemin

  40. Arborescence 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 A 0 3 7 7 6 13 G F 2 3 G E 15 H F 17 Le problème du plus court chemin

  41. 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. 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 <> S alors poser LC(j) = MIN{LC(j) , LC(k) + dkj} j  S–C si MIN est atteint à LC(k) + dkj, pC(j) = k j  S–C (3) Retournez à l’étape 2.

  42. 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 7 2 2 5 5 5 3 1 4 7 1 4 1 3 7 4 5 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 l’algorithme au moment où s entre dans C.

  43. C 7 5 6 4 2 3 1    0 2 5 4 LC {1} pC 1 1 1 1 1 1   0 2 4 9 4 LC {1, 2} pC 1 2 2 1 1 1  0 2 4 9 4 7 LC {1, 2, 3} pC 1 2 2 1 3 1  0 2 4 9 4 7 LC {1, 2, 3, 5} pC 1 2 2 1 3 1 0 2 4 8 4 7 14 LC {1, 2, 3, 5, 6} pC 1 2 6 1 3 6 Le problème du plus court chemin

  44. 0 2 4 8 4 7 13 LC {1, 2, 3, 5, 6, 4} 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 : 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

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

  46. Énoncé de l’algorithme FLOYD - WARSHALL (1) Poser Lij(1) = dij,  i,j = 1, 2, …, n. pij(1) = j,  j = 1, 2, …, n. Poser k = 1.  i,j = 1, 2, …, n, (2) 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

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

  48. 2 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 58 • 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 13 4 1 2 3 4 1 2 22 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

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

  50. 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, 919p. » Le problème du plus court chemin

More Related