Algorithmes de recherche non informée et informée
IntermédiaireUnité 2 sur 10 de la formation Formation : Intelligence artificielle : agents, recherche et apprentissage
Ce que tu vas apprendre
- Transforme un problème en un espace d’états qu’un algorithme peut explorer, suis le développement d’un arbre par la procédure générale de recherche et compare les algorithmes selon leur complétude, leur optimalité en coût, leur temps et leur consommation de mémoire.
- Décrire un problème de recherche et son espace d’étatsNomme les composantes d’un problème de recherche, représente son espace d’états par un graphe, choisis un niveau d’abstraction utile et estime la taille de l’espace.
- Développer un arbre de recherche avec l’algorithme général de rechercheUtilise les nœuds, la frontière et l’ensemble des états atteints pour expliquer comment un algorithme développe un arbre de recherche, évite de répéter du travail et reconstitue le chemin solution.
- Mesurer et comparer les performances des algorithmes de rechercheÉvalue tout algorithme de recherche selon sa complétude, son optimalité en coût, son temps et sa mémoire, exprime son coût avec les paramètres b, d, m, C* et ε, et comprends pourquoi la croissance exponentielle limite la recherche non informée.
- Décrire un problème de recherche et son espace d’états
- Exécute à la main les recherches en largeur d’abord, à coût uniforme, en profondeur d’abord et par approfondissement itératif, explique leurs garanties et leurs coûts, puis choisis la stratégie adaptée à un problème.
- Exécuter une recherche en largeur d’abordExplore un espace d’états couche par couche avec une file FIFO, suis l’algorithme sur une petite carte et indique quand il est complet et optimal en coût.
- Trouver le chemin de coût minimal par recherche à coût uniformeDéveloppe les nœuds par ordre de coût de chemin à l’aide d’une file de priorité, suis le déroulement de l’algorithme et explique pourquoi il est optimal en coût et quel est son coût.
- Économiser la mémoire avec la recherche en profondeur d’abord et l’approfondissement itératifSuis le déroulement d’une recherche en profondeur d’abord, utilise une profondeur limite et explique comment l’approfondissement itératif associe la consommation de mémoire de la recherche en profondeur aux garanties de la recherche en largeur.
- Comparer les stratégies de recherche non informée et en choisir uneCompare les stratégies de recherche non informée, ajoute la recherche bidirectionnelle et choisis une stratégie adaptée à un problème donné.
- Exécuter une recherche en largeur d’abord
- Utilise une estimation heuristique pour orienter la recherche, suis le déroulement de la recherche gloutonne et de A*, démontre quand A* est optimal et utilise des variantes qui font un compromis entre optimalité, rapidité et mémoire.
- Utiliser une heuristique dans une recherche gloutonneDéfinis une fonction heuristique, suis le déroulement d’une recherche gloutonne et explique pourquoi elle est rapide mais peut renvoyer une mauvaise solution.
- Trouver des chemins optimaux avec la recherche A*Suis le déroulement de A* avec f = g + h, explique pourquoi une heuristique admissible rend cet algorithme optimal en coût et observe comment une meilleure heuristique élague la recherche.
- Faire un compromis entre optimalité, rapidité et consommation de mémoireUtilise A* pondéré, la recherche en faisceau et des versions de A* à mémoire limitée comme IDA* lorsque A* classique est trop lent ou demande trop de mémoire, et indique à quoi chacune renonce.
- Utiliser une heuristique dans une recherche gloutonne
- Vérifie l’admissibilité et la cohérence d’une heuristique, construis des heuristiques admissibles à partir de problèmes relaxés et de sous-problèmes, puis compare les heuristiques selon leur dominance et leur facteur de branchement effectif.
- Vérifier l’admissibilité et la cohérence des heuristiquesVérifie qu’une heuristique ne surestime jamais et respecte l’inégalité triangulaire, puis explique pourquoi chaque propriété compte pour A*.
- Construire des heuristiques admissibles à partir de problèmes relaxésDéduis des heuristiques en supprimant des restrictions d’un problème, calcule-les pour le taquin à 8 cases et construis-en de plus efficaces à partir de sous-problèmes et en combinant des heuristiques.
- Comparer les heuristiques selon la dominance et le facteur de branchement effectifDétermine laquelle de deux heuristiques est meilleure à l’aide de la dominance, mesure une heuristique avec le facteur de branchement effectif et compare sa précision à son coût de calcul.
- Vérifier l’admissibilité et la cohérence des heuristiques
- Résous des problèmes d’optimisation en te déplaçant dans un paysage d’états complets, utilise la recherche par escalade et ses variantes, et échappe aux optima locaux grâce au recuit simulé et aux méthodes à population.
- Décrire la recherche locale et le paysage de l’espace d’étatsExplique quand le chemin n’a pas d’importance, formule un problème à l’aide d’états complets et décris les caractéristiques du paysage qui rendent la recherche locale difficile.
- Améliorer les états par recherche par escaladeExécute une recherche par escalade à plus forte pente, reconnais les situations où elle se bloque et améliore-la avec des déplacements latéraux, des choix aléatoires, des redémarrages aléatoires et la recherche locale en faisceau.
- Échapper aux optima locaux avec le recuit simulé et les algorithmes génétiquesAccepte certains déplacements vers des états moins bons avec une probabilité qui diminue lorsque la température baisse, conçois un schéma de refroidissement et utilise des populations avec croisement et mutation.
- Décrire la recherche locale et le paysage de l’espace d’états
Algorithmes de recherche : cours
1Formuler des problèmes de recherche et évaluer les algorithmes de recherche
Un algorithme de recherche a besoin d’une description précise de ce qui peut se produire et de ce qui constitue une réussite. Une carte routière et un taquin semblent différents, mais tous deux peuvent être décrits à l’aide d’états, d’actions, de buts et de coûts. La recherche construit ensuite des chemins dans cet espace. Distinguer un état d’un nœud de recherche clarifie le traitement des doublons ; distinguer la complétude de l’optimalité en coût permet de comparer les algorithmes de façon pertinente.
1.1 Décrire un problème de recherche et son espace d’états
Un problème de recherche décrit des choix avant qu’un algorithme ne commence à les faire. Sa formulation détermine à la fois ce que signifie une solution et le nombre de possibilités que l’algorithme doit examiner.
Définir le problème
Il comporte six éléments :
- Les états décrivent les situations possibles.
- L’état initial est celui où la recherche commence.
- Les actions sont les choix disponibles dans un état.
- Le modèle de transition, , donne l’état après l’action .
- Le test de but reconnaît un état acceptable.
- La fonction de coût d’action, , attribue un coût à chaque étape.
Tous les coûts d’action sont ici strictement positifs. Une solution à un problème de recherche de chemin est une séquence d’actions qui mène à un but. Additionne les coûts de ses actions pour obtenir son coût de chemin. Une solution optimale en coût minimise cette somme. Nommer simplement la destination n’indique pas à un agent comment l’atteindre.
Formuler le taquin à 8 cases
Une grille contient huit tuiles numérotées et une case vide. L’état indique les neuf positions. L’état initial est la configuration fournie ; le but est « 1 2 3 / 4 5 6 / 7 8 case vide ». Une action déplace la case vide à gauche, à droite, en haut ou en bas lorsque ce déplacement reste dans la grille. La transition échange la case vide avec la tuile voisine, et chaque déplacement coûte 1. Un coin permet deux actions ; le centre en permet quatre.
Une solution est une séquence comme « gauche, haut, droite », si ces déplacements sont autorisés et atteignent le but. Comme chaque déplacement a le même coût, minimiser le coût revient à minimiser le nombre de déplacements.
Choisir l’espace d’états
Représente les états par les sommets d’un graphe orienté et les actions par des arcs associés à leur coût. Une route à double sens donne deux arcs orientés. Pour une recherche d’itinéraire, un état peut être le lieu courant et le coût d’une étape peut être la distance routière en kilomètres.
L’abstraction laisse de côté les détails sans importance. La musique qui joue dans une voiture n’a pas besoin de faire partie d’un état pour un itinéraire. Une solution abstraite doit rester réalisable. Supprimer un détail qui change les actions autorisées modifierait le problème au lieu de simplement simplifier sa description.
La formulation peut économiser plus de travail qu’une file plus rapide. Placer huit dames sur n’importe quelles cases vides donne séquences ordonnées de placement possibles. Placer chaque nouvelle dame dans la colonne vide la plus à gauche, sur une case non attaquée, laisse 2 057 états accessibles. Ce sont deux constructions différentes d’une même condition de but.
Générer les possibilités au besoin
Le taquin à 8 cases possède états accessibles depuis un départ fixé. Le taquin à 15 cases en possède . Une représentation complète des 8 dames avec une dame par colonne comporte états.
Ces espaces sont généralement fournis de façon implicite : la recherche reçoit un état initial et des procédures pour les actions et les transitions. Elle génère la partie pertinente au cours de son exécution. Pour un problème de chemin, conserve la séquence d’actions. Pour un problème d’optimisation comme le placement des dames, la disposition finale elle-même peut être la réponse.
Points clés
- Un problème de recherche précise les états, un départ, les actions, les transitions, un test de but et les coûts des actions.
- Une solution de chemin est une séquence d’actions ; son coût est la somme des coûts de ses étapes.
- Une abstraction doit préserver la possibilité de réaliser ses solutions.
- Un espace d’états implicite est généré au besoin à partir des actions et des transitions.
- La formulation peut réduire considérablement le nombre d’états ou de chemins examinés.
1.2 Développer un arbre de recherche avec l’algorithme général de recherche
L’espace d’états décrit ce qui est possible. L’arbre de recherche représente les chemins que l’algorithme a essayés. Plusieurs nœuds peuvent décrire le même état parce qu’ils y sont arrivés par des chemins différents.
Stocker un chemin dans un nœud
Un nœud stocke un état, son nœud parent, l’action issue de ce parent et le coût de chemin . La profondeur peut aussi être stockée. La racine n’a pas de parent et son coût de chemin est de 0. Développer un nœud consiste à appliquer toutes les actions autorisées à son état et à générer ses enfants.
Sur une carte à double sens, les chemins « S, A » et « S, B, C, A » aboutissent au même état mais donnent des nœuds différents. Même une carte finie peut générer un arbre de recherche infini : « S, A, S, A, … » produit sans cesse des chemins plus longs.
La frontière contient les nœuds générés qui attendent d’être développés. L’ensemble des états atteints enregistre les états générés et le meilleur nœud trouvé pour chacun. Il comprend aussi bien les états encore dans la frontière que ceux déjà développés. Un ensemble fermé ou exploré désigne généralement seulement les états développés.
Exécuter la procédure générale du meilleur d’abord
- Placer la racine dans la frontière et la table des états atteints.
- Si la frontière est vide, renvoyer un échec.
- Retirer le nœud dont la valeur d’évaluation est la plus faible.
- Si son état est un but, renvoyer ce nœud.
- Le développer. Ajouter chaque nouvel état ; pour un état déjà atteint, ne remplacer son nœud enregistré que si le nouveau chemin est moins coûteux.
- Recommencer à l’étape 2.
Un chemin moins coûteux vers un état déjà développé peut nécessiter sa réouverture. Les retours de coût égal n’apportent aucune amélioration. Avec un tas, une ancienne entrée peut rester physiquement présente ; elle doit être reconnue comme périmée et ignorée lors de son extraction.
La règle de gestion de la frontière détermine la stratégie. Une file FIFO sélectionne les nœuds de faible profondeur pour la recherche en largeur d’abord. Une pile LIFO sélectionne les nœuds profonds pour la recherche en profondeur d’abord. Des files de priorité ordonnées selon , et donnent respectivement la recherche à coût uniforme, la recherche gloutonne et A*.
Suivre les nœuds sur la carte routière
Utilise ces routes à double sens, avec des distances en kilomètres : S–A 2, S–B 3, S–D 9, A–C 4, B–C 1, B–D 6, C–G 5 et D–G 2. Pars de S et cherche G. Départage les ex æquo par ordre alphabétique.
Le développement de S génère A de coût 2, B de coût 3 et D de coût 9. Chacun a S pour parent. La frontière contient A, B et D ; la table des états atteints contient aussi S. Plus tard, C peut être atteint par A pour un coût de 6 ou par B pour un coût de 4. Ce sont deux nœuds pour un seul état, et le moins coûteux doit représenter C.
Pour reconstituer une solution, suis à rebours les liens vers les parents depuis le nœud but renvoyé et inverse les actions. Mettre à jour le coût sans mettre à jour le parent laisserait un chemin qui ne correspondrait pas au coût indiqué.
Décider quoi mémoriser
La recherche dans un graphe mémorise les états atteints pour éviter de répéter du travail. La recherche en arbre ne possède pas de table globale des états atteints ; elle peut se limiter à rejeter les cycles sur le chemin courant. Elle économise de la mémoire mais peut générer le même état par de nombreux chemins.
La procédure générale teste les buts à l’extraction. La recherche en largeur d’abord peut les tester à la génération, car celle-ci suit l’ordre des profondeurs. Une recherche fondée sur le coût doit attendre l’extraction : le premier but généré peut avoir un chemin plus coûteux qu’un but trouvé plus tard.
Points clés
- Un état est une situation ; un nœud représente un chemin vers un état.
- La frontière contient les nœuds générés non développés ; la table des états atteints mémorise aussi les états développés.
- Conserve le chemin moins coûteux vers un état, avec le lien correspondant vers son parent.
- La recherche dans un graphe évite de répéter du travail ; la recherche en arbre économise de la mémoire.
- La recherche à coût uniforme et A* testent un but lorsqu’il est retiré de la frontière.
- Les liens vers les parents permettent de reconstituer la séquence d’actions à partir du nœud but renvoyé.
1.3 Mesurer et comparer les performances des algorithmes de recherche
Un algorithme peut être fiable tout en étant trop coûteux à exécuter. Évalue ses garanties séparément de sa consommation de ressources, puis vérifie si ces garanties correspondent au problème que tu dois réellement résoudre.
Poser quatre questions différentes
La complétude signifie trouver une solution dès qu’il en existe une. Dans un espace d’états accessibles fini, épuiser toutes les possibilités peut aussi prouver l’échec. Un espace infini sans solution peut être exploré indéfiniment, même par un algorithme complet.
L’optimalité en coût signifie renvoyer une solution dont le coût de chemin est le plus faible. Elle ne dit rien de la vitesse d’exécution de l’algorithme. Une méthode peut trouver une solution de façon fiable tout en renvoyant un itinéraire coûteux.
La complexité temporelle compte les nœuds générés ou développés. Précise quel décompte est utilisé lorsque tu compares des mesures. La complexité spatiale mesure le nombre maximal de nœuds conservés simultanément, y compris la frontière et les informations de recherche stockées.
Identifier les paramètres
Pour un espace de recherche implicite, utilise :
| Symbole | Signification |
|---|---|
| Facteur de branchement maximal : nombre de successeurs par nœud | |
| Profondeur d’une solution de profondeur minimale | |
| Profondeur maximale d’un chemin, éventuellement infinie | |
| Coût d’une solution optimale | |
| Minorant strictement positif du coût d’action |
Pour un graphe explicite déjà en mémoire, les nombres de sommets et d’arcs sont généralement plus utiles. Une borne de parcours en et répond à une question différente de celle d’une borne pour la génération d’un arbre encore inconnu.
Comprendre pourquoi la profondeur coûte cher
Un arbre complet jusqu’à la profondeur contient
nœuds pour . Avec un facteur de branchement de 10 et une profondeur de 5, cela fait 111 111 nœuds, racine comprise. Augmenter la profondeur de un ajoute une couche qui comporte dix fois plus de nœuds que la précédente.
À raison d’un million de nœuds par seconde et de 1 kilooctet par nœud, les ordres de grandeur changent rapidement :
| Profondeur | Nombre approximatif de nœuds | Temps | Mémoire |
|---|---|---|---|
| 6 | 1,1 million | 1 seconde | 1,1 Go |
| 8 | 111 millions | 2 minutes | 111 Go |
| 10 | 11 milliards | 3 heures | 11 To |
| 12 | 1,1 billion | 13 jours | 1,1 Po |
Ce sont des unités de stockage décimales : 1 Go vaut octets. La mémoire peut rendre une recherche impossible bien avant que son temps d’exécution ne semble déraisonnable.
Lire les garanties avec leurs conditions
La recherche en largeur d’abord atteint à terme toute profondeur finie lorsque le branchement est fini. La recherche en profondeur d’abord peut passer un temps infini sur une seule branche et ne jamais essayer un but proche. Cette différence explique leurs résultats en matière de complétude.
La recherche en largeur d’abord trouve un chemin avec le moins d’actions. Si un itinéraire de deux étapes coûte 11 km et un itinéraire de trois étapes coûte 9 km, l’itinéraire le moins profond n’est pas optimal en coût. Des coûts d’étape égaux font correspondre profondeur et coût ; des coûts différents peuvent les dissocier.
Une borne grand O dans le pire des cas ne prédit pas chaque exécution. Deux méthodes ayant la même borne peuvent différer par leurs constantes, leur traitement des doublons et le nombre de branches utiles. Une heuristique peut grandement améliorer une exécution habituelle sans supprimer le pire des cas exponentiel.
Points clés
- La complétude concerne la découverte d’une solution ; l’optimalité en coût concerne le coût de la solution renvoyée.
- Un espace infini sans solution ne conduit pas nécessairement à un signalement d’échec qui met fin à la recherche.
- Le facteur de branchement et la profondeur expliquent la croissance exponentielle des arbres de recherche implicites.
- Mesure le pic de mémoire ainsi que le nombre de nœuds ; le stockage est souvent la première limite.
2Effectuer une recherche sans connaissances du domaine
Sans heuristique, une recherche doit choisir quoi explorer à partir de la profondeur ou du coût déjà engagé. Une file, une pile et une file de priorité ordonnée selon le coût peuvent donc produire des itinéraires très différents sur une même carte. Suis les modifications de leur frontière pour comprendre pourquoi leurs garanties diffèrent. L’approfondissement itératif économise de la mémoire en répétant le travail aux faibles profondeurs, tandis que la recherche bidirectionnelle peut réduire la profondeur lorsque le but et les actions inverses sont disponibles.
2.1 Exécuter une recherche en largeur d’abord
La recherche en largeur d’abord explore par couches. Le prochain nœud développé est celui de plus faible profondeur qui attend encore : ainsi, chaque chemin à une action est examiné avant qu’un chemin à deux actions soit développé.
Maintenir l’ordre de la file
La frontière fonctionne selon le principe premier entré, premier sorti : retirer en tête et ajouter les enfants en fin de file. Enregistre les états lorsqu’ils sont générés. Si l’état d’un enfant a déjà été atteint, ignore-le ; sinon, deux parents différents pourraient placer le même état dans la file.
Teste l’état initial avant la recherche. Pour les nœuds suivants, la recherche en largeur d’abord peut utiliser un test de but à la génération. Le premier but généré est de profondeur minimale, car l’algorithme génère les enfants couche par couche. L’ordre au sein d’une couche peut départager des solutions de même profondeur, mais ne peut pas faire apparaître en premier une solution plus profonde.
Suivre le déroulement sur la carte
Les routes à double sens sont S–A 2, S–B 3, S–D 9, A–C 4, B–C 1, B–D 6, C–G 5 et D–G 2 km. Pars de S, cherche G et génère les voisins par ordre alphabétique. Dans le tableau, le prochain nœud à retirer est à gauche.
| Nœud développé | États nouvellement atteints | File après développement |
|---|---|---|
| S | A, B, D | A, B, D |
| A | C | B, D, C |
| B | Aucun | D, C |
| D | G, qui satisfait le test de but | La recherche s’arrête |
Lorsque B est développé, C et D sont déjà atteints. Ils ne changent pas de place dans la file. Lorsque D génère G, sa chaîne de parents est G–D–S. Inverse-la pour retrouver S–D–G, avec deux routes et une distance totale de km.
C a déjà été généré, mais n’a pas été développé. Son itinéraire vers G comporterait trois routes. La recherche en largeur d’abord peut s’arrêter sans l’explorer, car trois routes ne peuvent pas améliorer le nombre d’actions d’une solution à deux routes.
Savoir ce que le résultat minimise
La recherche en largeur d’abord est complète pour un branchement fini, même si l’espace est infini : chaque couche finie est traitée avant la suivante. Elle est optimale en coût lorsque toutes les actions ont le même coût. Dans un taquin où chaque déplacement coûte 1, une solution de profondeur minimale est aussi une solution de coût minimal.
Sur cette carte routière, S–B–C–G coûte km. La recherche en largeur d’abord renvoie l’itinéraire de 11 km parce que la distance n’est pas son critère d’ordonnancement. Il faut donc préciser l’unité de « plus court chemin » : le moins de routes et le moins de kilomètres sont des objectifs différents.
Tenir compte de la mémoire
Avec un test de but à la génération, la recherche en largeur d’abord a des complexités temporelle et spatiale en . Elle peut générer presque tous les nœuds jusqu’à la profondeur du but et conserver la frontière ainsi que les informations sur les états atteints. Si les buts ne sont testés qu’à l’extraction, le développement d’autres nœuds de profondeur peut générer la profondeur , ce qui donne la borne habituelle pour cette version.
Avec un facteur de branchement de 10 et 1 kilooctet par nœud, stocker un arbre jusqu’à la profondeur 10 prend environ 11 To. La recherche en largeur d’abord est utile pour les problèmes de faible profondeur à coûts égaux lorsque la mémoire est suffisante, comme les chemins à nombre minimal de sauts dans un réseau ou les taquins à nombre minimal de déplacements. Une file FIFO n’utilise pas les coûts numériques des arcs, même lorsqu’ils sont inscrits sur le graphe.
Points clés
- La recherche en largeur d’abord développe le nœud de plus faible profondeur à l’aide d’une file FIFO.
- Enregistre les états atteints à la génération pour éviter les entrées en double dans la file.
- Le premier but généré comporte le moins d’actions.
- Des coûts d’action égaux rendent la recherche en largeur d’abord optimale en coût.
- Avec le test de but à la génération, les complexités temporelle et spatiale sont en .
2.2 Trouver le chemin de coût minimal par recherche à coût uniforme
La recherche à coût uniforme ordonne les chemins selon le coût déjà engagé. Elle peut laisser de côté une destination proche mais coûteuse pendant qu’elle examine des itinéraires plus longs composés d’étapes peu coûteuses.
Retirer le chemin le moins coûteux
Pose et utilise une file de priorité. Lorsqu’un développement trouve un chemin moins coûteux vers un état atteint, mets à jour son coût et son parent. Un chemin de coût égal n’améliore pas l’enregistrement. La recherche à coût uniforme est la forme de recherche de l’algorithme de Dijkstra ; elle s’arrête lorsqu’elle retire un but.
Le test de but à l’extraction est essentiel. Générer un but prouve qu’un itinéraire existe. Retirer ce but en tant que nœud le moins coûteux de la frontière prouve qu’aucun itinéraire inachevé moins coûteux ne peut le surpasser, puisque les coûts des actions sont strictement positifs.
Suivre le déroulement sur la carte
Utilise les routes à double sens S–A 2, S–B 3, S–D 9, A–C 4, B–C 1, B–D 6, C–G 5 et D–G 2 km. Départage les coûts égaux par ordre alphabétique. Les entrées de la frontière ci-dessous indiquent l’état et le coût du chemin.
| Nœud retiré | Mise à jour | Frontière après mise à jour |
|---|---|---|
| S, 0 | Atteindre A, B, D | A 2 ; B 3 ; D 9 |
| A, 2 | Atteindre C par A | B 3 ; C 6 ; D 9 |
| B, 3 | Améliorer C par B | C 4 ; D 9 |
| C, 4 | Atteindre G | D 9 ; G 9 |
| D, 9 | G par D coûte 11 ; garder 9 | G 9 |
| G, 9 | Le test de but réussit | Renvoyer |
Le remplacement de C est décisif : est meilleur que . Le parent de G est C, celui de C est B et celui de B est S. L’itinéraire renvoyé S–B–C–G coûte 9 km. D est retiré avant G uniquement parce que la règle de départage est alphabétique.
Si une route directe S–G de 12 km était ajoutée, S générerait immédiatement un but. Un test à la génération renverrait 12 km avant de découvrir l’itinéraire de 9 km. La file de priorité ne peut pas préserver l’optimalité si la règle d’arrêt la contourne.
Expliquer la garantie
Avec un branchement fini et un coût pour chaque action au moins égal à un certain , seul un nombre fini d’étapes d’un chemin peut tenir sous une borne de coût fixe. La recherche à coût uniforme finit donc par retirer un but dès qu’il en existe un. Les coûts strictement positifs garantissent que prolonger un chemin ne peut pas le rendre moins coûteux, ce qui étaye la preuve d’optimalité.
Les coûts nuls demandent de l’attention. La recherche en arbre peut parcourir indéfiniment un cycle de coût nul. La recherche dans un graphe rejette les retours de coût égal vers un même état, mais une chaîne infinie d’états distincts dont le coût cumulé est borné peut encore retarder indéfiniment un but. Des coûts d’étape négatifs invalident l’argument habituel d’optimalité de la recherche à coût uniforme.
Comprendre le coût
La borne habituelle des complexités temporelle et spatiale dans le pire des cas est . Sur cette carte, et , ce qui donne . C’est une borne large, et non le nombre de nœuds réellement développés sur la carte à six états.
De nombreux chemins peu coûteux menant à des impasses peuvent obliger la recherche à coût uniforme à effectuer beaucoup de travail avant de prendre une action utile coûteuse. Lorsque tous les coûts d’étape sont égaux, son test de but à l’extraction donne la borne habituelle . A* avec effectue exactement les mêmes comparaisons de priorité que la recherche à coût uniforme.
Points clés
- La recherche à coût uniforme ordonne la frontière selon le coût de chemin cumulé .
- Renvoie un but à l’extraction, lorsqu’il correspond au chemin en attente le moins coûteux.
- Remplace un itinéraire plus coûteux vers un état atteint, y compris son parent.
- Un branchement fini et un minorant strictement positif des coûts d’étape assurent la complétude.
- La recherche à coût uniforme est optimale en coût dans le modèle à coûts strictement positifs.
2.3 Économiser la mémoire avec la recherche en profondeur d’abord et l’approfondissement itératif
La recherche en profondeur d’abord suit une branche avant d’essayer les autres. Ce choix peut réduire considérablement la mémoire nécessaire, mais une branche mal choisie peut retarder l’examen de toutes les autres possibilités.
Suivre une branche en profondeur
La recherche en profondeur d’abord utilise une pile dernier entré, premier sorti. Dans une version en arbre, rejette les états déjà présents sur le chemin courant pour éviter de former immédiatement un cycle. Stocke le chemin courant et les frères non développés de ses nœuds. Pour essayer les successeurs par ordre alphabétique avec une pile, empile-les dans l’ordre alphabétique inverse.
Sur la carte à double sens S–A 2, S–B 3, S–D 9, A–C 4, B–C 1, B–D 6, C–G 5 et D–G 2 km, pars de S et cherche G. En essayant les voisins par ordre alphabétique et en testant les buts à l’extraction, on obtient S, A, C, B, D, G. En C, B est le premier voisin qui ne figure pas déjà sur le chemin. L’itinéraire renvoyé S–A–C–B–D–G coûte km.
La recherche en profondeur d’abord n’est pas optimale en coût. Elle est complète dans un espace fini avec détection des cycles sur le chemin, mais elle peut suivre une branche infinie indéfiniment. Sa complexité temporelle dans le pire des cas est en et le stockage des chemins et des frères nécessite un espace en . Le retour arrière qui génère un enfant à la fois réduit le stockage à . Avec un facteur de branchement de 10 et une profondeur maximale de 12, le stockage du chemin et des frères représente environ 120 nœuds, contre environ un billion pour la recherche en largeur d’abord jusqu’à la profondeur 12. Une table globale des états atteints utiliserait de la mémoire supplémentaire.
Limiter la profondeur
La recherche à profondeur limitée cesse de développer les nœuds à la profondeur . Un but à cette profondeur peut tout de même être reconnu. Elle distingue trois résultats :
- Une solution a été trouvée.
- Coupure : la profondeur limite a empêché une recherche complète.
- Échec : les possibilités pertinentes ont été épuisées sans but ni coupure.
Une coupure ne prouve pas qu’il n’existe aucune solution. Si le but de profondeur minimale est à la profondeur 7, une limite de 5 ne permet pas de l’atteindre. Dans le pire des cas, les complexités temporelle et spatiale sont respectivement en et .
Augmenter progressivement la limite
La recherche par approfondissement itératif exécute des recherches à profondeur limitée avec les limites 0, 1, 2 et ainsi de suite. Elle trouve une solution de profondeur minimale sans stocker une frontière de recherche en largeur. Avec un branchement fini, elle est complète ; avec des coûts d’action égaux, elle est optimale en coût. Sa complexité temporelle est en et sa complexité spatiale en .
La plupart des nœuds d’un arbre large se trouvent dans la dernière couche ; répéter les couches supérieures est donc souvent peu coûteux. Pour et , comptons les nœuds générés sous la racine :
La recherche en largeur d’abord génère 111 110 nœuds de ce type jusqu’à la profondeur 5. L’approfondissement itératif effectue environ 11 % de générations en plus tout en ne stockant que les données d’une recherche en profondeur. Les visites répétées de la racine sont exclues de ces deux décomptes particuliers.
Pour des facteurs de branchement supérieurs à 1, le surcoût dans un arbre large tend vers le facteur . Cet avantage est moindre pour une chaîne étroite, où les préfixes répétés dominent. L’approfondissement itératif est un choix non informé utile lorsque la profondeur de la solution est inconnue et qu’une frontière complète ne tiendrait pas en mémoire. Dans les espaces comportant de nombreux chemins vers un même état, l’absence d’un ensemble global des états atteints peut entraîner de nombreuses régénérations.
Points clés
- La recherche en profondeur d’abord stocke peu de chemins, mais peut manquer un but indéfiniment en suivant une branche infinie.
- La détection des cycles sur le chemin empêche les retours aux ancêtres sans table globale des états atteints.
- Une coupure en profondeur signifie que la limite a empêché la poursuite de la recherche, et non que le problème n’a pas de solution.
- L’approfondissement itératif augmente la profondeur limite jusqu’à trouver une solution de profondeur minimale.
- L’approfondissement itératif est complet pour un branchement fini et optimal en coût si les coûts d’étape sont égaux.
- L’approfondissement itératif répète des générations en échange d’une complexité spatiale en .
2.4 Comparer les stratégies de recherche non informée et en choisir une
Une stratégie utile correspond au résultat recherché et aux ressources disponibles. La recherche non informée utilise la définition du problème sans estimation de la distance restante. Elle peut néanmoins être systématique et soigneusement ordonnée.
Comparer sur une base commune
Supposons un branchement fini et les conditions de coûts strictement positifs pour la recherche à coût uniforme. La ligne de la recherche en largeur d’abord utilise le test de but à la génération ; celle de la recherche en profondeur d’abord utilise la détection des cycles sur le chemin, sans table globale des états atteints.
| Stratégie | Complète ? | Optimale en coût ? | Temps | Espace |
|---|---|---|---|---|
| Largeur d’abord | Oui | Si les coûts d’étape sont égaux | ||
| Coût uniforme | Oui, si les coûts sont minorés par strictement positif | Oui | Comme le temps | |
| Profondeur d’abord | Dans les espaces finis | Non | ||
| Profondeur limitée | Si la limite atteint la profondeur d’un but | Non | ||
| Approfondissement itératif | Oui | Si les coûts d’étape sont égaux |
La recherche en largeur d’abord et l’approfondissement itératif minimisent aussi le coût lorsque celui-ci est une fonction non décroissante de la seule profondeur. Le mot « seule » compte : tous les chemins d’une profondeur donnée doivent avoir le même coût pour que cette condition plus générale soit satisfaite. Des arcs de coût strictement positif ne suffisent pas à rendre la recherche en largeur d’abord optimale en coût.
Chercher depuis les deux extrémités
La recherche bidirectionnelle progresse vers l’avant depuis le départ et à rebours depuis le but. Si les recherches se rencontrent près du milieu, chacune atteint environ la profondeur . Le travail est alors d’environ au lieu de . Avec un facteur de branchement de 10 et une solution de profondeur 6, la comparaison des couches principales donne environ 2 000 nœuds contre 1 000 000.
Elle nécessite un état but explicite et un moyen de générer les prédécesseurs. Des routes réversibles à double sens rendent le développement à rebours facile. Une propriété de but comme « aucune dame n’est attaquée » peut décrire trop d’états buts pour fournir un point de départ commode à la recherche inverse.
Avec des recherches en largeur d’abord ou fondées sur le coût, des règles de rencontre et d’arrêt adaptées peuvent préserver la complétude et l’optimalité. Sur une carte pondérée, ne t’arrête que lorsqu’aucune liaison moins coûteuse n’est encore possible. Le premier croisement entre les deux recherches n’est pas nécessairement la liaison la moins coûteuse.
Choisir selon le problème
Pour obtenir le moins de déplacements dans un petit taquin, des coûts de déplacement égaux rendent la recherche en largeur d’abord appropriée si la mémoire est suffisante. Pour un trajet de distance minimale avec des longueurs de route différentes et sans heuristique, choisis la recherche à coût uniforme. Pour un immense taquin à coûts égaux et de profondeur de solution inconnue, l’approfondissement itératif évite une immense frontière. Dans un espace fini comportant de nombreux buts profonds où toute solution convient, la recherche en profondeur d’abord peut être pratique. Un départ et un but connus avec des actions réversibles rendent la recherche bidirectionnelle intéressante à envisager.
La consommation de mémoire doit inclure ce que stocke la version choisie. Une recherche en profondeur d’abord avec une table globale des états atteints n’a plus le même profil de stockage que sa version en arbre. Il ne faut pas comparer un déroulement de recherche en largeur avec test de but à l’extraction à une borne de complexité avec test à la génération comme si les versions étaient identiques.
Même le meilleur choix non informé peut se heurter à une croissance exponentielle. Lorsque des connaissances utiles du domaine sont disponibles, une heuristique peut réduire l’exploration inutile. Lorsque seule une configuration finale compte, la recherche locale peut éviter de conserver un arbre de recherche.
Points clés
- Choisis une stratégie selon l’objectif visé, la structure des coûts, la mémoire et la profondeur de la solution.
- La recherche bidirectionnelle nécessite un but d’où partir et un moyen de générer les prédécesseurs.
- Une rencontre précoce n’est pas une règle d’arrêt fiable pour une recherche pondérée.
- Le chemin comportant le moins d’actions est aussi le moins coûteux lorsque les coûts d’action sont égaux.
3Effectuer une recherche heuristique : recherche gloutonne et A*
Une heuristique estime le travail encore nécessaire pour atteindre un but. La recherche gloutonne suit directement cette estimation ; A* la combine avec le coût déjà engagé. Comparer leurs déroulements montre comment le guidage peut économiser des développements et pourquoi une estimation erronée peut masquer un itinéraire peu coûteux. Lorsque A* classique demande trop de temps ou de mémoire, ses variantes font différents compromis entre qualité de la solution, stockage et travail répété.
3.1 Utiliser une heuristique dans une recherche gloutonne
Une heuristique attribue à un état une estimation du coût restant minimal jusqu’à un but. On la note pour l’état du nœud . Elle dépend de l’état, et non du chemin emprunté pour l’atteindre, et vaut zéro pour un but.
Estimer ce qui reste
La distance à vol d’oiseau estime la distance routière restante. Sur une grille avec des déplacements horizontaux et verticaux d’une case, la distance de Manhattan additionne les différences de coordonnées :
De la case (1 ; 1) à la case (4 ; 5), cela donne déplacements. La distance à vol d’oiseau entre les mêmes coordonnées est . Les estimations répondent à des questions différentes sur les déplacements dans des problèmes relaxés. Une heuristique doit utiliser les mêmes unités que le coût qu’elle estime ; des kilomètres n’estiment pas directement un temps de trajet sans modèle de conversion adapté.
La recherche informée utilise une estimation pour guider le développement. L’estimation n’a pas besoin d’indiquer à l’algorithme quelle action effectuer. Elle évalue les états produits par les actions autorisées, et la règle de gestion de la frontière détermine quel chemin en attente examiner ensuite.
Suivre la plus petite estimation
La recherche gloutonne pose . Sa file de priorité retire l’état qui semble le plus proche du but, sans tenir compte du coût déjà engagé.
Utilise les routes à double sens S–A 2, S–B 3, S–D 9, A–C 4, B–C 1, B–D 6, C–G 5 et D–G 2 km. Les estimations heuristiques jusqu’à G sont S 8, A 7, B 5, C 4, D 2 et G 0 km.
- Développer S. La frontière contient A avec une estimation de 7, B avec 5 et D avec 2.
- Retirer D car 2 est la plus petite valeur. Le développement de D génère G avec une estimation de 0. Le coût du chemin jusqu’à G est de km.
- Retirer G et renvoyer S–D–G.
Seuls S et D ont été développés. L’itinéraire S–B–C–G de 9 km était disponible, mais l’estimation de 5 pour B semblait moins bonne que celle de 2 pour D. La recherche gloutonne n’a jamais inclus les 9 km déjà parcourus pour atteindre D dans sa comparaison.
Distinguer guidage et garanties
Même une heuristique qui ne surestime jamais ne rend pas la recherche gloutonne optimale en coût. Les estimations de l’exemple sont admissibles, mais l’itinéraire renvoyé est trop coûteux. La recherche gloutonne utilise uniquement l’estimation restante ; elle peut donc payer trop cher avant d’atteindre un état prometteur.
La recherche dans un graphe est complète sur un espace d’états fini lorsqu’elle traite correctement les doublons. La recherche gloutonne en arbre peut boucler sur des états répétés qui semblent prometteurs, et un espace infini peut continuer à proposer des estimations faibles mais trompeuses. Dans le pire des cas, les complexités temporelle et spatiale sont en , même si une estimation utile peut raccourcir une exécution réelle.
Un lieu peut être proche d’une destination à vol d’oiseau mais nécessiter un long détour autour d’une rivière. De faibles valeurs heuristiques ne garantissent pas de bons itinéraires au total. Le calcul de l’heuristique prend aussi du temps : réduire le nombre de développements n’aide que si l’évaluation de ces estimations n’absorbe pas le temps économisé.
Points clés
- Une heuristique estime le coût restant et dépend de l’état.
- La recherche gloutonne ordonne les nœuds selon et ignore le coût cumulé.
- Même une heuristique admissible ne rend pas la recherche gloutonne optimale en coût.
- La recherche dans un graphe fini traite les doublons ; la recherche gloutonne en arbre peut boucler.
3.2 Trouver des chemins optimaux avec la recherche A*
A* évalue l’ensemble du parcours proposé : le coût déjà engagé plus une estimation de ce qui reste. Sa priorité est
Utilise une file de priorité, remplace les chemins plus coûteux et teste un but lorsqu’il est retiré. Pour un but, : sa priorité est donc son coût de chemin réel.
Suivre la règle du coût plus l’estimation
Les routes à double sens sont S–A 2, S–B 3, S–D 9, A–C 4, B–C 1, B–D 6, C–G 5 et D–G 2 km. Les estimations heuristiques jusqu’à G sont S 8, A 7, B 5, C 4, D 2 et G 0. Départage les ex æquo par ordre alphabétique.
| Nœud retiré | Modifications |
|---|---|
| S, | Ajouter B avec , A avec et D avec |
| B, | Ajouter C avec ; D par B n’est pas moins coûteux |
| C, | Ajouter G avec |
| A, | C par A coûte 6, soit plus que son coût enregistré de 4 |
| G, | Renvoyer S–B–C–G, de coût 9 km |
A est retiré avant G en raison de la règle de départage. A* développe quatre nœuds qui ne sont pas des buts et ne développe jamais D. La recherche à coût uniforme sur la même carte développe aussi D. Mettre toutes les estimations heuristiques à zéro supprimerait ce guidage et reproduirait la recherche à coût uniforme.
Expliquer pourquoi une estimation optimiste fonctionne
Une heuristique admissible ne dépasse jamais le coût restant réel . Pour A* avec réouverture, l’admissibilité garantit l’optimalité en coût ; A* en arbre offre la même garantie dans les conditions de recherche à coûts strictement positifs.
Supposons qu’un but moins bon de coût soit sur le point d’être retiré. Un nœud d’un chemin optimal doit encore être en attente. Pour le préfixe de son chemin optimal,
La file doit choisir ce nœud avant le but moins bon. Cela contredit le point d’arrêt supposé. La réouverture compte, car un préfixe moins coûteux découvert plus tard doit pouvoir continuer par un état déjà développé.
Une heuristique cohérente rend non décroissante le long des chemins. Elle garantit que le premier développement d’un état utilise un chemin de coût minimal pour l’atteindre. A* peut alors fermer définitivement les états développés. Avec la seule admissibilité, un ensemble fermé permanent peut écarter une amélioration essentielle.
Comprendre l’élagage et ses limites
Avec la cohérence, A* développe chaque nœud pertinent dont , peut développer des nœuds ex æquo à et n’en développe aucun au-dessus de cette valeur avant de renvoyer le résultat. La priorité 11 de D dépasse le coût de solution 9 : il reste donc non développé. Dans la classe des algorithmes qui construisent des chemins vers l’avant en utilisant les mêmes informations heuristiques, A* est optimalement efficace, hormis les cas d’ex æquo. C’est une comparaison des développements nécessaires, et non l’affirmation que son code s’exécute toujours le plus rapidement.
Une surestimation peut invalider l’argument. Remplace l’estimation de B par 9 alors que son coût restant réel est de 6. B a maintenant une priorité de 12. A*, en suivant S, A, C et D, renvoie S–A–C–G au coût de 11 tandis que B attend encore.
A* conserve un pire des cas exponentiel et stocke les informations de recherche générées.
Points clés
- A* classe les chemins selon et teste les buts à l’extraction.
- L’admissibilité garantit l’optimalité en coût pour A* qui rouvre les états dont le chemin est amélioré.
- La cohérence permet de fermer définitivement un état après son premier développement.
- Une surestimation peut retarder l’itinéraire optimal jusqu’après le renvoi d’un but moins bon.
- Les ex æquo au coût optimal peuvent modifier le nombre de développements.
- A* avec une heuristique nulle est la recherche à coût uniforme ; A* classique peut nécessiter beaucoup de mémoire.
3.3 Faire un compromis entre optimalité, rapidité et consommation de mémoire
Lorsque la frontière ne tient plus en mémoire ou qu’une réponse arrive trop lentement, choisis la ressource ou la garantie sur laquelle faire un compromis. Les variantes axées sur la vitesse modifient les priorités ou écartent des candidats. Les variantes axées sur la mémoire régénèrent des chemins qu’elles n’ont pas pu conserver.
Donner plus de poids à l’estimation
A pondéré* utilise avec . Il favorise généralement davantage la progression vers un but. Avec une heuristique admissible, les mises à jour des meilleurs chemins et la réouverture de la procédure générale, le coût renvoyé est au plus . Cette borne permet une solution moins bonne, sans l’imposer.
Sur la carte routière de référence, utilise les estimations S 8, A 7, B 5, C 4, D 2 et G 0, et un poids de 2. Depuis S, les priorités sont B 13, D 13 et A 16. L’ordre alphabétique départage les ex æquo en faveur de B. Son enfant C a ; C génère ensuite G avec une priorité de 9. L’itinéraire de coût 9 est renvoyé après trois développements de nœuds qui ne sont pas des buts. La garantie autorise jusqu’à 18 km, même si cette exécution trouve l’optimum.
Dans la même formule, un poids de 0 donne la recherche à coût uniforme et un poids de 1 donne A*. Lorsque le poids devient grand, l’estimation domine de plus en plus les comparaisons et le comportement se rapproche de la recherche gloutonne.
La recherche en faisceau ne conserve que les meilleurs nœuds en attente et écarte les autres. La frontière conservée est bornée, mais un candidat écarté peut contenir la seule solution. Elle ne garantit donc ni la complétude ni l’optimalité.
Approfondir selon un seuil de coût estimé
IDA* effectue une recherche en profondeur d’abord avec une coupure sur . Le premier seuil de coupure est la valeur de la racine. Élague tout nœud au-dessus de ce seuil en enregistrant la plus petite valeur qui le dépasse. Cette valeur devient le seuil suivant ; elle n’est pas nécessairement égale à l’ancien seuil plus 1. Utilise la détection des cycles sur le chemin.
Pour la carte de référence, le premier seuil est 8. A à 9 et D à 11 sont élagués ; B et C à 8 sont explorés, mais G à 9 est élagué. Le seuil suivant est 9. Dans cette itération, le chemin par A produit C à 10, qui est élagué. Le chemin S–B–C–G reste dans la limite de 9 et réussit.
Avec l’admissibilité, IDA* préserve l’optimalité en coût et ne nécessite que le stockage d’un chemin en profondeur. Ses passages répétés peuvent être coûteux lorsque les coûts produisent de nombreux seuils distincts. De petits coûts entiers rendent souvent le nombre de seuils plus facile à gérer.
Utiliser la mémoire limitée de façon plus sélective
La recherche récursive du meilleur d’abord (RBFS) stocke la meilleure priorité possible pour une autre branche à chaque niveau. Elle suit la branche la plus prometteuse jusqu’à ce que cette autre possibilité devienne meilleure, puis revient en arrière. Elle utilise une mémoire linéaire mais peut régénérer des branches oubliées.
SMA* utilise la mémoire disponible, supprime la pire feuille de la frontière lorsqu’elle est pleine et reporte sa valeur dans son parent. Cet enregistrement permet une régénération ultérieure. Avec une heuristique admissible, il est optimal en coût si un chemin solution optimal tient en mémoire. Sinon, il peut renvoyer une solution moins bonne ou échouer si aucun chemin solution ne tient en mémoire.
Choisis A* pour une réponse optimale lorsque le stockage suffit. Choisis IDA* ou une variante adaptée à mémoire limitée lorsque l’optimalité compte mais que la frontière ne tient pas en mémoire. A* pondéré offre une borne numérique sur la qualité ; la recherche en faisceau offre un élagage poussé sans cette borne.
Points clés
- A* pondéré utilise et peut renvoyer une solution coûtant jusqu’à dans le cadre de sa garantie avec une heuristique admissible.
- La recherche en faisceau écarte des candidats et peut perdre la seule solution.
- IDA* porte son seuil de coupure à la plus petite valeur de qui l’a dépassé.
- La recherche récursive du meilleur d’abord et SMA* peuvent régénérer du travail oublié pour limiter la mémoire.
- SMA* a besoin d’assez de mémoire pour un chemin solution optimal afin de garantir l’optimalité.
4Concevoir et évaluer des heuristiques
Une heuristique utile doit correspondre à la fois au problème et à la garantie recherchée. L’admissibilité compare son estimation au coût restant réel ; la cohérence compare les estimations voisines pour chaque action. Relâcher des restrictions fournit un moyen pratique de démontrer ces propriétés sans résoudre le problème initial. La dominance et le facteur de branchement effectif aident ensuite à comparer le guidage, tandis que la mesure du temps révèle son coût de calcul.
4.1 Vérifier l’admissibilité et la cohérence des heuristiques
Une heuristique peut être globalement optimiste tout en changeant trop brusquement entre des états voisins. L’admissibilité et la cohérence correspondent à ces vérifications distinctes, et chacune permet de justifier une version différente de A*.
Comparer les estimations aux coûts réels
Une heuristique admissible satisfait dans chaque état. Pour un but, le coût restant réel est nul ; son estimation doit donc aussi être nulle. Admissible ne signifie pas précis : une valeur nulle partout est fiable mais ne fournit aucune direction.
Sur la carte routière de référence, les estimations et les distances restantes minimales exactes jusqu’à G sont :
| État | Estimation | Coût restant réel |
|---|---|---|
| S | 8 | 9 |
| A | 7 | 9 |
| B | 5 | 6 |
| C | 4 | 5 |
| D | 2 | 2 |
| G | 0 | 0 |
Chaque estimation est au plus égale à son coût réel. Dans un grand problème, calculer ces coûts exacts peut être aussi difficile que la recherche initiale. Une preuve fondée sur la structure du problème est alors plus utile qu’un tableau exhaustif.
Vérifier chaque action
La cohérence, aussi appelée monotonie, exige pour chaque action, ainsi qu’une valeur nulle pour les buts. L’estimation courante ne peut pas dépasser le coût d’une étape plus l’estimation du successeur.
Sur la carte routière, A→C donne , C→B donne et D→G donne . Les routes à double sens exigent de vérifier les deux directions. Les 16 vérifications orientées sont satisfaites pour ces estimations.
Additionner les inégalités le long d’un chemin vers un but annule les estimations intermédiaires. Sur un chemin optimal, on obtient : la cohérence implique donc l’admissibilité. On obtient aussi
Les priorités ne peuvent pas diminuer le long d’un chemin. Le premier développement d’un état se fait donc sur un chemin de coût minimal, même si sa première génération était plus coûteuse.
Comprendre pourquoi l’admissibilité seule nécessite la réouverture
Considère les routes à double sens S–A 1, A–C 1, S–B 1, B–C 2 et C–G 3. Soient les estimations S 0, A 4, B 1, C 1 et G 0. Elles ne dépassent pas les coûts réels S 5, A 4, B 5, C 3 et G 0 ; elles sont donc admissibles. Mais A→C ne respecte pas la cohérence : .
A* développe S, puis B avec une priorité de 2, puis C atteint pour un coût de 3 avec une priorité de 4. Il développe ensuite A avec une priorité de 5 et découvre un chemin moins coûteux vers C, de coût 2. Rejeter définitivement C parce qu’il est fermé laisse un but de coût 6. Rouvrir C propage l’amélioration et produit l’optimum, de coût 5.
Adapter l’heuristique au modèle de déplacement
La distance de Manhattan est admissible et cohérente pour des déplacements horizontaux et verticaux d’une case. Si les déplacements en diagonale coûtent aussi 1, aller de (0 ; 0) à (3 ; 3) ne prend que trois déplacements, tandis que la distance de Manhattan donne 6. Pour ce modèle de déplacement, donne la distance sans obstacle. La garantie d’une heuristique est liée à un modèle d’action particulier.
Points clés
- L’admissibilité borne une estimation par le coût restant réel.
- La cohérence vérifie chaque action orientée et exige une valeur nulle pour les buts.
- La cohérence implique l’admissibilité ; l’admissibilité n’implique pas la cohérence.
- Les heuristiques cohérentes rendent non décroissante le long d’un chemin.
- Les heuristiques admissibles mais non cohérentes nécessitent la réouverture pour la garantie générale de A*.
- Modifier les déplacements autorisés peut invalider une heuristique.
4.2 Construire des heuristiques admissibles à partir de problèmes relaxés
Pour concevoir une estimation fiable, résous une version plus facile du problème. Un problème relaxé supprime des restrictions sur les actions : toutes les solutions initiales restent donc disponibles. Son coût minimal ne peut pas dépasser celui du problème initial.
Supprimer les restrictions de façon réfléchie
Un coût exact de problème relaxé est une heuristique admissible. Il est aussi cohérent lorsque les actions initiales restent disponibles avec leurs coûts : effectuer une étape initiale puis suivre un itinéraire optimal dans le problème relaxé est un itinéraire possible dans ce problème ; l’optimum relaxé ne peut donc pas coûter plus cher.
Dans le taquin à 8 cases, une tuile ne peut se déplacer vers une case voisine que si cette case est vide. Supprime l’exigence de case vide et les tuiles peuvent traverser les cases occupées. Chaque tuile numérotée doit alors parcourir au moins la somme de ses distances horizontale et verticale jusqu’à sa cible. Leur somme donne la distance de Manhattan, .
Supprime aussi l’exigence de voisinage et chaque tuile mal placée peut sauter directement vers sa cible en un déplacement. Le coût obtenu est le nombre de tuiles mal placées, . Les deux sont faciles à calculer sans explorer le taquin initial.
Calculer les deux estimations
Pour le but « 1 2 3 / 4 5 6 / 7 8 case vide », considère « 5 1 3 / 4 case vide 2 / 7 8 6 ». Numérote les lignes et les colonnes à partir de 1.
| Tuile | Position actuelle | Position cible | Distance |
|---|---|---|---|
| 5 | (1 ; 1) | (2 ; 2) | 2 |
| 1 | (1 ; 2) | (1 ; 1) | 1 |
| 2 | (2 ; 3) | (1 ; 2) | 2 |
| 6 | (3 ; 3) | (2 ; 3) | 1 |
Les autres tuiles numérotées sont déjà à la bonne place. Quatre sont mal placées, donc . Leurs distances totalisent , donc . La solution optimale prend 12 déplacements ; les relaxations ignorent les interactions qui créent du travail supplémentaire.
Ne compte pas la case vide. À un déplacement du but, une tuile numérotée et la case vide sont toutes deux déplacées. Compter les deux donnerait 2 alors que le coût réel est de 1. La case vide permet les déplacements ; ce n’est pas une tuile supplémentaire à comptabiliser.
Stocker les sous-problèmes résolus
Une base de données de motifs enregistre les coûts exacts d’un sous-problème choisi, par exemple placer correctement les tuiles 1 à 4 en considérant les autres comme interchangeables. Construis la table une fois par une recherche à rebours depuis le but. Pendant une nouvelle recherche, consulte la table au lieu de résoudre à nouveau le sous-problème.
Le sous-problème ne demande pas plus de travail que le problème complet, ce qui fournit une borne inférieure. Cependant, additionner deux coûts de motifs ordinaires peut compter deux fois un même déplacement réel. L’addition est fiable pour des motifs disjoints lorsque chaque base ne compte que les déplacements de ses propres tuiles. Des noms de tuiles disjoints ne suffisent pas à établir cette règle de comptabilisation des coûts.
Combiner des estimations fiables
Le maximum d’estimations admissibles est admissible :
Chaque estimation candidate reste inférieure ou égale au coût restant réel, donc leur maximum aussi. Il est au moins aussi informatif que chacune des estimations prises séparément. Une simple somme n’offre pas cette garantie.
Une heuristique apprise à partir d’exemples résolus peut bien prédire le coût restant en moyenne. La précision moyenne n’établit pas une borne inférieure pour chaque état. Elle ne conserve la garantie de A* associée à une heuristique admissible que si l’on démontre que ses estimations ne surestiment jamais le coût.
Points clés
- Le coût exact d’un problème relaxé est une borne inférieure du coût initial.
- Le nombre de tuiles mal placées et la distance de Manhattan proviennent de relaxations différentes du taquin à 8 cases.
- Exclus la case vide du calcul des deux heuristiques du taquin.
- Les bases de données de motifs échangent du précalcul et du stockage en table contre des consultations rapides.
- N’additionne les coûts des motifs qu’avec une comptabilisation qui évite de compter deux fois les déplacements.
- Le maximum d’heuristiques admissibles est admissible.
- Apprendre une heuristique ne prouve pas en soi son admissibilité.
4.3 Comparer les heuristiques selon la dominance et le facteur de branchement effectif
Une estimation plus proche du coût réel peut réduire l’exploration, mais une estimation coûteuse peut malgré tout ralentir la recherche. Compare à la fois les informations fournies et le calcul total nécessaire.
Établir la dominance sur chaque état
Une heuristique admissible domine une heuristique admissible si partout. Une grille favorable ne suffit pas à démontrer cette relation.
La distance de Manhattan domine le nombre de tuiles mal placées dans le taquin à 8 cases. Chaque tuile mal placée doit parcourir au moins une case ; sa contribution à la distance de Manhattan est donc au moins égale à 1, la valeur comptée par l’heuristique moins forte. Une tuile correctement placée contribue pour zéro aux deux.
Avec des estimations cohérentes, A* doit développer les chemins tels que . Augmenter une estimation admissible retire certains chemins de cette région où le développement est obligatoire. Une heuristique cohérente dominante ne développe pas plus de nœuds, hormis les différences dues aux ex æquo. Une estimation non admissible peut être encore plus grande, mais elle fait perdre la garantie d’optimalité et ne remplit pas les conditions de cette comparaison par dominance.
Résumer l’effort de recherche
Le facteur de branchement effectif, , décrit la largeur d’un arbre uniforme équivalent. Compte nœuds générés sous la racine et note la profondeur de la solution. Résous
Le 1 supplémentaire correspond à la racine. Il faut compter de manière cohérente : si une mesure inclut déjà la racine, ne l’ajoute pas deux fois.
Pour 52 nœuds générés sous la racine et une solution de profondeur 5, le total est de 53 et . Pour 1 000 nœuds générés et une profondeur de 8, . Détermine ces valeurs numériquement en augmentant ou en diminuant une valeur d’essai jusqu’à ce que sa somme géométrique corresponde au nombre total de nœuds.
Une valeur proche de 1 indique une recherche étroite. Compare les résultats sur des instances représentatives, avec la même règle de décompte et des profondeurs de solution comparables. Le facteur de branchement effectif peut aider à estimer le passage à l’échelle, mais une instance exceptionnellement facile ne permet pas de prévoir de façon fiable le comportement sur toute une famille de problèmes.
Chronométrer l’ensemble du calcul
Supposons qu’un nœud prenne 10 microsecondes, dont 1 microseconde pour évaluer l’ancienne heuristique. Une heuristique de remplacement divise le nombre de nœuds par deux mais prend 100 microsecondes par évaluation. Le travail hors heuristique coûte toujours 9 microsecondes, donc le nouveau total par nœud est de 109. Le rapport des temps totaux est
La recherche est environ 5,5 fois plus lente malgré la visite d’un nombre inférieur de nœuds. Si la nouvelle évaluation ne prend que 2 microsecondes, le total par nœud passe à 11 et le rapport des temps est de . La recherche est alors environ 1,8 fois plus rapide.
Une base de données de motifs a aussi un coût de construction. De nombreuses recherches ayant le même but peuvent partager cet investissement ; une seule petite recherche peut ne pas le rentabiliser. Mesure séparément le prétraitement, le temps de consultation, le nombre de nœuds générés et la mémoire pour ne pas confondre une réduction des développements avec une amélioration automatique de la vitesse.
Points clés
- La dominance exige deux heuristiques admissibles et une inégalité vérifiée dans chaque état.
- Une heuristique cohérente dominante réduit les développements nécessaires de A*, hormis les cas d’ex æquo.
- Le facteur de branchement effectif ajuste un arbre uniforme au nombre de nœuds et à la profondeur de la solution.
- Compte la racine une seule fois dans l’équation de la somme géométrique.
- Le temps d’exécution total comprend l’évaluation de l’heuristique et tout précalcul.
5Utiliser la recherche locale dans de très grands espaces d’états
Certains problèmes demandent une bonne disposition, et non un chemin pour y parvenir. La recherche locale travaille directement sur des candidats complets et stocke très peu d’historique de recherche. La difficulté passe de la gestion d’une frontière au déplacement dans un paysage comportant des optima locaux, des zones plates et des crêtes. La recherche par escalade, les redémarrages, le recuit simulé et les méthodes à population diffèrent par leur façon de continuer à progresser lorsqu’aucune amélioration immédiate n’est disponible.
5.1 Décrire la recherche locale et le paysage de l’espace d’états
La recherche locale modifie à plusieurs reprises une réponse candidate complète. Elle convient aux tâches où la configuration finale compte et où la séquence utilisée pour la trouver peut être abandonnée.
Représenter un candidat complet
Pour les 8 dames, place une dame dans chaque colonne. Représente l’état par les huit numéros de ligne, en lisant les colonnes de gauche à droite. Chaque état comporte les huit dames, y compris les états avec des conflits. Un voisin déplace une dame vers une autre ligne de sa propre colonne.
Il existe états et voisins par état. Un nombre fixe d’états courants remplace la grande frontière et les enregistrements des parents de la recherche de chemin. Le stockage dépend toujours de la taille d’un état ; conserver un tuple de huit éléments prend moins de place que conserver un immense emploi du temps.
L’établissement d’emplois du temps, la disposition des composants d’une puce et le choix d’une tournée complète entre des villes suivent le même schéma général : chaque état est une proposition complète. Une tournée est elle-même une disposition candidate, même si son contenu décrit un trajet. La recherche locale n’a pas besoin de conserver la séquence de modifications utilisée pour améliorer cette tournée.
Définir ce que signifie « meilleur »
Une fonction objectif donne à chaque état un score à maximiser. On peut aussi définir un coût à minimiser. Pour les n dames, soit le nombre de paires de dames qui s’attaquent. Compte chaque paire une fois, y compris les attaques sur les lignes ou les diagonales même lorsqu’une autre dame se trouve entre elles. Une solution a .
Pour quatre colonnes, le tuple (1 ; 2 ; 3 ; 4) place toutes les dames sur une diagonale. Ses paires s’attaquent toutes. Le tuple (2 ; 1 ; 3 ; 4) comporte deux paires qui s’attaquent, tandis que (2 ; 4 ; 1 ; 3) n’en comporte aucune. Ici, les valeurs plus faibles sont meilleures ; la lettre désigne un coût à minimiser, et non une estimation du coût de chemin restant utilisée par A*.
Lire le paysage
Imagine que la qualité d’un état soit représentée par une hauteur. Pour une maximisation :
- Un maximum global a la meilleure valeur de tout l’espace.
- Un maximum local est meilleur que ses voisins mais peut être moins bon qu’un état éloigné.
- Un plateau est une région plane connexe. Il peut s’agir d’un maximum local plat sans sortie ascendante ou d’un épaulement depuis lequel des déplacements latéraux permettent d’atteindre une sortie ascendante.
- Une crête peut monter dans une direction que les déplacements uniques disponibles ne peuvent pas suivre. Chaque choix immédiat peut sembler moins bon.
Pour minimiser un coût, inverse la hauteur : la recherche vise les minima et les vallées. Un minimum local ne prouve pas qu’il n’existe pas ailleurs un état de coût inférieur. Le voisinage détermine les états qui peuvent être comparés en une étape ; modifier la transformation autorisée peut donc changer les endroits où la recherche se bloque.
Vérifier que le chemin peut être ignoré
Un agent qui recherche un itinéraire doit renvoyer des actions autorisées depuis son départ réel. Une bonne destination ne suffit pas à elle seule. La recherche locale ne renvoie généralement que l’état candidat, sans chaîne de parents retraçant toutes les modifications précédentes.
Une méthode complète de recherche locale trouverait un but dès qu’il en existe un ; une méthode optimale trouverait le meilleur état global. Les méthodes locales de base ne donnent aucune de ces deux garanties générales. Leur intérêt est de pouvoir atteindre rapidement de bons candidats lorsque le stockage d’un arbre de recherche systématique est irréalisable.
Points clés
- La recherche locale modifie des états candidats complets et abandonne généralement le chemin des modifications.
- Une fonction objectif définit quels états voisins sont meilleurs.
- Un optimum local peut être moins bon qu’un optimum global éloigné.
- Un épaulement possède une sortie ascendante accessible par des déplacements de même valeur.
- Le voisinage influe à la fois sur le paysage de recherche et sur les points où la progression s’arrête.
5.2 Améliorer les états par recherche par escalade
La recherche par escalade effectue la meilleure amélioration immédiate qu’elle peut trouver. Pour un score à maximiser, l’escalade à plus forte pente choisit le voisin au score le plus élevé. Pour un coût à minimiser, elle choisit le voisin au coût le plus faible. Elle s’arrête lorsqu’aucune amélioration stricte n’existe.
Suivre une exécution pour quatre dames
Soit un état qui indique la ligne de la dame dans chaque colonne et soit le nombre de paires qui s’attaquent. Pars de (1 ; 2 ; 3 ; 4), dont le coût est de 6.
- Évaluer les déplacements d’une dame. Un meilleur voisin est (2 ; 2 ; 3 ; 4), de coût 4.
- De là, un meilleur voisin est (2 ; 1 ; 3 ; 4), de coût 2.
- Aucun voisin obtenu en déplaçant une dame n’a un coût inférieur à 2. La recherche par escalade stricte s’arrête.
La disposition de coût nul (2 ; 4 ; 1 ; 3) existe, mais elle ne peut pas être atteinte depuis l’état d’arrêt par un déplacement qui améliore immédiatement le résultat. C’est une conséquence de la règle locale, et non la preuve que le programme a mal compté les conflits.
Autoriser des déplacements latéraux utiles
Un déplacement latéral conserve le même score. Il peut traverser un épaulement jusqu’à une sortie qui améliore le résultat, mais il peut aussi errer sur un optimum local plat. Limite les déplacements latéraux consécutifs pour éviter de tourner indéfiniment en rond.
Dans l’expérience sur les 8 dames rapportée par Russell et Norvig, l’escalade à plus forte pente à partir de départs aléatoires réussit environ 14 % du temps, en environ 4 étapes en cas de réussite et 3 lorsqu’elle se bloque. Autoriser jusqu’à 100 déplacements latéraux consécutifs porte le taux de réussite rapporté à environ 94 %, avec environ 21 étapes par réussite et 64 par échec. Ce sont les résultats de cette expérience, et non des taux de réussite universels pour la recherche par escalade.
Changer la façon de choisir un voisin
L’escalade stochastique sélectionne au hasard un voisin qui améliore le résultat, en favorisant éventuellement les améliorations les plus importantes. L’escalade au premier choix échantillonne les voisins un par un et prend la première amélioration. Elle évite d’évaluer un immense voisinage avant chaque déplacement. Les deux refusent toujours les déplacements vers des états moins bons.
La recherche par escalade avec redémarrages aléatoires commence une nouvelle exécution à partir d’un état nouvellement échantillonné après un échec. Pour des exécutions indépendantes de probabilité de réussite , le nombre moyen d’exécutions jusqu’à la première réussite est de . Pour , cela représente environ 7 exécutions. Avec les nombres d’étapes rapportés, le nombre moyen total d’étapes est
Les exécutions échouées contribuent elles aussi au travail. Avec une probabilité de réussite strictement positive et des redémarrages indépendants, la probabilité de finir par réussir tend vers 1 lorsque le nombre d’exécutions augmente.
Faire partager les découvertes à plusieurs candidats
La recherche locale en faisceau conserve états, génère leurs voisins ensemble et retient les meilleurs de cet ensemble commun. Un parent prometteur peut fournir plusieurs états conservés alors qu’un autre n’en fournit aucun. Ce partage la distingue des redémarrages indépendants.
La mise en commun peut aussi regrouper tous les candidats dans une seule région. La recherche stochastique en faisceau échantillonne les états conservés avec une probabilité qui augmente avec leur qualité afin de préserver davantage de diversité. Le choix entre déplacements latéraux, redémarrages et diversité de la population dépend de la raison pour laquelle la progression échoue : un passage proche à valeur égale, une mauvaise région de départ ou trop de candidats explorant la même zone.
Points clés
- La recherche par escalade à plus forte pente accepte la meilleure amélioration stricte et s’arrête sinon.
- Les déplacements latéraux peuvent traverser les épaulements, mais doivent être limités dans les régions plates.
- L’escalade au premier choix échantillonne les voisins jusqu’à trouver une amélioration.
- Des redémarrages indépendants de probabilité de réussite nécessitent en moyenne exécutions.
- La recherche locale en faisceau sélectionne les voisins dans un ensemble commun, ce qui permet aux candidats de partager leurs progrès.
- Le regroupement de la population peut réduire l’exploration même lorsque plusieurs états sont conservés.
5.3 Échapper aux optima locaux avec le recuit simulé et les algorithmes génétiques
Dans certains paysages, une perte temporaire est nécessaire pour rendre accessible un meilleur état. Le recuit simulé autorise de tels déplacements avec une probabilité contrôlée. Les algorithmes génétiques explorent plutôt l’espace en sélectionnant et en combinant des candidats complets.
Accepter parfois un déplacement vers un état moins bon
Le recuit simulé échantillonne un voisin au hasard. Accepte un déplacement qui améliore le résultat. Pour une fonction objectif à maximiser, note sa variation . Si , accepte le déplacement vers un état moins bon avec la probabilité
Pour minimiser un coût, soit l’augmentation du coût. Un déplacement vers un état moins bon vérifie alors et sa probabilité d’acceptation est . Les déplacements vers un état de même valeur ont une probabilité de 1 selon les deux formules. La température et les variations de la fonction objectif doivent utiliser des échelles numériques compatibles.
Une baisse de score de 2 est acceptée avec une probabilité d’environ 0,819 à une température de 10, de 0,135 à une température de 1 et de 0,018 à une température de 0,5. À une température de 10, une baisse plus importante de 5 a une probabilité d’environ 0,607. La température contrôle donc la tolérance, tandis que l’ampleur de la perte compte toujours à température égale.
Abaisser la température
Un schéma de refroidissement fixe la température au cours du temps. Le refroidissement géométrique utilise avec un facteur proche de 1, par exemple 0,95. À haute température, de nombreux déplacements vers des états moins bons sont acceptés et l’exploration ressemble à une marche aléatoire. Près de zéro, ces déplacements deviennent rares et le comportement ressemble à celui de la recherche par escalade.
Un refroidissement trop rapide peut piéger la recherche avant qu’elle ne s’échappe d’une mauvaise région. Un refroidissement très lent augmente le calcul nécessaire. Le résultat asymptotique sur l’optimum global exige un refroidissement suffisamment lent et la possibilité habituelle d’atteindre les états par le voisinage ; une exécution géométrique finie ordinaire ne garantit pas de trouver l’optimum global. Utilisée depuis les années 1980 pour la disposition des composants de puces et l’ordonnancement, la méthode tire son nom du chauffage puis du refroidissement lent du métal, qui lui permet d’adopter une structure de plus faible énergie.
Construire une nouvelle population
Un algorithme génétique représente les candidats par des chaînes. À chaque génération, il évalue leur adaptation, sélectionne les parents en privilégiant les mieux adaptés, crée des enfants par croisement et applique des mutations occasionnelles.
Pour les 8 dames, huit chiffres indiquant les lignes décrivent une dame par colonne. L’adaptation peut compter les paires qui ne s’attaquent pas, avec un maximum de 28. Coupe les chaînes des parents « 64751517 » et « 64278273 » après le quatrième chiffre. La combinaison des moitiés opposées donne « 64758273 » et « 64271517 ».
Les parents ont une adaptation de 23 et 24 ; les enfants ont une adaptation de 27 et 21. Un enfant est meilleur que les deux parents tandis que l’autre est moins bon. Le croisement offre de nouvelles combinaisons, sans garantir une amélioration. Il est utile lorsque de bons blocs tendent à conserver leur valeur lorsqu’ils sont combinés. La mutation modifie occasionnellement une position et contribue à introduire de la diversité au-delà de ces combinaisons.
La sélection, le croisement et la mutation jouent des rôles différents : la sélection favorise les candidats utiles, le croisement les recombine et la mutation modifie des positions individuelles. Comme la recherche stochastique en faisceau, la méthode conserve une population, mais les nouveaux candidats peuvent reprendre des éléments de deux parents. Ni un parent très adapté ni une température finale basse ne prouve à lui seul que l’optimum global a été trouvé.
Points clés
- Le recuit simulé échantillonne un voisin et accepte les déplacements vers des états moins bons avec une probabilité dépendant de la température.
- Pour une augmentation de coût , la probabilité d’acceptation est .
- Le refroidissement réduit l’exploration ; un refroidissement trop rapide peut laisser la recherche dans un optimum local.
- Les algorithmes génétiques combinent sélection selon l’adaptation, croisement et mutation.
- Le croisement peut produire des enfants meilleurs ou moins bons.
Algorithmes de recherche : exemples
1Transformer un problème en recherche
13 étapes
- 1IntroductionDes choix à une solution
Un algorithme de recherche ne reçoit pas une instruction comme « résous ceci d’une manière ou d’une autre ». Il reçoit un modèle des situations possibles (états) et des actions autorisées.
Utilise un taquin pour construire ce modèle, puis suis les enregistrements produits par la recherche, appelés nœuds. Le modèle décrit le monde ; les enregistrements décrivent les chemins examinés. Cette distinction expliquera pourquoi deux nœuds peuvent aboutir à un même état et pourquoi stocker tous les chemins possibles peut devenir coûteux.
- 2ExemplePréciser le taquin
Pour le taquin à 8 cases, un état indique les positions des huit tuiles numérotées et de la case vide. L’état initial est la grille fournie.
La configuration cible est « 1 2 3 / 4 5 6 / 7 8 case vide ». Les actions autorisées déplacent la case vide à gauche, à droite, en haut ou en bas sans sortir de la grille. La transition l’échange avec une tuile voisine. Chaque action coûte 1. Ces choix définissent le problème avant le début de toute recherche.
- 3ExplicationRenvoyer des actions, et pas seulement une destination
Le test de but reconnaît une grille qui répond à l’objectif. Une solution de chemin doit aussi fournir les déplacements autorisés qui permettent de l’atteindre depuis la grille initiale.
Si chaque déplacement coûte 1, un chemin de six déplacements coûte 6. Avec des coûts routiers différents, additionne les coûts des arcs au lieu de compter les actions. Un état but indique où tu veux arriver ; la solution indique comment y parvenir, et le coût du chemin indique le coût de ce parcours.
- 4DéfiConserver le détail qui modifie les actions
Un planificateur d’itinéraire modélise un robot par la pièce où il se trouve. Certaines portes exigent une clé que le robot peut porter. Le planificateur peut-il omettre sans risque si le robot possède la clé ?
---reveal---
Non. La possession de la clé modifie les actions autorisées depuis une même pièce. L’état doit l’enregistrer, sinon un itinéraire abstrait peut inclure le passage d’une porte que le robot ne peut pas franchir. La couleur de la peinture du robot peut être omise si elle ne modifie ni les actions ni les coûts.
- 5Point cléGénérer un grand espace au besoin
Un espace implicite est une méthode pour générer les successeurs, et non une liste stockée de tous les états. C’est important même pour des taquins qui semblent petits : le taquin à 8 cases possède 181 440 états accessibles, tandis que celui à 15 cases en possède environ .
La recherche génère la partie dont elle a besoin. Choisir une meilleure représentation peut aussi réduire cette partie : placer chaque dame uniquement dans la prochaine colonne vide supprime de nombreux ordres de placement redondants.
- 6ExplicationStocker un chemin dans chaque nœud
Un état est une situation. Un nœud est un enregistrement de chemin qui contient cet état, son parent, l’action qui y mène et le coût cumulé .
Les itinéraires « S, A, C » et « S, B, C » produisent des nœuds différents qui aboutissent à C. La carte contient un seul C, mais l’arbre de recherche peut contenir les deux arrivées. Suivre les liens vers les parents depuis un but renvoyé et inverser les actions permet de reconstituer son itinéraire particulier.
- 7ExempleDistinguer les enregistrements en attente et les états atteints
Sur la carte à double sens, S possède des routes vers A de 2 km, B de 3 km et D de 9 km. Développer S génère trois nœuds dont le parent est S.
La frontière contient maintenant A, B et D, qui attendent d’être sélectionnés. La table des états atteints contient S ainsi que ces trois états. Elle mémorise les états générés, et pas seulement ceux qui ont été développés, afin qu’un autre itinéraire ne puisse pas ajouter sans être détecté un doublon inutile d’un état en attente.
- 8ExplicationPropager une amélioration
Supposons que C soit d’abord atteint par A au coût de 6. Plus tard, B propose un itinéraire vers C coûtant 4. Remplace le meilleur enregistrement de C, y compris son parent, afin que les itinéraires ultérieurs héritent du préfixe moins coûteux.
Si C a déjà été développé, certains algorithmes doivent le rouvrir pour transmettre l’amélioration. Si un tas contient encore l’ancienne entrée de coût 6, ignore cette entrée périmée lorsqu’elle est retirée ; elle ne représente plus le meilleur chemin vers C.
- 9DéfiReconstituer le bon itinéraire
Un nœud but Z a pour parent M. Le meilleur nœud de M a pour parent K, et le parent de K est la racine R. Un ancien nœud de M avait pour parent P. Quel itinéraire faut-il renvoyer ?
---reveal---
Renvoie R–K–M–Z en suivant à rebours la chaîne réelle des parents du nœud renvoyé, puis en l’inversant. L’ancien nœud de M décrit un chemin différent. Mélanger son parent avec le coût amélioré ferait que l’itinéraire indiqué ne correspondrait pas à son propre enregistrement de recherche.
- 10ExplicationPoser quatre questions distinctes
Être complet signifie trouver une solution dès qu’il en existe une. Être optimal en coût signifie renvoyer la solution la moins coûteuse. Un espace infini sans solution ne conduit pas nécessairement à un signalement d’échec qui met fin à la recherche.
Le temps mesure les nœuds générés ou développés ; l’espace mesure le pic d’information conservée. Une méthode peut être complète tout en renvoyant un itinéraire coûteux, ou renvoyer l’itinéraire le moins coûteux tout en utilisant trop de mémoire pour être pratique sur une instance plus grande.
- 11ExempleObserver la croissance des couches
Pour un facteur de branchement de 10, les couches jusqu’à la profondeur 5 contiennent 1, 10, 100, 1 000, 10 000 et 100 000 nœuds. Ensemble, elles contiennent 111 111 nœuds.
La plupart se trouvent dans la dernière couche. C’est pourquoi un niveau de profondeur supplémentaire compte autant : il ajoute encore 1 000 000 de chemins avant la détection des doublons. À 1 kilooctet par nœud, une exploration large peut atteindre une limite de stockage même lorsque la génération des nœuds est rapide.
- 12DéfiNe pas confondre chemin court et chemin peu coûteux
Un algorithme complet renvoie toujours un itinéraire de deux actions coûtant 17 unités, alors qu’un itinéraire de quatre actions coûte 10. Est-il optimal en coût, et sa complétude permet-elle de trancher cette question ?
---reveal---
Il n’est pas optimal en coût, car une solution moins coûteuse existe. La complétude établit qu’il trouve une solution, et non laquelle il choisit. Les actions supplémentaires ne rendent pas l’itinéraire de quatre actions moins bon lorsque l’objectif est le coût total.
- 13RécapitulatifLire un déroulement de recherche avec un objectif
Distingue trois niveaux : les états et les actions du problème, les chemins stockés sous forme de nœuds et la règle qui sélectionne le prochain nœud de la frontière. Demande-toi ensuite si le chemin renvoyé répond à l’objectif recherché.
Pour comparer les ressources, identifie le facteur de branchement, la profondeur de la solution et la profondeur maximale. Vérifie ce qui est stocké ainsi que ce qui est développé ; deux stratégies peuvent rechercher le même but avec des besoins en mémoire très différents.
2Suivre une recherche non informée sur une carte
16 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionUne carte, plusieurs ordres de recherche
- 2ExempleCommencer la file de recherche en largeur
- 3ExempleFaire apparaître le premier but
- 4DéfiInterpréter le résultat de la recherche en largeur
- 5ConseilUtiliser la borne correspondant à la recherche en largeur
- 6ExempleOrdonner selon le coût déjà engagé
- 7ExempleRetirer le but au coût minimal
- 8DéfiAttendre l’itinéraire inachevé moins coûteux
- 9Point cléBorner le coût d’une profondeur sans fin
- 10ExempleSuivre la branche en profondeur
- 11ExplicationDistinguer une limite d’un échec
- 12ExemplePayer un faible coût pour utiliser moins de mémoire
- 13DéfiChoisir une stratégie selon la profondeur
- 14ExplicationRencontrer une recherche partie du but
- 15DéfiChoisir selon les coûts et l’accès à rebours
- 16RécapitulatifAdapter la garantie à la tâche
3Guider une recherche à l’aide d’estimations
15 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionEstimer le trajet restant
- 2ExplicationDonner un sens à l’estimation
- 3ExempleLaisser la proximité apparente guider le choix
- 4DéfiChoisir entre un préfixe peu coûteux et une petite estimation
- 5ExempleAdditionner les deux coûts
- 6ExempleDépartager les derniers ex æquo
- 7Point cléGarder un itinéraire optimal compétitif
- 8ExplicationSavoir quand un état fermé peut le rester
- 9DéfiDiagnostiquer une amélioration ignorée
- 10ExempleFavoriser la progression vers le but
- 11ExplicationAugmenter une courbe de niveau du coût au lieu de conserver une frontière
- 12ExemplePasser le seuil de coupure de huit à neuf
- 13ConseilDéterminer si les chemins oubliés peuvent revenir
- 14DéfiChoisir une garantie avec une mémoire limitée
- 15RécapitulatifDistinguer ordre, arrêt et mémoire
4Construire et vérifier une heuristique admissible
15 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionDémontrer que l’estimation est admissible
- 2ExplicationVérifier la borne sur le coût réel
- 3ExempleVérifier une étape orientée
- 4DéfiDistinguer une estimation optimiste d’une estimation régulière
- 5LienLaisser les déplacements déterminer la distance
- 6ExplicationConstruire délibérément un problème plus facile
- 7ExempleRelâcher deux restrictions du taquin
- 8ExempleCompter les tuiles numérotées déplacées
- 9DéfiÉviter de compter deux fois un déplacement
- 10ExplicationPrécalculer et combiner des bornes inférieures
- 11ExplicationComparer les estimations partout
- 12ExempleAjuster un arbre équivalent
- 13ExempleTenir compte du calcul de l’heuristique
- 14DéfiUtiliser deux estimations sans affirmer une dominance
- 15RécapitulatifÉvaluer séparément l’admissibilité et l’utilité
5Améliorer des candidats complets
16 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionRechercher une disposition
- 2ExemplePlacer toutes les dames dans l’état
- 3ExempleCompter les paires qui s’attaquent
- 4ExplicationVisualiser les pièges
- 5DéfiDéterminer si l’historique des modifications compte
- 6ExempleSuivre les meilleures améliorations immédiates
- 7ExplicationEssayer un déplacement latéral ou un nouveau départ
- 8DéfiInclure l’exécution réussie
- 9LienPartager les progrès sans perdre toutes les autres possibilités
- 10ExplicationAccepter une perte temporaire
- 11ExempleGarder la perte fixe et abaisser la température
- 12DéfiGarder des signes cohérents
- 13ConseilRefroidir à un rythme adapté
- 14ExempleCombiner deux chaînes parentales
- 15DéfiDiagnostiquer une population qui stagne
- 16RécapitulatifChoisir comment franchir l’obstacle
Algorithmes de recherche : QCM
Série 1 : Heuristiques, A* et limites de mémoire10 Questions Pratiques
Question 1 sur 10
Afficher la réponseMasquer la réponse
Question 2 sur 10
Afficher la réponseMasquer la réponse
Question 3 sur 10
Afficher la réponseMasquer la réponse
Question 4 sur 10
Afficher la réponseMasquer la réponse
Question 5 sur 10
Afficher la réponseMasquer la réponse
Question 6 sur 10
Afficher la réponseMasquer la réponse
Question 7 sur 10
Afficher la réponseMasquer la réponse
Question 8 sur 10
Afficher la réponseMasquer la réponse
Question 9 sur 10
Afficher la réponseMasquer la réponse
Question 10 sur 10
Afficher la réponseMasquer la réponse
Série 2 : États, frontières et recherche non informée10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 3 : Vérifier, construire et comparer des heuristiques10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 4 : Paysages, redémarrages et recherche à population10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 5 : Choisir et diagnostiquer des méthodes de recherche10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Tu bloques sur ton propre exercice ? Aide aux Devoirs
Mots-Clés
A
A* pondéré
Abstraction
Algorithme génétique
B
Base de données de motifs
Borne sur le coût
C
Complétude
Complexité spatiale
Coupure
Courbe de niveau du coût optimal
Coût d’évaluation de l’heuristique
Coût d’un chemin
Coût d’une action
Coût restant optimal
Crête
Croisement
D
Déplacement latéral
Détection des cycles sur le chemin courant
Développement
Distance à vol d’oiseau
Distance de Manhattan
Dominance
É
État
État initial
E
Efficacité optimale
Ensemble des états atteints
Escalade au premier choix
Escalade stochastique
Espace d’états implicite
F
Facteur de branchement
Facteur de branchement effectif
File de priorité
File FIFO
Fonction d’adaptation
Fonction d’évaluation
Fonction heuristique
Fonction objectif
Formulation à états complets
Frontière
H
Heuristique additive de motifs
Heuristique admissible
Heuristique cohérente
Heuristique des tuiles mal placées
I
IDA*
Inégalité triangulaire
M
Minorant strictement positif des coûts
Modèle de transition
Mutation
N
Nœud de recherche
O
Optimalité en coût
Optimum local
P
Pile LIFO
Plateau
Précalcul
Prédécesseur
Problème relaxé
Profondeur de la solution
R
Recherche à coût uniforme
Recherche à profondeur limitée
Recherche A*
Recherche avec retour arrière
Recherche bidirectionnelle
Recherche dans un graphe
Recherche en arbre
Recherche en faisceau
Recherche en largeur d’abord
Recherche en profondeur d’abord
Recherche gloutonne
Recherche locale
Recherche locale en faisceau
Recherche non informée
Recherche par approfondissement itératif
Recherche par escalade
Recherche récursive du meilleur d’abord
Recuit simulé
Redémarrage aléatoire
Réouverture
S
Schéma de refroidissement
SMA*
Solution de profondeur minimale
T
Température
Test de but
Test de but à l’extraction
Test de but à la génération
V
Voisinage
À propos de cette unité
Crée ton propre Matériel d'Étude
Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.