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

Structures de données IFT-2000 Abder Alikacem Les graphes (3) Semaine 7 Département dinformatique et de génie logiciel Édition Septembre 2009.

Présentations similaires


Présentation au sujet: "Structures de données IFT-2000 Abder Alikacem Les graphes (3) Semaine 7 Département dinformatique et de génie logiciel Édition Septembre 2009."— Transcription de la présentation:

1 Structures de données IFT-2000 Abder Alikacem Les graphes (3) Semaine 7 Département dinformatique et de génie logiciel Édition Septembre 2009

2 Plan Tri topologique Connexité des graphes Algorithme de Dijkstra Algorithme de Bellman-Ford Algorithme A*

3 Algorithme de Dijkstra Se base sur le principe de la sous-optimalité Si p est le plus court chemin entre deux sommets i et j alors: k, un sommet appartenant à p le sous-chemin de p (i, k) est optimal (le plus court) le sous-chemin de p (k, j) est optimal (le plus court) 3 s dc b a s dc b a Exemple. Plus court chemin entre s et i v (v : lensemble des sommets)

4 Pour chaque sommet i v, on maintient à jour un attribut y i : une estimation de la pondération dun plus court chemin: État initial : y s = 0 (s étant la source) y i = + avec i s À chaque étape : essayer de minimiser les y i État final : y i = lpcc(s,i) (lpcc: le plus court chemin) Lalgorithme est basée sur la technique de relâchement Cest une méthode qui diminue progressivement le poids du plus cours chemin pour chaque sommet jusquà ce quil soit égal au poids du plus court chemin. Algorithme de Dijkstra

5 RELÂCHER (a,b, c (a,b)) Si y b > y a + c (a,b) Alors y b y a + c (a,b) ba b a Relâcher(a,b, c(a,b)) ba b a Algorithme de Dijkstra

6 Soit V lensemble des sommets dun graphes Initialiser y i = + pour tous les sommets i Initialiser y s = 0. Initialiser S à l'ensemble vide, T = V. Tant que T n'est pas vide 1.Sélectionner le sommet j de T de plus petite valeur y i 2.Faire T = T \ j et S = S j 3.Pour tous les sommets k de T adjacents à j, faire RELÂCHER(j, k, c(j,k)) Fin Tant que.

7 RELÂCHER (a,b, c (a,b)) Si y b > y a + c (a,b) Alors y b y a + c (a,b) P[b] a Algorithme de Dijkstra et le chemin f d d e g h e Pour aller dun sommet A à un sommet B appliquer lalgorithme de Dijkstra tout conservant pour chaque nœud le nœud origine à partir duquel sa plus petite distance de la source a été calculée.

8 Algorithme de Dijkstra a db f c e abcdef V, S, T Y P V: ensemble des sommets S: les sommets solutionnés T: une file dattente (suivant le coût) Y: tableau des coûts P: tableau des sommets précédents

9 Algorithme de Dijkstra a db f c e abcdef V, S, T Y P

10 Algorithme de Dijkstra a db f c e (a) 4 (a) acbdef 024 -aa--- V, S, T Y P

11 Algorithme de Dijkstra a db f c e (a)12 (c) 3 (c)10 (c) acbdef accc- V, S, T Y P

12 Algorithme de Dijkstra a db f c e (a)12 (c) 3 (c)8 (b) acbdef acbc- V, S, T Y P

13 Algorithme de Dijkstra a db f c e (a)10 (d) 3 (c)8 (b) 14 (d) acbdef acbdd V, S, T Y P

14 Algorithme de Dijkstra a db f c e (a)10 (d) 3 (c)8 (b) 13 (e) acbdef acbde V, S, T Y P

15 Algorithme de Dijkstra a db f c e (a)10 (d) 3 (c)8 (b) 13 (e) acbdef acbde V, S, T Y P

16 s c b a Algorithme de Dijkstra Exercice Appliquez lalgorithme de Dijkstra à ce graphe à partir du sommet s

17 s c b a ,s 9,a 11,b 0 Algorithme de Dijkstra Réponse

18 s c b a Amusons nous! 0 Appliquons le principe du relâchement à chaque arc de ce graphe, lordre des arcs est choisi aléatoirement. Un arc relâché sera mis avec une autre couleur.

19 s c b a er tour… 0

20 s c b a er tour…

21 s c b a er tour…

22 s c b a er tour…

23 s c b a er tour…

24 s c b a er tour… On a relâché tous les arcs. Recommençons une nouvelle fois. Un arc relâché sera mis cette fois en bleu

25 s c b a ième tour…

26 s c b a ième tour…

27 s c b a ième tour…

28 s c b a ième tour…

29 s c b a ième tour…

30 s c b a ième tour…

31 s c b a Un autre tour? On arrête ce jeu!

32 s c b a Un autre tour? s c b a Résultat suite à lexécution de lalgorithme de Dijkstra Résultat à lissu de lexécution de lalgorithme de notre jeu … Il sagit en fait de la simulation De lalgorithme de Bellman-Ford! Limité à des poids positifs Poids positifs et négatifs

33 Problématique des arcs de poids négatifs Si un graphe ne contient aucun circuit de poids négatif accessible à partir dune 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. Algorithme de Bellman-Ford s c a

34 Problématique des arcs de poids négatifs Sil existe un circuit de poids négatif accessible depuis s, le poids du plus court chemin nest 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! Algorithme de Bellman-Ford s c a

