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 1 Toulouse 588 2 Bordeaux 498 Montpellier 595 Limoges 346 3 Nantes 342 Toulouse 588 Bordeaux 498 Limoges 346 4 Rennes 308 Brest 504 Nantes 342 5 Paris 0 Rouen 108
Recherche gloutonne 54 A 63 B 65 31 75 C 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(b m)
Exploration A* «A étoile» Minimisation du coût total estimé de la solution : f(n) = g(n) + h(n) S g(n) : coût du chemin entre le nœud de départ et le nœud n g(n) h(n) : coût estimé du chemin le moins onéreux de n au but n f(n) 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 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') 2 A 10 B 5 7 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 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 h 1 : nombre de pièces mal placées h 2 : somme des distances des pièces par rapport à leur position cible suivant la distance de Manhattan h 2 domine h 1 : h 2 (n) h 1 (n) pour tout n h 1 = 8 h 2 = 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.» : h 2 «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.» : h 1 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 h 1,,h m et qu'aucune ne domine, on peut définir h(n) = max{h 1 (n),,h m (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 24 32752411 327 48552 32748152 32752411 23 24748552 247 52411 24752411 24415124 20 32752411 32752 124 32252124 32543213 11 24415124 24415 411 24415417 Population initiale Fonction d'adaptation Sélection Recombinaison Mutation
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 h 2 puis h 1.