La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Algorithme de Bellman-Ford

Présentations similaires


Présentation au sujet: "Algorithme de Bellman-Ford"— Transcription de la présentation:

1 Algorithme de Bellman-Ford
Problématique des arcs de poids négatifs Si un graphe ne contient aucun circuit de poids négatif accessible à partir d’une origine s, alors, pour tout sommet i Î v, le poids du plus court chemin reste bien défini, même si sa valeur est négative. a 3 s 6 -3 5 c Dans cet exemple, le cycle a-c-a a un poids de +3

2 Algorithme de Bellman-Ford
Problématique des arcs de poids négatifs S’il existe un circuit de poids négatif accessible depuis s, le poids du plus court chemin n’est pas correctement défini. Aucun chemin entre s et un sommet du circuit ne peut être plus court, on peut toujours trouver un encore plus court! a 3 s 3 -6 5 c Le cycle a-c-a a un poids de -3

3 Algorithme de Bellman-Ford
Stratégie Faire les étapes nécessaires pour faire converger le poids des chemins sachant qu’un plus court chemin de s à tout autre sommet est un chemin d’ordre au plus n -1 arcs. Vérifier s’ils ont tous convergé. Retourner VRAI si c’est le cas. Retourner FAUX sinon. Utilisation de la technique du relâchement Comme dans Dijkstra, l’Algorithme utilise le relâchement pour diminuer progressivement une estimation yv du poids d’un plus court chemin depuis l’origine. À la différence de Dijkstra, chaque arc est relâché plusieurs fois. L’algorithme de Bellman-Ford…

4 Algorithme de Bellman-Ford
Soit le graphe G(V,E) Initialiser yi = + pour tous les sommets i Initialiser ys = 0. Répéter |V| - 1 FOIS Pour tout arc (u,v) de E faire RELÂCHER(u, v, c(u,v)) Pour tout arc (u,v) de E faire Si yv > yu + c(u,v) Alors Retourner FAUX Retourner VRAI

5 Algorithme de Bellman-Ford
RELÂCHER (a,b, c (a,b)) Si yb > ya + c (a,b) Alors yb  ya + c (a,b) 5 9 5 6 2 2 a b a b Relâcher(a,b, c(a,b)) Relâcher(a,b, c(a,b)) 5 7 5 6 2 2 a b a b

6 Algorithme de Bellman-Ford
RELÂCHER (a,b, c (a,b)) Si yb > ya + c (a,b) Alors yb  ya + c (a,b) P[b]  a Le tableau P permet de conserver le sommet (ici a) qui a fait relâcher le poids d’un sommet donné (ici b). Je rappelle que le poids associé à un sommet est la longueur du plus court chemin entre un sommet source et le sommet en question. Tous les P[i] sont initialisés à NIL au départ (i Î v ).

7 Algorithme de Bellman-Ford
Exemple 1 s d c b a 3 5 1 -3 s d c b a 3 5 1 -3 6 4 9 Étape 1 relaxation de tous les sommets dans l’ordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s) L’ordre des arcs est arbitraire. On arrive au même résultat final (fin de l’algorithme en entier, acétate #4) si on fait d’autres choix de l’ordre dans lequel les sommets sont relâchés Étape 1 veut dire un tour de boucle complet (premier tour ici de la boucle Répéter |V| - 1 FOIS).

8 Algorithme de Bellman-Ford
s d c b a 3 5 1 -3 6 4 9 s d c b a 3 5 1 -3 4 7 Étape 2 relaxation de tous les arcs dans l’ordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s) 2ième tour de boucle.

9 Algorithme de Bellman-Ford
s d c b a 3 5 1 -3 4 7 s d c b a 3 5 1 -3 2 4 Étape 3 relaxation de tous les arcs dans l’ordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s) 3ième tour de boucle.

10 Algorithme de Bellman-Ford
s d c b a 3 5 1 -3 2 4 s d c b a 3 5 1 -3 4 Étape 4 relaxation de tous les arcs dans l’ordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s) 4ième (et dernier: le nombre de tour=nbre de sommets-1) tour de boucle. Cycle de coût négatif (b-d-b=-2): réduction encore possible, le poids de d reste encore plus grand que le poids de b + la pondération de l’arc b-d. Le plus court chemin entre s et d est donc indéterminée

11 Algorithme de Bellman-Ford
La version de l’algorithme de Bellman-Ford montrée dans l’acétate#4 n’est pas très optimisée. En effet, il peut arriver que les poids de chaque sommet se stabilise (atteinte du coût définitif, plus de relâchements possibles) avant que l’algorithme fasse les |V| - 1 tours de boucle. L’acétate qui suit présente une version plus optimisée de l’algorithme de Bellman-Ford. Cette version se caractérise par l’usage d’une variable Booléenne (stable) qui sert à arrêter l’algorithme quand le graphe devient stable (plus de relâchements possibles). Ceci fait qu’il va falloir modifier la procédure Relâcher: elle doit retourner, en plus de ce qu’elle est supposée faire, FAUX ou VRAI: elle a pu relâcher ou non respectivement. Dans le cas où le graphe présente des cycles négatifs (pas de solution donc), stable restera toujours à FAUX et l’algorithme fera exactement |V| tours de boucle (compteur k). Sachant que le nombre d’arcs maximum reliant 2 sommets donné est égale au nombre de sommets –1 (i.e.|V| - 1 ), on aurait fait donc 1 tour de plus quand la stabilité du graphe ne sera jamais atteinte. Ce tour de plus remplace : Pour tout arc (u,v) de E faire Si yv > yu + c(u,v) Alors Retourner FAUX dans l’algorithme de l’acétate#4.

12 Bellman-Ford revu…. Soit le graphe G(V,E)
Initialiser yi = + pour tous les sommets i Initialiser ys = 0. K  1 Répéter Stable  VRAI Pour tout arc (u,v) de E faire RELÂCHER(u, v, c(u,v)) Si …Alors Stable  FAUX K  k + 1 Tant que Stable est FAUX ET k < n+1 Si k=n+1 alors présence d’un circuit de poids négatif

13 Algorithme de Bellman-Ford
Exemple 2 s d c b a 3 5 -3 1 -1 s d c b a 3 5 -3 1 -1 8 4 7 Étape 1 relaxation de tous les arcs dans l’ordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s) Trace de la deuxième version de l’algorithme de Bellman-Ford

14 Algorithme de Bellman-Ford
s d c b a 3 5 -3 1 -1 8 4 7 s d c b a 3 5 -3 1 -1 8 4 7 Étape 2 relaxation de tous les arcs dans l’ordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s) Pas de réduction possible : coûts corrects! Fin de l’algorithme dès le 2ième tour de boucle.

15 Algorithme de Bellman-Ford
Exercice -6 a b -1 3 5 e Figure 1. s -1 -1 3 5 3 5 c d -3 En considérant le graphe de la figure 1, faites une trace détaillée de l’algorithme optimisée de Bellman-Ford. Pour chaque sommet du graphe, vous devez indiquer l’évolution de ses coûts au fur et à mesure de l’exécution de l’algorithme suivant le format suivant. Vous devez donner le coût et le chemin le plus court (s’il y a une solution bien sûr) pour aller de S à e. infini, 18, 13, 5, 3 i Évolution du poids d’un sommet i (de gauche vers la droite) -, k, l, m, o Les sommets qui ont aidé au relâchement du sommet i, structure parallèle à celle des coûts.


Télécharger ppt "Algorithme de Bellman-Ford"

Présentations similaires


Annonces Google