Plus courts chemins : Algorithme A*
Transcription
Plus courts chemins : Algorithme A*
Algorithmique Avancée Année 2005-2006 Plus courts chemins : Algorithme A* Safia Kedad-Sidhoum [email protected] Algorithmique AvancéeAnnée 2005-2006 – p. 1/19 Chemins de coût minimum Plus court chemin à origine unique Algorithmique AvancéeAnnée 2005-2006 – p. 2/19 Chemins de coût minimum Plus court chemin à origine unique Plus court chemin à destination unique Algorithmique AvancéeAnnée 2005-2006 – p. 2/19 Chemins de coût minimum Plus court chemin à origine unique Plus court chemin à destination unique Plus court chemin pour un couple de sommets donné Algorithmique AvancéeAnnée 2005-2006 – p. 2/19 Chemins de coût minimum Plus court chemin à origine unique Plus court chemin à destination unique Plus court chemin pour un couple de sommets donné Plus court chemin pour tout couple de sommets Algorithmique AvancéeAnnée 2005-2006 – p. 2/19 Chemins de coût minimum Soit G = (S, A) un graphe orienté avec |S| = n (n est le nombre de sommets), |A| = m (m est le nombre d’arcs). Algorithmique AvancéeAnnée 2005-2006 – p. 3/19 Chemins de coût minimum Soit G = (S, A) un graphe orienté avec |S| = n (n est le nombre de sommets), |A| = m (m est le nombre d’arcs). Chaque arc (x, y) est valué par réel positif ou nul c(x, y) appelé coût de l’arc (x, y). Algorithmique AvancéeAnnée 2005-2006 – p. 3/19 Chemins de coût minimum Soit G = (S, A) un graphe orienté avec |S| = n (n est le nombre de sommets), |A| = m (m est le nombre d’arcs). Chaque arc (x, y) est valué par réel positif ou nul c(x, y) appelé coût de l’arc (x, y). Coût d’un chemin µ = (x1 , x2 , · · · , xq ) noté c(µ) est défini par: q−1 X c(xi , xi+1 ) i=1 Algorithmique AvancéeAnnée 2005-2006 – p. 3/19 Chemins de coût minimum Un sommet source s étant fixé, on note: C(x) l’ensemble des chemins de s à x dans G ; E(x) l’ensemble des chemins élémentaires de s à x dans G. Algorithmique AvancéeAnnée 2005-2006 – p. 4/19 Chemins de coût minimum Un sommet source s étant fixé, on note: C(x) l’ensemble des chemins de s à x dans G ; E(x) l’ensemble des chemins élémentaires de s à x dans G. On pose : λx = inf {c(µ) | µ ∈ C(x)} Algorithmique AvancéeAnnée 2005-2006 – p. 4/19 Problème • λx est-il défini ? Algorithmique AvancéeAnnée 2005-2006 – p. 5/19 Problème • λx est-il défini ? • Si λx est défini, est-il fini ? Algorithmique AvancéeAnnée 2005-2006 – p. 5/19 Problème • λx est-il défini ? • Si λx est défini, est-il fini ? • Si λx est fini, existe-t-il un chemin γ(x) tel que c(γ(x)) = λx ? γ(x) est alors un chemin de coût minimum de s à x dans G Algorithmique AvancéeAnnée 2005-2006 – p. 5/19 Problème • λx est-il défini ? • Si λx est défini, est-il fini ? • Si λx est fini, existe-t-il un chemin γ(x) tel que c(γ(x)) = λx ? γ(x) est alors un chemin de coût minimum de s à x dans G • Comment calculer γ(x) associés aux sommets x pour lesquels un tel chemin existe ? Algorithmique AvancéeAnnée 2005-2006 – p. 5/19 Existence des chemins de coût minimum De tout chemin on peut extraire un chemin élémentaire (Lemme de Koenig). Algorithmique AvancéeAnnée 2005-2006 – p. 6/19 Existence des chemins de coût minimum De tout chemin on peut extraire un chemin élémentaire (Lemme de Koenig). Si µ0 ∈ E(x) est extrait de µ ∈ C(x) alors c(µ0 ) ≤ c(µ) (Non-négativité des coûts). Algorithmique AvancéeAnnée 2005-2006 – p. 6/19 Existence des chemins de coût minimum De tout chemin on peut extraire un chemin élémentaire (Lemme de Koenig). Si µ0 ∈ E(x) est extrait de µ ∈ C(x) alors c(µ0 ) ≤ c(µ) (Non-négativité des coûts). λx est défini si et seulement si E(x) 6= ∅ Si E(x) 6= ∅, alors λx = min {c(µ) | µ ∈ E(x)} et il existe au moins un chemin de coût λx . Algorithmique AvancéeAnnée 2005-2006 – p. 6/19 Algorithme de Dijkstra Les valeurs λx pour les sommets x tels que E(x) 6= ∅ sont calculées successivement lors des étapes d’un parcours de G à partir du sommet s. Algorithmique AvancéeAnnée 2005-2006 – p. 7/19 Algorithme de Dijkstra Les valeurs λx pour les sommets x tels que E(x) 6= ∅ sont calculées successivement lors des étapes d’un parcours de G à partir du sommet s. Parcours interrompu dès que l’on rencontre le premier point de régénération distinct de s. Règle de choix du sommet si pour i ≥ 2. Algorithmique AvancéeAnnée 2005-2006 – p. 7/19 Propriétés de l’Algorithme de Dijkstra On associe à tout sommet de B({s1 , · · · , si−1 } , G) une valeur ei−1 (y) appelée évaluation de y au début de l’étape i. ei−1 (y) = min x∈{s1 ,··· ,si−1 }∩PG (y) λx + c(x, y) avec PG (y) ensemble des prédécesseurs du sommet y dans G. Algorithmique AvancéeAnnée 2005-2006 – p. 8/19 Propriétés de l’Algorithme de Dijkstra Règle de choix du sommet si pour i ≥ 2 : Sommet d’évaluation minimale si ∈ B({s1 , · · · , si−1 } , G) tel que : ∀y ∈ B({s1 , · · · , si−1 } , G) ei−1 (si ) ≤ ei−1 (y) Algorithmique AvancéeAnnée 2005-2006 – p. 9/19 Propriétés de l’Algorithme de Dijkstra Règle de choix du sommet si pour i ≥ 2 : Sommet d’évaluation minimale si ∈ B({s1 , · · · , si−1 } , G) tel que : ∀y ∈ B({s1 , · · · , si−1 } , G) ei−1 (si ) ≤ ei−1 (y) Théorème 2. Si le sommet si est choisi à l’étape i, alors λsi = ei−1 (si ). (l’évaluation correspond au coût minimum d’un chemin de s à si ) Algorithmique AvancéeAnnée 2005-2006 – p. 9/19 Propriétés de l’Algorithme de Dijkstra Règle de choix du sommet si pour i ≥ 2 : Sommet d’évaluation minimale si ∈ B({s1 , · · · , si−1 } , G) tel que : ∀y ∈ B({s1 , · · · , si−1 } , G) ei−1 (si ) ≤ ei−1 (y) Théorème 3. Si le sommet si est choisi à l’étape i, alors λsi = ei−1 (si ). (l’évaluation correspond au coût minimum d’un chemin de s à si ) Propriété 3. Soit L = (s1 , · · · , sp ) un parcours de l’algorithme de Dijkstra, on a λs1 ≤ λs2 · · · ≤ λsp . (Preuve) Algorithmique AvancéeAnnée 2005-2006 – p. 9/19 Algorithme de Dijkstra procédure Dijkstra(G : Graphe, s : sommet) Init(G, s) Répéter n − 1 fois Choisir un sommet ouvert x d’évaluation ∆(x) minimale Examiner(x) FinRépéter Algorithmique AvancéeAnnée 2005-2006 – p. 10/19 Algorithme de Dijkstra - suite procédure Examiner(x : Sommet) Pour tout successeur y de x faire Si ∆(x) + c(x, y) < ∆(y) alors Ajuster − Arborescence(x, y) Ouvrir(y) Finsi Finpour F ermer(x) procédure Ajuster-Arborescence(x, y : Sommet) ∆(y) ← ∆(x) + c(x, y) p(y) ← x Algorithmique AvancéeAnnée 2005-2006 – p. 11/19 Algorithme de Dijkstra - suite Chaque sommet peut être dans trois états : libre, ouvert ou fermé. ∆ : S → IR ∪ {+∞} est une fonction d’évaluation. p : S → S est une fonction de précédence. Algorithmique AvancéeAnnée 2005-2006 – p. 12/19 Algorithme de Dijkstra - suite Chaque sommet peut être dans trois états : libre, ouvert ou fermé. ∆ : S → IR ∪ {+∞} est une fonction d’évaluation. p : S → S est une fonction de précédence. La procédure Init(G, s) « ouvre » le sommet s, « libère » tous les autres sommets de G et initialise ∆(s) à zéro et ∆(x) à +∞ pour tout sommet x de G différent de s. Algorithmique AvancéeAnnée 2005-2006 – p. 12/19 Algorithme de Dijkstra - suite Chaque sommet peut être dans trois états : libre, ouvert ou fermé. ∆ : S → IR ∪ {+∞} est une fonction d’évaluation. p : S → S est une fonction de précédence. La procédure Init(G, s) « ouvre » le sommet s, « libère » tous les autres sommets de G et initialise ∆(s) à zéro et ∆(x) à +∞ pour tout sommet x de G différent de s. Un sommet est ouvert chaque fois que son évaluation décroît. Il est fermé à l’issue de chaque exécution de la procédure Examiner. Un sommet reste libre tant qu’il n’a pas été évalué. Algorithmique AvancéeAnnée 2005-2006 – p. 12/19 Exemple - Algorithme de Dijkstra 1 10 2 s 3 9 5 4 6 7 2 Algorithmique AvancéeAnnée 2005-2006 – p. 13/19 Exemple - Algorithme de Dijkstra 1 10 2 s 3 9 0 5 4 6 7 2 Algorithmique AvancéeAnnée 2005-2006 – p. 13/19 Exemple - Algorithme de Dijkstra 1 10 10 2 s 3 9 0 4 6 7 5 5 2 Algorithmique AvancéeAnnée 2005-2006 – p. 13/19 Exemple - Algorithme de Dijkstra 1 14 8 10 2 s 3 9 0 5 4 6 7 77 5 2 Algorithmique AvancéeAnnée 2005-2006 – p. 13/19 Exemple - Algorithme de Dijkstra 1 8 13 10 2 s 3 9 0 4 6 7 5 77 5 2 Algorithmique AvancéeAnnée 2005-2006 – p. 13/19 Exemple - Algorithme de Dijkstra 1 8 8 9 10 3 2 s 9 0 5 4 6 7 77 5 2 Algorithmique AvancéeAnnée 2005-2006 – p. 13/19 Exemple - Algorithme de Dijkstra Arborescence des plus courts chemins 1 8 8 9 10 3 2 s 9 0 4 6 7 5 77 5 2 Algorithmique AvancéeAnnée 2005-2006 – p. 13/19 Principe de l’algorithme A* A* : Variante de l’algorithme de Dijkstra. Algorithmique AvancéeAnnée 2005-2006 – p. 14/19 Principe de l’algorithme A* A* : Variante de l’algorithme de Dijkstra. Calcul d’un chemin de coût minimum entre un sommet origine s et un sommet destination p. Algorithmique AvancéeAnnée 2005-2006 – p. 14/19 Principe de l’algorithme A* A* : Variante de l’algorithme de Dijkstra. Calcul d’un chemin de coût minimum entre un sommet origine s et un sommet destination p. Fonction d’évaluation par défaut h(x) du coût minimum d’un chemin entre x et p. Algorithmique AvancéeAnnée 2005-2006 – p. 14/19 Principe de l’algorithme A* A* : Variante de l’algorithme de Dijkstra. Calcul d’un chemin de coût minimum entre un sommet origine s et un sommet destination p. Fonction d’évaluation par défaut h(x) du coût minimum d’un chemin entre x et p. Utile pour les graphes de grande dimension. Algorithmique AvancéeAnnée 2005-2006 – p. 14/19 Principe de l’algorithme A* A* : Variante de l’algorithme de Dijkstra. Calcul d’un chemin de coût minimum entre un sommet origine s et un sommet destination p. Fonction d’évaluation par défaut h(x) du coût minimum d’un chemin entre x et p. Utile pour les graphes de grande dimension. Associer à chaque sommet x une approximation f (x) qui tient compte de h(x) et examiner en priorité un sommet ouvert d’approximation minimale. Algorithmique AvancéeAnnée 2005-2006 – p. 14/19 Algorithme A* procédure A*(G : Graphe, s : sommet) Init(G, s) f (s) ← h(s) x←s TantQue x 6= p faire Examiner ∗ (x) Choisir un sommet ouvert x d’approximation f (x) minimale FinTantQue Algorithmique AvancéeAnnée 2005-2006 – p. 15/19 Algorithme A* - suite procédure Examiner*(x : Sommet) Pour tout successeur y de x faire Si ∆(x) + c(x, y) < ∆(y) alors Ajuster − Arborescence(x, y) Ouvrir(y) f (y) ← ∆(y) + h(y) Finsi Finpour F ermer(x) procédure Ajuster-Arborescence(x, y : Sommet) ∆(y) ← ∆(x) + c(x, y) p(y) ← x Algorithmique AvancéeAnnée 2005-2006 – p. 16/19 Exemple - Algorithme A* 6 2 0 4 1 6 2 3 3 5 5 6 76 1 3 5 4 4 1 0 0 5 0 Algorithmique AvancéeAnnée 2005-2006 – p. 17/19 Exemple - Algorithme A* Sommet examiné : 1 66 2 0 4 1 1 6 2 3 5 4 4 76 1 35 3 5 5 10 6 0 0 5 0 Algorithmique AvancéeAnnée 2005-2006 – p. 17/19 Exemple - Algorithme A* Sommet examiné : 3 66 2 0 4 1 1 6 2 3 5 4 47 76 1 35 3 5 5 10 6 0 0 5 0 Algorithmique AvancéeAnnée 2005-2006 – p. 17/19 Exemple - Algorithme A* Sommet examiné : 2 66 2 0 4 1 1 6 2 3 5 4 47 76 1 354 3 5 5 10 6 0 0 5 0 Algorithmique AvancéeAnnée 2005-2006 – p. 17/19 Exemple - Algorithme A* Sommet examiné : 3 66 2 0 4 1 1 6 2 3 5 4 476 76 1 354 3 5 5 10 6 0 0 5 0 Algorithmique AvancéeAnnée 2005-2006 – p. 17/19 Exemple - Algorithme A* Sommet examiné : 6 66 2 0 4 1 1 6 2 3 5 4 476 76 1 354 3 5 5 10 6 08 0 5 0 Algorithmique AvancéeAnnée 2005-2006 – p. 17/19 Exemple - Algorithme A* Sommet examiné : 7 66 2 0 4 1 1 6 2 3 5 4 476 76 1 354 3 5 5 10 6 08 0 5 0 Algorithmique AvancéeAnnée 2005-2006 – p. 17/19 Complexité de l’Algorithme A* Structures de données adéquates pour rechercher le sommet d’approximation minimale. Algorithmique AvancéeAnnée 2005-2006 – p. 18/19 Complexité de l’Algorithme A* Structures de données adéquates pour rechercher le sommet d’approximation minimale. Utilisation d’un Tas T pour gérer l’évolution de B(V, G). V étant l’ensemble des sommets visités Algorithmique AvancéeAnnée 2005-2006 – p. 18/19 Complexité de l’Algorithme A* Structures de données adéquates pour rechercher le sommet d’approximation minimale. Utilisation d’un Tas T pour gérer l’évolution de B(V, G). V étant l’ensemble des sommets visités La priorité d’un élément y du tas T est l’approximation courante du sommet y. Algorithmique AvancéeAnnée 2005-2006 – p. 18/19 Complexité de l’Algorithme A* Structures de données adéquates pour rechercher le sommet d’approximation minimale. Utilisation d’un Tas T pour gérer l’évolution de B(V, G). V étant l’ensemble des sommets visités La priorité d’un élément y du tas T est l’approximation courante du sommet y. Si les additions et comparaisons portant sur les coûts sont de complexité O(1), la complexité de la procédure A∗ (G, s) est O(n + mlogn). Algorithmique AvancéeAnnée 2005-2006 – p. 18/19 Algorithme PAPS Coûts : Nombre réels quelconques. Examen du sommet ouvert "le plus ancien". Utilisation d’une file pour la gestion des sommets ouverts. Algorithme. Exemple. Complexité. Algorithmique AvancéeAnnée 2005-2006 – p. 19/19