35 Algorithme de Bellman-Ford Soit le graphe G(V,E) Initialiser y i = + pour tous les sommets i Initialiser y s = 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 y v > y u + c(u,v) Alors Retourner FAUX Retourner VRAI Faire les étapes nécessaires pour faire converger le poids des chemins sachant quun plus court chemin de s à tout autre sommet est un chemin dordre au plus n -1 arcs. Vérifier sils ont tous convergé. Retourner VRAI si cest le cas. Retourner FAUX sinon.

36 s dc b a s dc b a Étape 1 relaxation de tous les arcs dans lordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s) Exemple 1 Algorithme de Bellman-Ford

37 s dc b a s dc b a Étape 2 relaxation de tous les arcs dans lordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s) Algorithme de Bellman-Ford

38 s dc b a s dc b a Étape 3 relaxation de tous les arcs dans lordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s) Algorithme de Bellman-Ford

39 s dc b a s dc b a Étape 4 relaxation de tous les arcs dans lordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s) Cycle de coût négatif: réduction encore possible ! Algorithme de Bellman-Ford

40 Bellman-Ford revu…. Soit le graphe G(V,E) Initialiser y i = + pour tous les sommets i Initialiser y s = 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 non Stable alors présence dun circuit de poids négatif

41 s dc b a Exemple 2 Étape 1 relaxation de tous les arcs dans lordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s) s dc b a Algorithme de Bellman-Ford

42 s dc b a Étape 2 relaxation de tous les arcs dans lordre : (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! s dc b a Algorithme de Bellman-Ford

43 Recherche de chemins de coût minimal avec lalgorithme A* Jeux vidéo Animation des personnages non joueurs Déplacement réaliste dun personnage contrôlé par le joueur vers un objectif désigné par le joueur Simulation – vie artificielle Etude du comportement dune foule, du trafic automobile, … Effets spéciaux (scènes de bataille, …)

44 Algorithme A* Coût total (F) = Coût depuis la source(G) + Coût vers la destination(H) G : Coût depuis la source Algorithmes classiques (Ford, Bellman, Dijkstra) H : Coût vers la destination Difficile puisque le reste du chemin est encore inconnu. Principe général : évaluation du coût total dun sommet Pourquoi évaluer un coût vers la destination ? Afin de resserrer lensemble des sommets à explorer en privilégiant les sommets « qui semblent » nous rapprocher de la destination. Remarque Dans le cas dun algorithme de recherche plus classique (Dijsktra), on effectue une recherche exhaustive parmi TOUS les sommets candidats. Conséquence lalgorithme A* est plus performant que nimporte quel autre algorithme puisquil diminue lensemble des sommets à explorer.

45 Algorithme A* Comment évaluer un coût vers la destination ? En utilisant des heuristiques (prédictions) afin dévaluer un coût vers la destination INFERIEUR au coût réel (encore inconnu). À ce titre, A* est un algorithme dit optimiste. Remarque Si lheuristique était supérieur au coût réel, on risquerait de générer un chemin qui ne soit pas minimal. On utilise généralement deux heuristiques, la distance euclidienne et la distance de Manhattan

46 Algorithme A* Distance euclidienne S D 40 H 20 Théorème de Pythagore H 2 = (Coté oppose) 2 + (Coté adjacent) 2 H 2 = = 2000 H = 20 x (5) 1/2

47 Algorithme A* Distance de Manhattan S D Nombre de cellules, en horizontal et en vertical entre la source et la destination. Plus conforme à la nature des déplacements autorisés (haut, bas, gauche, droite)

48 Graphe, lab#7 /** * Algorithme de Warshall */ template Graphe fermetureGraphe(Graphe g)throw(logic_error); Graphe (int nbSommet); Graphe (const Graphe&); Graphe(const Graphe& g, std::vector &); ~Graphe (); Graphe& operator = (const Graphe&); void ajouterSommet(T s) ; void ajouterArc (T s1, T S2); void enleverArc (T s1, T s2); void enleverSommet ( T s); bool sommetExiste(T s); bool arcExiste ( T s1, T s2); int nbSommets(); void affiche(); std::vector listerSommetsGraphe(); int ordreEntreeSommet(T sommet); std::vector listerSommetsAdjacents(T sommet); int ordreSortieSommet(T sommet) ; Algorithme de Warshall {Soit A, un graphe orienté} P A Pour k = 1, 2,..., n Pour i = 1, 2,..., n Pour j = 1, 2,..., n P ij P ij ou (P ik et P kj )

49 Graphe, lab#7 Algorithme de Warshall {Soit A, un graphe orienté} P A Pour k = 1, 2,..., n Pour i = 1, 2,..., n Pour j = 1, 2,..., n P ij P ij ou (P ik et P kj ) template Graphe_Lab7::Graphe fermetureGraphe (Graphe_Lab7::Graphe g) { Graphe fermG(g); vector v = fermG.listerSommetsGraphe(); int nb = fermG.nbSommets(); for (int k = 0; k < nb; k++) for (int i = 0; i < nb; i++) for (int j = 0; j < nb; j++) if (fermG.arcExiste(v[i], v[j]) == false) { if ((fermG.arcExiste(v[i], v[k]) == true) && (fermG.arcExiste(v[k], v[j]) == true)) { fermG.ajouterArc(v[i], v[j]); } return fermG; }


Télécharger ppt "Structures de données IFT-2000 Abder Alikacem Les graphes (3) Semaine 7 Département dinformatique et de génie logiciel Édition Septembre 2009."

Présentations similaires


Annonces Google