Arbres de recherche

publicité
Algorithmes de parcours d’
d’un espace de recherche
• Recherche en profondeur d’abord (DFS) et en largeur (BFS)
• Hill Climbing (descente de gradient)
• Recherche heuristique : Best-First search
Arbres de recherche
Le plus court chemin
– en profondeur ordonnée, en faisceau, du meilleur premier
• Algorithme A* , IDA*, SMA*
• Recherche concurrentielle : jeux
– MIN-MAX, élagage α−β, approfondissement progressif
Jerzy KORCZAK
email : [email protected]
http://lsiit.u-strasbg.fr/afd http://kia.u-strasbg.fr
J.Korczak, ULP
Propriétés
• Complétude
• Complexité en temps
• Complexité en espace
• Optimum
1
Graphes et arbres : rappel
J.Korczak, ULP
2
Exemples
Un graphe orienté G est représenté par un couple (V,E) où V
est une ensemble fini et E une relation binaire sur V.
S est l’ensemble des sommets de G et E est l’ensemble des
arcs de G.
Dans un graphe orienté G(V,E), un chemin de longueur k d’un
sommet u à un sommet v est une séquence de sommets.
Un graphe non orienté acyclique est une forêt et un graphe
non orienté connexe acyclique un est un arbre.
Graphe
contenant un cycle
J.Korczak, ULP
3
Forêt
Arbre
J.Korczak, ULP
4
Graphes et arbres : rappel
Problème de plus courts chemin
Propriétés des arbres
1. Deux sommets quelconques de G(V,E) sont reliés par un unique
chemin élémentaire.
2. G est connexe et IEI = IVI-1.
3. G est connexe, mais si une arrête quelconque est ôtée de E, le
graphe résultant n’est plus connexe.
4. G est acyclique et IEI = IVI-1.
5. G est acyclique, mais si une arrête quelconque est ajoutée à E, le
graphe résultant contient un cycle.
On possède en entrée un graphe orienté pondéré G=(V,E) de
fonction de pondération w: A → ℜ.
Le poids du chemin p = (v0, v1, …,vk) est la somme de ses
arcs :
w(p)= Σ w(vi-1, vi),
i=1,2,…k
• Un arbre enraciné est un arbre dans lequel l’un des sommets se
distingue des autres (la racine)
• Le degré : le nombre de fils du nœud x
• La profondeur : la longueur du chemin entre la racine et le nœud x.
J.Korczak, ULP
5
J.Korczak, ULP
6
1
Parcours des graphes
Exemple: Trouver un chemin de S à G
Eviter de parcourir des cycles !
Convention : initialement les sommets sont tous blancs ; lorsqu’il est rencontré pour la
première fois un sommet est peint en gris ; lorsque tous ses successeurs dans l’ordre
de parcours ont été visités, un sommet est repeint en noir.
5
S
VISITER-PP(G,u,couleur)
couleur[s] GRIS
Pour chaque voisin de v de s faire
si couleur[v]=BLANC alors VISITER-PP(G,v,couleur)
couleur[s] NOIR
7
Parcours en profondeur (depth-first search)
4
4
F
3
E
B
D
A
G
13
C
15
A
15
E
B
S
F
D
F
E
E
B
C
11
C 19
F
G 19
G 25
9
Parcours en largeur (breadth-first search)
2
4
F
3
E
B
D
A
D
13
C
15
A
15
F
E
E
B
C
11
4
3
G
F
J.Korczak, ULP
8
F
G 25
G 17
B
C 19
F
G 19
J.Korczak, ULP
Recherche heuristique (beam search)
0,0
F
G 13
6,9
3,0
W=2 A
E
C
8,9
B
A
6,7
D
10,4
E
F
A
B
S
C
8,9
F
G
D
E
A
B
C
E
10,4
F
G
B
6,9
D
6,7
C
C 17
A
J.Korczak, ULP
G
E
B
S
E
D 14
J.Korczak, ULP
4
2
PL(G)
couleur[s] GRIS
Pour chaque sommet u de G, u≠s faire couleur[u] BLANC
F {s}
Tant que F≠ ∅ faire
u SUPRESSION(F)
Pour chaque voisin de v de u faire
si couleur[v]=BLANC
alors couleur[v] GRIS
INSERTION (F,v)
couleur[s] NOIR
G 17
B
5
Parcours en largeur
C 17
A
C
4
D
J.Korczak, ULP
4
B
3
PP(G)
Pour chaque sommet u de G faire couleur[u] BLANC
Pour chaque sommet u de G faire si couleur[u]=BLANC alors VISITER-PP(G,u,couleur)
2
4
A
Parcours en profondeur
D 14
11
J.Korczak, ULP
10
G
12
2
Plus courts chemins à origine unique
Algorithme de Dijkstra
1
∞
10
But : trouver les plus courts chemins depuis un sommet
origine s et vers n’importe quel autre sommet.
L’a.D. maintient à jour un ensemble V
de sommets de G dont le plus court
chemin à partir de l’origine s est
connu et calculé.
Algorithme de Dijkstra
Algorithme de Bellman-Ford
Algorithme Floyd-Warshall
2
0
3
9
∞
6
∞
2
1
2
0
13
∞
10
10
3
9
SOURCE-UNIQUE-INITIALISATION [G,s]
pour chaque sommet v de G faire
d[v]+∞
; la longueur de chemin
Π[v] NIL
; le prédécesseur de v
d[s] 0
∞
J.Korczak, ULP
14
5
BELLMAN-FORD(G,s, w)
SOURCE-UNIQUE-INITIALISATION [G,s]
Pour i 1 à |S|-1 faire
Pour chaque arc (u,v)∈A faire
RELACHER(u,v,w)
Pour chaque arc (u,v) A faire
si d[v]> d[u] + w(u,v) alors envoyer FAUX
renvoyer VRAI
DIJKSTRA(G,w,s)
SOURCE-UNIQUE-INITIALISATION [G,s]
E∅
FV
Tant que F≠∅ faire
u EXTRAIRE-MIN(F)
; détermine la complexité → Θ(|F|)=O(|V|)
E E ∪ {u}
pour chaque arc (u,v) de G faire ; la complexité O(|V|2+ |A|) = O(|S|2
RELACHER(u,v,w)
ie itération
A la fin de la
de la première
boucle, les plus courts chemins contenant
au plus i arcs sont connus.
15
Algorithme de Floyd-Warshall
∞
6
L’a.B-F renvoie un booléen indiquant si le
graphe contient ou non un circuit de poids
strictement négatif accessible à partir de
l’origine.
RELACHER(u,v,w)
si d[v] > d[u] + w(u,v) alors
d[v] d[u] + w(u,v)
Π[v] u
6
2
Algorithme de Bellman-Ford
Algorithme de Dijkstra
4
7
5
5
J.Korczak, ULP
4
7
5
A chaque itération, l’algorithme choisit
parmi les sommets successeurs – le
sommet u dont l’estimation de plus
court chemin est minimale.
J.Korczak, ULP
∞
∞
-2
-3
8
0
7
7
-4
2
∞
∞
9
5
6
6
4
-2
8
0
-3
7
2
7
7
9
J.Korczak, ULP
-4
2
16
Algorithme de Floyd-Warshall
D(0) =
0
∞
∞
2
∞
3
0
4
∞
∞
8
∞
0
-5
∞
∞ -4
1 7
∞ ∞
0 ∞
6 0
D(1) =
0
∞
∞
2
∞
3
0
4
5
∞
8
∞
0
-5
∞
∞ -4
1 7
∞ ∞
0 -2
6 0
D(2)
0
∞
∞
2
∞
3
0
4
5
∞
8
∞
0
-5
∞
2 -4
1 7
5 11
0 -2
6 0
Principe de la programmation dynamique
FLOYD-WARSHALL(W)
n lignes(W)
D(0) W
Pour k 1 à n faire
Pour i 1 à n faire
Pour j 1 à n faire
di,jk min(di,jk-1 , di,kk-1 + dk,jk-1 )
renvoyer D(n)
2
3
7
8
1
-4
2
5
4
6
3
1 -5
4
La complexité : Θ(n3)
=
…
J.Korczak, ULP
17
J.Korczak, ULP
18
3
Téléchargement