Exploration informée
Transcription
Exploration informée
Exploration informée Jerôme Champavère jerome.champavere @ lifl.fr http://www.grappa.univ-lille3.fr/~champavere/?page=Enseignement Stratégies d'exploration informée Exploration « meilleur d'abord » ● ● Best-first search Algorithme d'exploration en arbre (ou en graphe) avec une fonction d'évaluation f(n) – – – ● ● Dépend, en général, de la description du nœud n, de la description du but, de l'information cumulée jusqu'à ce point, et de toute autre connaissance relative au problème (Pearl, 1984) Sélection du nœud avec l'évaluation la plus faible Implémentation via une file de priorité maintenant la frontière dans l'ordre croissant des valeurs de f Choix du nœud qui semble le meilleur, compte-tenu de la fonction d'évaluation Fonction heuristique h(n) : coût estimé du chemin le moins coûteux menant du nœud n à un but Recherche gloutonne ● Greedy search ● Développe le nœud le plus proche de but ● Évaluation des nœuds avec f(n) = h(n) Recherche gloutonne ● Itinéraire : aller de Toulouse à Paris ● Heuristique : distance à vol d'oiseau Bordeaux 498 Brest 504 Clermont-F. 346 Dijon 346 Grenoble 481 Limoges 346 Lyon 392 Marseille 661 Montpellier 595 Nantes 342 Rennes 308 Rouen 111 Toulouse 588 Recherche gloutonne Toulouse 588 1 2 Limoges 346 Bordeaux 498 3 Bordeaux 498 Montpellier 595 Toulouse 588 Nantes 342 Limoges 346 Brest 504 4 Nantes 342 Rennes 308 5 Paris 0 Rouen 108 Recherche gloutonne A 54 63 B 65 C 31 75 E 58 47 D © Editor at Large / Wikimedia Commons Recherche gloutonne ● Similaire à l'exploration en profondeur d'abord ● Ni optimale, ni complète ● Complexité en temps et en espace : O(bm) Exploration A* ● ● « A étoile » Minimisation du coût total estimé de la solution : f(n) = g(n) + h(n) – – – ● g(n) : coût du chemin entre le nœud de départ et le nœud n h(n) : coût estimé du chemin le moins onéreux de n au but f(n) : coût estimé de la solution la moins onéreuse passant par n Équivaut à l'exploration à coût uniforme si h(n) = 0 pour tout n S g(n) f(n) n h(n) G Exploration A* ● Optimalité – – Exploration en arbre : oui si h(n) est admissible, c'est-à-dire si h(n) ne surestime jamais le coût pour atteindre le but Exploration en graphe : oui si h(n) est consistante, càd, pour tout n, n', a, h(n) ≤ coût(n,a,n') + h(n') A 10 8 h(A) = 10 coût(A,A→B,B) + h(B) = 2 + 5 = 7 ⇒ h(A) > coût (A,A→B,B) + h(B) ⇒ inconsistance 2 B 5 7 G 0 Exploration A* ● ● ● Complétude : oui si b est fini et coûts d'étape > 0 Efficacité optimale quelle que soit la fonction heuristique Complexité en temps et en espace : exponentielle dans la longueur de la solution optimale – – A* est généralement à court de mémoire bien avant d'être à court de temps Variantes de A* pour résoudre le problème de l'espace Explorations heuristiques à mémoire limitée IDA* ● ● ● Iterative-Deepening A* Exploration itérative en profondeur adaptée au contexte de l'exploration heuristique Limite utilisée : coût de f (g + h) au lieu de la profondeur RBFS ● ● ● Recursive Best-First Search (Korf, 1993) Exploration « meilleur d'abord » récursive qui n'utilise qu'un espace linéaire Mémorise la valeur f du meilleur chemin alternatif parmi les ancêtres du nœud courant RBFS function RBFS(problème) RBFS-REC(problème,CRÉÉR-NŒUD-ÉTAT-INITIAL(problème),∞) function RBFS-REC(problème,nœud,limite) if TEST-ÉTAT-FINAL(problème,ÉTAT(nœud)) then return SOLUTION(nœud) successeurs ← DÉVELOPPER(nœud,problème) if successeurs est vide then return échec,∞ foreach s ∈ sucesseurs do f[s] ← max(g(s)+h(s),f[nœud]) loop meilleur ← nœud ayant la plus faible valeur f dans successeurs if f[meilleur] > limite then return échec,f[meilleur] alternative ← deuxième plus faible valeur f dans successeurs résultat,f[meilleur] ← RBFR-REC(problème,meilleur, min(limite,alternative)) if résultat ≠ échec then return résultat RBFS ● Un peu plus efficace que IDA* ● Optimal si h(n) est admissible ● Complexité en espace : O(bd) ● Complexité en temps : exponentielle SMA* ● ● Simple Memory-Bounded A* Développe la meilleure feuille jusqu'à ce que la mémoire soit pleine – – Supprime le nœud feuille le moins favorable Comme RBFS, mémorise la valeur du nœud oublié au niveau de son parent SMA* ● ● ● Complétude : oui s'il existe une solution accessible Optimalité : oui s'il existe une solution optimale accessible Compromis espace / temps Fonctions heuristiques — Jeu de taquin Jeu de taquin à 8 pièces ● Facteur de branchement : ≃ 3 ● Coût moyen de la solution : 22 étapes – Exploration exhaustive en profondeur : 322 ≈ 3.1010 états – En mémorisant les états dupliqués : 181 440 états – Mais taquin à 15 pièces : 1013 états 26 étapes Heuristiques pour le jeu de taquin ● ● ● h1 : nombre de pièces mal placées h2 : somme des distances des pièces par rapport à leur position cible suivant la distance de Manhattan h2 domine h1 : h2(n) ≥ h1(n) pour tout n h1 = 8 h2 = 3+1+2+2+2+3+3+2 = 18 Création d'heuristiques Problème relaxé ● ● ● ● ● ● Problème formel : « Une pièce peut passer de la case A à la case B – si A est adjacent à B et – si B est vide. » Problème relaxé – « Une pièce peut passer de la case A à la case B si A est adjacent à B. » : h2 – « Une pièce peut passer de la case A à la case B si B est vide. » (Gaschnig, 1979) – « Une pièce peut passe de la case A à la case B. » : h1 Le coût d'une solution optimale à un problème relaxé est une heuristique admissible pour le problème initial Si l'heuristique dérivée est un coût exact pour le problème relaxé, elle est consistante Les problèmes relaxés doivent pouvoir être résolus facilement, idéalement sans exploration Si l'on dispose d'une collection d'heuristiques admissibles h1,…,hm et qu'aucune ne domine, on peut définir h(n) = max{h1(n),…,hm(n)} Création d'heuristiques Bases de données de motifs ● ● ● ● Définir des heuristiques à partir du coût de la solution d'un sous-problème Mémoriser les coûts des solutions exactes de tous les exemples de sousproblèmes possibles Base de données construite en explorant en amont à partir de l'état final et en enregistrant le coût de chaque nouveau motif rencontré Réduction du nombre de nœuds générés d'un facteur 1000 pour la résolution du problème du taquin à 15 pièces Création d'heuristiques Apprentissage ● ● Définir des heuristiques à partir du coût de chaque solution optimale d'un problème Algorithme d'apprentissage inductif pour construire une fonction h(n) qui prédit les coûts des solutions pour les autres états qui surviennent dans l'exploration Algorithmes d'exploration locale et problèmes d'optimisation Problèmes d'optimisation ● Problèmes dans lesquels le chemin vers le but n'est pas pertinent – – ● Problème jouet : les 8 dames Problèmes du monde réel : conception de circuits intégrés, ordonnancement d'ateliers, de tâches, programmation automatique, optimisation de réseaux de télécommunication, routage de véhicules, etc. Trouver le meilleur état selon une fonction objectif Exploration locale ● ● Algorithmes d'exploration locale – Ne tiennent pas compte des chemins – N'utilisent qu'un seul état courant – Ne s'occupent que du voisinage de l'état courant Avantages par rapports aux algorithmes systématiques – – Consomment très peu de mémoire Trouvent des solutions raisonnables dans des espaces d'états de grande taille ou infinis (continus) Paysage de l'espace des états Exploration par escalade ● ● Hill-climbing Idée générale : « Atteindre le sommet de l'Everest dans un épais brouillard tout en souffrant d'amnésie. » function HILL-CLIMBING(problème) courant ← CRÉÉR-NŒUD-ÉTAT-INITIAL(problème) loop voisin ← un successeur de courant ayant une valeur plus élevée if VALEUR(voisin) ≤ VALEUR(courant) then return ÉTAT(courant) courant ← voisin Exploration par escalade h = 17 h=1 minimum local (5 itérations) Exploration par escalade ● ● Pour quelles raisons l'escalade échoue ? – Maxima locaux – Crêtes – Plateaux et paliers Variantes – Déplacement latéral – Escalade stochastique – Escalade du premier choix – Escalade avec reprise aléatoire Exploration par recuit simulé ● ● ● Simulated annealing Combine escalade (intensification) et parcours aléatoire (diversification) Inspiré de la métallurgie – – Équilibre énergétique lors de la cristallisation des métaux Paramètre de température qui décroît avec avec le temps Exploration par recuit simulé function SIMULATED-ANNEALING(problème,cadence) courant ← CRÉÉR-NŒUD-ÉTAT-INITIAL(problème) for t = 1 to ∞ do T ← cadence[t] if T = 0 then return courant suivant ← un voisin de courant choisi au hasard ∆E ← VALEUR(suivant) – VALEUR(courant) if ∆E > 0 then courant ← suivant else courant ← suivant avec une probabilité de e∆E/T Exploration locale en faisceau ● Local beam search ● Mémorise k états au lieu d'un seul – – – – ● Commence avec k états générés aléatoirement À chaque étape, tous les successeurs des k états sont générés Si l'un d'eux est un but, l'algorithme s'arrête Sinon, il sélectionne les k meilleurs successeurs et recommence Variante stochastique : sélectionne les k successeurs au hasard Algorithme génétique ● ● ● ● Variante de l'exploration en faisceau stochastique États successeurs générés en combinant deux états parents au lieu de modifier un seul état Maintien d'une population de k individus, autrement dit en ensemble de k états Représentation des individus sous forme de chaînes de caractères (généralement 0 et 1) Algorithme génétique 24748552 32752411 24 32752411 327 48552 32748152 24748552 247 52411 24752411 32752411 32752 124 32252124 24415124 24415 411 24415417 Sélection Recombinaison Mutation 23 20 24415124 32543213 11 Population Fonction initiale d'adaptation Algorithme génétique function GENETIC-ALGORITHM(population,ADAPTATION) courant ← CRÉÉR-NŒUD-ÉTAT-INITIAL(problème) do nouvelle_population ← Ø for i = 1 to TAILLE(population) do x ← SÉLECTION-ALÉATOIRE(population,ADAPTATION) y ← SÉLECTION-ALÉATOIRE(population,ADAPTATION) enfant ← REPRODUIRE(x,y) if [petite probabilité aléatoire] then enfant ← MUTER(enfant) nouvelle_population ← nouvelle_population ∪ {enfant} population ← nouvelle_population while un individu convienne suffisamment ou suffisamment de temps s'est écoulé return meilleur individu de le population selon ADAPTATION function REPRODUIRE(x,y) n ← LONGUEUR(x) c ← nombre aléatoire compris entre 1 et n return AJOUTER(SOUS-CHAÎNE(x,1,c),SOUS-CHAÎNE(y,c+1,n)) Exercice Taquin à 8 pièces et A* ● Développer l'algorithme A* pour le problème du taquin à 8 pièces avec l'heuristique h2 puis h1.