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