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

Documents pareils