Aller au contenu
Kudos AI

La résolution de problèmes comme recherche

Formuler un problème par des états, des actions et un test de but ; les quatre critères sur lesquels toute stratégie est jugée ; et pourquoi c’est la mémoire, non le temps, qui arrête habituellement la recherche en largeur.

FondementsModule 125 min · 100 XP
Un compteur de frontière qui grimpe niveau par niveau, puis treize jours placés à côté d’un pétaoctet - le temps est une gêne, la mémoire est un mur.

Avant de pouvoir être fouillé, un problème doit être décrit d’une manière particulière. La description est délibérément dépouillée, et c’est cette sobriété qui permet à un même algorithme de résoudre un calcul d’itinéraire, un casse-tête et un ordonnancement sans savoir duquel il s’agit.

Les cinq parties d’un problème de recherche

Un problème de recherche est donné par un état initial, un ensemble d’actions disponibles dans chaque état, un modèle de transition indiquant vers quel état mène chaque action, un test de but, et un coût de pas pour chaque action. Ensemble, les trois premiers définissent implicitement l’espace d’états : le graphe de tous les états atteignables depuis le départ.

Le mot implicitement fait tout le travail. L’espace d’états n’est jamais écrit. Il est engendré à la demande, un successeur à la fois, ce qui rend possible la fouille d’espaces comptant plus d’états qu’il n’y a d’atomes dans l’univers observable. Une solution est une suite d’actions de l’état initial jusqu’à un but, et une solution optimale est une solution de coût total minimal.

Quatre questions à poser sur toute stratégie

Chaque stratégie de cette leçon est jugée sur les mêmes quatre critères :

  • Complétude - si une solution existe, l’algorithme est-il garanti de la trouver ?
  • Optimalité - trouve-t-il la solution la moins coûteuse ?
  • Complexité en temps - combien de nœuds engendre-t-il ?
  • Complexité en espace - combien en garde-t-il en mémoire à la fois ?

La complexité s’exprime avec le facteur de branchement bb, le nombre de successeurs par nœud, et la profondeur dd du but le moins profond.

La largeur d’abord et le mur de la mémoire

La recherche en largeur développe le nœud non développé le moins profond : elle trouve donc un but le moins profond. Elle est complète quand bb est fini, et engendre de l’ordre de bdb^d nœuds à condition que le test de but soit appliqué à chaque nœud dès qu’il est engendré. Reportez le test au développement, comme la recherche à coût uniforme doit le faire, et tout le niveau suivant est engendré d’abord : O(bd+1)O(b^{d+1}).

Le piège est l’espace. Toute la frontière est conservée d’un coup, donc la mémoire est elle aussi en O(bd)O(b^d) - la même exponentielle que le temps. Russell et Norvig tabulent ce que cela signifie avec b=10b = 10, un million de nœuds par seconde et un kilo-octet par nœud, et en tirent la leçon sans détour :

les besoins en mémoire sont un problème plus grave pour la recherche en largeur que ne l’est le temps d’exécution.

Une recherche à la profondeur 12 prend environ treize jours, ce que l’on pourrait attendre. Elle demande aussi un pétaoctet de mémoire, dont aucune machine ordinaire ne dispose. Le temps est une gêne ; la mémoire est un mur.

Il y a une seconde limite. La recherche en largeur renvoie le but le moins profond, qui n’est le but le moins coûteux que si tous les pas coûtent la même chose. Quand les coûts diffèrent, le remède est la recherche à coût uniforme : développer le nœud de plus faible coût de chemin g(n)g(n) plutôt que de plus faible profondeur. Elle est optimale pour tous coûts de pas positifs, même si elle peut gaspiller de l’effort à explorer de grands arbres de tout petits pas avant d’essayer un grand.

La profondeur d’abord et l’approfondissement itératif

La recherche en profondeur descend aussi loin qu’elle peut avant de revenir en arrière : elle ne stocke donc que le chemin courant et ses frères non développés, soit O(bm)O(bm) en mémoire pour une profondeur maximale mm. L’économie est spectaculaire. Le prix est qu’elle n’est ni optimale ni - sur un espace infini ou comportant des boucles - complète.

L’approfondissement itératif prend la bonne moitié de chacune. On lance une recherche à profondeur limitée avec la limite 0, puis 1, puis 2, jusqu’à trouver un but :

StratégieComplèteOptimaleTempsEspace
Largeur d’abordouisi coûts égauxO(bd)O(b^d)O(bd)O(b^d)
Coût uniformesi coûts de pas ≥ϵ>0\geq \epsilon > 0oui-grand
Profondeur d’abordnonnonO(bm)O(b^m)O(bm)O(bm)
Approfondissement itératifouisi coûts égauxO(bd)O(b^d)O(bd)O(bd)

Les deux lignes en O(bd)O(b^d), ainsi que les treize jours et le pétaoctet ci-dessus, supposent le test de but à l’engendrement ; au développement, chacune devient O(bd+1)O(b^{d+1}).

L’objection évidente est que les niveaux supérieurs sont réengendrés à chaque itération. La réponse est que, dans un arbre à facteur de branchement à peu près constant, presque tous les nœuds sont au dernier niveau, qui n’est engendré qu’une fois : la répétition coûte donc un facteur constant tandis que l’économie de mémoire est exponentielle. C’est pourquoi l’approfondissement itératif est la méthode non informée standard quand l’espace est vaste et la profondeur de la solution inconnue.

Interactif : la même carte, fouillée de trois façons

Chaque h ici est honnête : aucun ne surestime le coût restant réel.

4954Sh = 6Dh = 2Ch = 4Gh = 0
Route trouvée
S - D - G
Coût
13
Moins cher possible
9
Sur la frontière
C:4
Priorité:

La gloutonne a pris S - D - G pour un coût de 13, contre 9 au mieux. Elle est allée en D parce que h(D) = 2 paraît plus proche que h(C) = 4 - et l’est vraiment. L’estimation n’était pas fausse. Ce qu’elle a ignoré, ce sont les 4 déjà dépensés pour y arriver, et quand le détour révèle son prix le nœud est développé et jamais reconsidéré. Passez la priorité à f = g + h et regardez la même carte, avec la même heuristique, donner la route la moins chère.

Avant le quiz

Sachez énoncer les cinq parties d’un problème de recherche, énumérer les quatre critères d’évaluation, donner les complexités en temps et en espace de chacune des stratégies ci-dessus, dire précisément quand la recherche en largeur est optimale, et expliquer le compromis qui rend l’approfondissement itératif rentable malgré son travail répété. Le module suivant ajoute une heuristique et demande quelle part de cet espace peut être sautée.

Références et lectures complémentaires

  • Stuart Russell, Peter Norvig, Artificial Intelligence: A Modern Approach, Pearson (3rd edition), 2010· Bibliothèque de référence Kudos AI

Les œuvres protégées par le droit d’auteur sont citées à titre de référence uniquement et ne sont pas hébergées ici ; veuillez consulter l’éditeur pour y accéder.

Débloquez tout le parcours

Cette première leçon est gratuite. Inscrivez-vous pour passer le quiz de maîtrise, gagner de l’XP et débloquer tous les modules, avec d’autres exemples interactifs et exécutables.