INTELLIGENCE ARTIFICIELLE IAR-1001
Contenu du cours 2 Algorithmes de recherche dans un graphe pour la résolution de problèmes Introduction Définition d’un problème Algorithme de résolution de problème simple Recherche non-informée Recherche heuristique LECTURES: Chapitres 3 Russell & Norvig Notes de cours (site ftp UQTR)
Algorithmes de recherche dans un graphe pour la résolution de problèmes Introduction Un agent réflexe base ses actions sur un mappage direct des états vers les actions. Ces agents ne peuvent fonctionner correctement dans des environnements pour lesquels ce mappage État/Actions est trop volumineux et ne peut être stocké et dont l’apprentissage est trop long. Les agents Goal-based, considèrent les actions futures et l’utilité de leurs conséquences sur les environnements. Les agents goal-based sont aussi appelés agent de résolution de problème (problem-solving agent). Les agents Problem-solving utilisent des représentations atomiques de telle sorte que les états du monde sont considérés chacun dans leur ensemble (comme un tout).
Algorithmes de recherche dans un graphe pour la résolution de problèmes Introduction (exemples)
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème Un problème sera défini par cinq éléments: Un état initial Un ensemble d’actions possibles Une fonction de successeur, qui définit l’état résultant de l’exécution d’une action dans un état Un ensemble d’états buts Une fonction de coût, associant à chaque action un nombre positif (le coût associé à l’action)
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème Un problème est donc vu comme un graphe orienté où les noeuds sont des états accessibles depuis l’état initial et où les arcs sont des actions. Ce graphe est donc l’espace des états. Une solution sera un chemin à partir de l’état initial à un état but. Une solution est optimale si la somme des coûts des actions du chemin est minimale parmi toutes les solutions du problème.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 1: 8-Puzzle/Taquin) Nous avons une grille 3X3 de neuf cases où sont placées huit tuiles étiquetées par les nombres 1 à 8, une des cases restant vide. Une tuile située à côté de la case vide peut alors être déplacée vers cette case. L’objectif du jeu est d’arriver à obtenir une certaine configuration des tuiles dans la grille.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 1: 8-Puzzle/Taquin) 2 états possibles du jeu État final État initial
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 1: 8-Puzzle/Taquin) Formalisation possible de ce problème : Les états sont des configurations des huit tuiles dans les neuf cases de la grille. Etat initial: n’importe quel état Actions: 4 actions possibles de déplacer une tuille: haut, bas, gauche, droite. Fonction de successeur: Spécifie les états résultants des différentes actions (ex: la fonction nous dira que l’exécution de l’action droite dans le premier état produira le deuxième état). Test de but: L’état but est unique et fixé au début du jeu (n’importe quel état peut être choisi comme état but, même si en pratique il s’agit de remettre les nombres dans l’ordre).
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 1: 8-Puzzle/Taquin) Formalisation possible de ce problème :
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 1: 8-Puzzle/Taquin) Formalisation possible de ce problème : Coût des actions: Chaque déplacement d’une tuile a coût de 1 (pour trouver une solution avec le moins de déplacements). Le N-puzzle est souvent utilisé pour tester les algorithmes de recherche. En augmentant la taille de la grille, nous pouvons créer les problèmes de plus en plus complexes. Les algorithmes d’aujourd’hui arrivent à résoudre les N-puzzles 3X3 et 4X4 (qui ont des espaces d’états de taille 181440 et d’environ 1.3 milliard), mais les instances du N-Puzzle 5X5 (avec un espace d’états de taille 1025) restent difficiles.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 2: 8 Reines) L’objectif de ce jeu est de placer huit reines sur un échiquier (une grille 8X8) telle qu’aucune reine attaque une autre reine, c’est à dire qu’il n’y a pas deux reines sur la même colonne, la même ligne, ou sur la même diagonale. Une quasi-solution Solution possible
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 2: 8 Reines) Formalisation possible de ce problème : États: Toutes configurations de 0 à 8 reines sur la grille. État initial: La grille vide. Actions: Ajouter une reine sur n’importe quelle case vide de la grille. Fonction de successeur: La configuration qui résulte de l’ajout d’une reine à une case spécifiée à la configuration courante. Test de but: Une configuration de huit reines avec aucune reine sous attaque. Coûts des actions: Ce pourrait être ou non un coût constant pour chaque action - nous ne nous intéressons pas au chemin, seulement l’état but obtenu.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 2: 8 Reines) Formalisation possible de ce problème : On peut réduire l’espace d’états drastiquement (de 3 X 1014 à 2057 ) en observant qu’il est inutile de continuer de développer certaines configurations si il y a déjà un conflit (comme on ne peut pas résoudre le conflit en ajoutant des reines supplémentaires).
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 2: 8 Reines) Formalisation possible de ce problème : États initiaux: Toutes configurations de n reines (0 <= n <= 8), une reine par colonne dans les n colonnes plus à gauche, avec aucun conflit. Actions: Ajouter une reine dans une case vide dans la colonne vide la plus à gauche de façon à éviter un conflit. Ces deux formalisations sont incrémentales car nous plaçons des reines une par une sur la grille. Mais ce n’est pas la seule façon de faire. Nous pourrions commencer avec les huits reines sur la grille (une par colonne) et puis changer la position d’une reine à chaque tour.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 2: 8 Reines) Formalisation possible de ce problème : États initiaux: Une configuration de 8 reines telle qu’il n’y a qu’une seule reine par colonne. Etat initial: Un état choisi aléatoirement. Actions: Changer la position d’une reine dans sa colonne. Notons qu’avec les caractérisations incrémentales nous ne tombons jamais sur un état déjà visité, mais ce n’est pas le cas avec cette dernière formalisation (car nous pouvons changer la position d’une reine et après la remettre dans sa position d’origine) ni avec le N-puzzle (où nous pouvons très bien déplacer une tuile et la remettre à sa place au coup suivant). Dans ces derniers cas, il nous faut faire attention pour ne pas explorer une deuxième fois un chemin déjà exploré ou de tourner en boucle.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 3: Robot aspirateur) États: L’état de l’agent est représenté par sa présence ou non dans un emplacement (A ou B) et la présence ou non de détritus. Chaque emplacement peut être soit propre ou sale. 2 × 22 = 8 états sont alors possibles, ou n X 2n états dans un environnement avec n emplacements. État initial: N’importe quel état possible. Actions: 3 actions: Left, Right, Suck. Fonction de successeur (modèle de transition): Chaque action a un effet attendu, sauf dans les cas ou certaines actions ont aucun effet: ex: Left dans A, ou Right dans B, ou Suck dans A ou B déjà propre. Test de but: A et B sont propres. Coût des actions: Coût 1 par état visité, donc le coût total est le nombre d’états visités.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 3: Robot aspirateur)
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 4: Chemin le plus court) Les problèmes de planification sont courants dans la vie de tous les jours. Par exemple, le problème de trouver le chemin le plus court pour atteindre une destination. Maintenant des GPS dédiés à ce genre de tâche sont largement utilisés. Citons aussi les systèmes de planification de voyage qui cherchent des itinéraires en transports en commun, en train ou en avion.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 4: Chemin le plus court) Formalisation possible de ce problème : États: Chaque état est composé d’un aéroport et la date et l’heure actuelle. Etat initial: L’aéroport de départ, la date de départ souhaitée, et l’heure à partir de laquelle le client peut partir. Actions: Ce sont des vols d’un aéroport à un autre. Fonction de successeur: Les actions possibles sont des vols qui partent de l’aéroport de l’état actuel, plus tard que l’heure actuelle (en fait, nous devrons aussi exiger une certaine durée entre l’arrivée dans un aéroport et le prochain vol, sinon le client risque de rater sa correspondance). Test de but: Les états où le client est à l’aéroport destination.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 4: Chemin le plus court) Formalisation possible de ce problème : Coût des actions: Dépend des préférences du client. Pourrait être 1 pour chaque action (pour minimiser la nombre de connections), ou la durée des vols (pour minimiser la durée du voyage), ou le prix des trajets (pour trouver le voyage le moins cher).
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 4: Chemin le plus court) C(In(Arad),Go(Sibiu), In(Sibiu)) S G
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 4: Chemin le plus court) Formalisation possible de ce problème : États: Chaque état est composé d’une ville. Etat initial: ex: In(ARAD) . Actions: Étant donné s (état actuel), ACTIONS(s) retourne l’ensemble d’actions pouvant être exécutées sur s. Chaque action est donc applicable sur s. (ex: à partir de l’état In(Arad), les actions applicables sont: {Go(Sibiu), Go(Timisoara), Go(Zerind)}. Fonction de successeur: Le modèle de transition (successeur) (RESULT(s, a)) retourne l’état résultant de l’action a sur s. (ex: RESULT(In(Arad),Go(Zerind)) = In(Zerind))
Algorithmes de recherche dans un graphe pour la résolution de problèmes Définition d’un problème (exemple 4: Chemin le plus court) Formalisation possible de ce problème : Test de but: Le but à atteindre est l’ensemble singleton {In(Bucharest )}. Coût des actions: Le coût d’un chemin pourrait être sa longueur (km) et donc la somme du coût de chaque action individuelle permettant de passer d’une ville à l’autre sur ce chemin. Le coût individuel de l’action a sur l’état s pour passer à l’état s’ est donné par c(s, a, s’).
Algorithmes de recherche dans un graphe pour la résolution de problèmes Algorithme de résolution de problème simple (forme générale)
Algorithmes de recherche dans un graphe pour la résolution de problèmes Algorithme générique de résolution de problème simple (fonction Search())
Algorithmes de recherche dans un graphe pour la résolution de problèmes Algorithmes de recherche (recherche dans les arbres/graphes) Arbre de recherche partiel
Algorithmes de recherche dans un graphe pour la résolution de problèmes Algorithmes de recherche (recherche dans les arbres/graphes)
Algorithmes de recherche dans un graphe pour la résolution de problèmes Algorithmes de recherche (recherche dans les graphes) Nœud ne pouvant plus être étendu ces successeurs étant déjà dans l’ensemble des nœuds explorés
Algorithmes de recherche dans un graphe pour la résolution de problèmes Algorithmes de recherche (structure de données requise pour représenter un noeud) n.STATE: l’état dans l’espace des états associé au noeud; n.PARENT: le noeud dans l’arbre de recherche ayant généré ce noeud; n.ACTION: l’action appliquée au parent permettant de générer ce noeud; n.PATH-COST: le coût g(n), du chemin pour atteindre ce noeud à partir du noeud initial.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Algorithmes de recherche (structure de données requise pour représenter un noeud) 3
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée Ces algorithmes ne disposent pas d’informations supplémentaires pour pouvoir distinguer des états prometteurs (ce ne peux pas être le cas par exemple des programmes joueurs d’échecs qui ne peuvent explorer toutes les possibilités, et se concentrent donc à chaque étape sur un petit nombre de coups qui leur semblent être les meilleurs). En l’absence d’informations, ces algorithmes font une recherche exhaustive de tous les chemins possibles depuis l’état initial.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée (parcours en largeur) Ce type d’algorithme de recherche examine d’abord l’état initial, puis ses successeurs, puis les successeurs des successeurs, etc. Tous les noeuds d’une certaine profondeur sont examinés avant les noeuds de profondeur supérieure. Pour implémenter cet algorithme, il suffit de placer les nouveaux noeuds systématiquement à la fin de la liste de noeuds à traiter (FIFO). Parcours en largeur dans un arbre binaire
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée (parcours en largeur: algorithme)
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée (parcours en largeur: algorithme) Le parcours en largeur est un algorithme de recherche complet à condition que le nombre de successeurs de chaque état soit toujours fini (ce qui est souvent le cas dans les problèmes courants). Pour voir pourquoi, soit d le nombre minimal d’actions nécessaires pour atteindre un état but depuis l’état initial. Comme nous examinons les noeuds profondeur par profondeur, et qu’il n’y a qu’un nombre fini b de noeuds à chaque profondeur (ce ne serait pas le cas si un noeud pouvait avoir un nombre infini de successeurs), nous atteindrons forcément le niveau d.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée (parcours en largeur: algorithme) Ce parcours trouve toujours un état but de plus petite profondeur possible. Donc si nous cherchons une solution quelconque, ou une solution avec le moins d’actions possibles, le parcours en largeur est optimal. Ce parcours est optimal quand le coût du chemin ne dépend que du nombre d’actions de ce chemin. Par contre le parcours en largeur n’est pas optimal dans le cas général.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée (parcours en largeur: algorithme) La complexité de cet algorithme. Supposons que chaque état possède b successeurs et que d soit le nombre minimal d’actions pour relier l’état initial à un état but. Dans le pire des cas, nous allons examiner tous les noeuds de profondeur au plus d afin de trouver l’état but qui se trouve à cette profondeur. Nous allons alors produire: b0 + b1 + b2 + b3 + …. + bd-1 + bd = O(bd) nœuds. Nous aurons alors O(bd−1) noeuds dans l’ensemble explored et O(bd) noeuds dans l’ensemble de la frontière.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée (recherche à coût uniforme) Quand chaque étape d’un parcours sont à coût égal, la recherche en largeur est optimale puisqu’à chaque état c’est le noeud le moins profond non étendu qui est étendu. Pour être optimale avec n’importe quelle fonction de coût (step-cost function). Plutôt que d’étendre le noeud le moins profond non étendu, une recherche à coût uniforme étendra le noeud n avec le chemin à coût minimum g(n). Ce qui est possible en stockant les noeuds frontière dans une liste triée selon g(n).
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée (recherche à coût uniforme: algorithme)
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée (recherche à coût uniforme: algorithme) En plus d’ordonner la liste des noeuds frontière selon g(n), il y a deux autres différences avec le parcours en largeur: 1) Le test de but (goal test) est effectué à un noeud lors de sa sélection pour l’expansion plutôt que lorsqu’il est généré. La raison découle du fait que quand le premier noeud but (goal node) qui est généré peut être sur un chemin non optimal. 2) Un test est ajouté dans le cas ou un meilleur chemin est trouvé vers un noeud déjà sur la frontière.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée (recherche à coût uniforme: algorithme) Ces deux modifications sont observables dans l’exemple où le problème consiste à se rendre de Sibiu à Bucharest. Les successeurs de Sibiu sont Rimnicu Vilcea et Fagaras, avec des coûts de 80 de 99, respectivement. Le noeud à coût minimum, Rimnicu Vilcea, est alors étendu, ajoutant Pitesti avec comme coût 80 + 97=177. Le noeud à coût minimum est alors Fagaras, qui est ensuite étendu, ajoutant Bucharest au coût de 99+211=310.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée (recherche à coût uniforme: algorithme) Un noeud cible (Bucharest) vient alors d’être généré mais la recherche se poursuit, Pitesti étant choisi pour être étendu et ajoutant alors un second chemin vers Bucharest avec un coût de 80+97+101= 278. L’algorithme vérifie si ce nouveau chemin est meilleur que le plus ancien; si il l’est l’ancien est éliminé. Bucharest ayant un coût g() de 278, est sélectionnée pour être étendu et la solution est retournée.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée (recherche à coût uniforme: algorithme)
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée (parcours en longueur) Le parcours en profondeur suit le chemin courant le plus longtemps possible. Il est facile à implémenter : il faut tout simplement mettre les successeurs du noeud courant au début de la liste de noeuds à traiter (LIFO).
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée (parcours en longueur)
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée (parcours en longueur) Le parcours en profondeur n’est pas complet parce que l’algorithme peut continuer sur un chemin infini, ignorant complètement un état but qui se trouve sur un autre chemin. Si par contre, nous n’avons qu’un nombre fini de chemins possibles (ce qui n’est pas souvent le cas), le parcours en profondeur sera complet. L’algorithme n’est pas optimal : il n’y a rien qui garantie que le premier état but trouvé sera le bon. La complexité sera pour s successeurs et une profondeur maximale de m actions, dans le pire des cas nous aurions besoin d’examiner tous les sm noeuds pour trouver une solution.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche non-informée (parcours en longueur) Ce parcours n’est pas optimal mais sa complexité en espace est raisonnable. Pour un problème ayant s successeurs et un profondeur maximal de m actions, 1+(m*(s−1)) nœuds sont conservés en mémoire (correspondant au chemin actuellement en développement plus les successeurs de profondeur 1 que nous n’avons pas encore traités, les successeurs de profondeur 2 que nous n’avons pas encore traités, etc.). La complexité en espace est donc de O(s*m).
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique Les algorithmes de recherche non-informés font une recherche exhaustive de tous les chemins possibles, ce qui les rend inefficaces voire inutilisables pour résoudre des problèmes de grande taille. Les algorithmes de recherche heuristiques utilisent des informations supplémentaires pour pouvoir mieux orienter la recherche. Une fonction d’évaluation f() permet de déterminer l’ordre dans lequel les noeuds sont traités : la liste de nœuds à traiter est organisée en fonction du f() des noeuds, avec les nœuds de plus petite valeur en tête de liste.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique Une fonction heuristique h() où h(n) = coût estimé du chemin de moindre coût reliant n à un état but. h(n) = 0 pour n étant un nœud but. Pour trouver la distance la plus courte entre Arad et Bucarest, h(n) pourrait être la distance à vol d’oiseau entre la ville n et Bucarest. Distance euclidienne entre une ville et Bucarest
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique (Best-First/meilleur d’abord) L’algorithme “best-first search” est d’examiner les noeuds qui semblent les plus proches d’un état but, pour tenter d’atteindre le plus vite possible la solution. Consiste à utiliser la fonction heuristique h() comme fonction d’évaluation (f(n) = h(n)).
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique (Best-First/meilleur d’abord) Chemin trouvé entre Arad et Bucarest
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique (Best-First/meilleur d’abord) Chemin trouvé entre Arad et Bucarest: Best-first n’est ni complet ni optimal. N’est pas complet car l’algorithme peut tourner en boucle et ce même s’il existe une solution. Il n’est pas optimal, puisque le chemin trouvé (Arad, Sibiu, Fagaras, Bucarest) retourné par l’algorithme est plus long que le chemin (Arad, Sibiu, Rimnicu Vilcea, Pitesti, Bucarest). Pour une profondeur maximale de p et s successeurs, la complexité en temps et en espace O(sp) dans les pire des cas, même si la complexité dépend en pratique de la qualité de la fonction heuristique.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique (A*) Best-first search prévilégie les noeuds dont les états semblent les plus proche d’un état but, mais il ne prend pas en compte les coûts des chemins reliant l’état initial à ces noeuds. Cette information importante est le coût f(n) d’un chemin passant par un noeud n est la somme du coût du chemin entre l’état initial et n et le coût du chemin reliant n à un état but. Dans cette fonction de coût g(n) est le coût du chemin entre l’état initial et n. La fonction d’évaluation utilisée par la recherche A* est donnée par: f(n) = g(n) + h(n)
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique (A*) L’algorithme de recherche A* est complet et optimal s’il y a un nombre fini de successeurs et si la fonction h(n) est admissible, c’est à dire que la valeur h(n) ne doit jamais être supérieure au coût réel du meilleur chemin entre n et un état but. L’heuristique utilisant les distances à vol d’oiseau est un exemple d’une fonction heuristique admissible parce que cette distance (la valeur heuristique) n’est jamais supérieure à la distance sur la route (le vrai coût).
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique (A*) Pour éliminer les nœuds redondants possibles (permettant alors de ne garder que le premier chemin amenant à un état), il faut alors placer une restriction plus forte sur la fonction heuristique h(n) pour ainsi garantir l’optimalité: la fonction doit être cohérente. Une fonction heuristique est cohérente si pour tout noeud n et tout successeur n’ obtenu à partir de n en faisant l’action a, nous avons l’inégalité suivante : h(n) <= c(n, a, n’) + h(n’)
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique (A*) Les fonctions heuristiques cohérentes sont toujours admissibles, mais les fonctions heuristiques admissibles sont très souvent, cohérentes. La complexité de la recherche A* dépend de la fonction heuristique utilisée. En général, la complexité en temps et en espace est grande, ce qui rend la recherche A* mal adapté pour les problèmes de grande taille.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique (RBFS) Recursive best-first search (RBFS) est un algorithme récursif simple similaire à la recherche best-first, mais qui est linéaire pour l’utilisation de la mémoire. Sa structure est similaire à celle utilisée pour la recherche récursive depth-first, mais plutôt que de continuer indéfiniment en profondeur dans le chemin courant, une variable f limit est utilisée pour monitorer la f-value du meilleur chemin alternatif émanent d’un des parents du noeud courant. Si la f-value excède cette limite, la récursion revient en arrière sur le meilleur chemin alternatif. Durant un retour en arrière, RBFS remplace la f-value de chaque noeud sur ce chemin avec la meilleure f-value parmis ses enfants. RBFS mémorise la f-value du meilleur noeud feuille dans le sous arbre ignoré et pourrait décider ultérieurement de réétendre ce sous arbre.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique (RBFS: algorithme)
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique (RBFS: exemple) f-limit f-cost
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique (RBFS: exemple)
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique (RBFS: exemple)
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique (Autres fonctions: N-Puzzle) Pour résoudre le 8-puzzle il faut glisser les tuiles horizontalement ou verticalement dans l’espace tant que la configuration actuelle (état actuel) n’atteigne la configuration but. En moyenne, le coût de la solution d’un 8-Puzzle généré aléatoirement est de 22 déplacements (steps). Le nombres de déplacements possibles est d’environ 3 (Quand la tuile vide est dans le centre (4 steps possibles); quand elle est dans un coin (2) ; et sur les bordures (3). Ce qui veut dire qu’une recherche exhaustive de profondeur 22 comportera environ 322 (3.1 x 1010) états). Une recherche dans un graphe permettrait de réduire l’ensemble des états possible d’un facteur de 170 000 sachant que seulement 9!/2 = 181,440 états distincts sont atteignables.
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique (Autres fonctions: N-Puzzle) Ce nombre d’états est gérable mais ce nombre pour un 15-puzzle est environ 1013. Pour pouvoir utiliser A* nous devrions utiliser une fonction heuristique: h1: le nombre de tuiles mals placées par rapport à la configuration but cherchée. h1 est admissible puisque chaque tuile doit au moins être déplacée une fois. h1= 8
Algorithmes de recherche dans un graphe pour la résolution de problèmes Recherche heuristique (Autres fonctions: N-Puzzle) Pour pouvoir utiliser A* nous devrions utiliser une fonction heuristique: h2: la somme des distances de chaque tuile par rapport à sa position finale dans la configuration but. Les tuiles ne pouvant bougées diagonalement, la distance sera alors comptée comme la somme des distances horizontale et verticale. h2 est aussi admissible puisque tous les déplacements possibles se font une position à la fois vers leur position but. h2 = 3 + 1 + 2 + 2 + 2 + 3 + 3 + 2 = 18