Vous êtes sur la page 1sur 2

FIT 4 [INF444] 2009/10

Intelligence artificielle
Vincent Labatut
Universit Galatasaray

TP 3

recherche aveugle

1 Prsentation
Aprs avoir formalis le problme du berger, nous allons le rsoudre avec les mthodes vues en cours. Vous trouverez avec ce sujet une archive contenant certaines classes du TP prcdent, ainsi que de nouvelles classes permettant de visualiser un arbre de recherche : les packages exception et problem sont identiques ceux du TP prcdent. le package gui contient les classes lies linterface graphique. le package tree contient des classes permettant de manipuler un arbre de recherche : o la classe SearchNode reprsente un nud de recherche, caractris notamment par un tat, une profondeur dans larbre de recherche et un cot. o la classe SearchLink reprsente un lien dans larbre de recherche, caractris par un nud parent (origin), un nud fils (target) et une action. o la classe SearchTree reprsente larbre, dfini par un ensemble de nuds de recherche, un ensemble de liens entre ces nuds et une rfrence vers le problme trait. le package algorithms contient des classes que vous devrez complter en implmentant les algorithmes vus en cours. La classe principale SearchTreeLaunch est situe dans le package tree. Elle est charge de construire linterface graphique. Cette interface propose diffrents boutons permettant de crer des threads qui vont excuter le code contenu dans les classes implmentant Runnable situes dans le package algorithms.

2 Parcours en largeur
Exercice 1
Ouvrez la classe algorithms.BreadthFirstRunnable, et compltez la mthode makeTree de manire raliser un parcours en largeur de larbre de recherche. Java offre plusieurs implmentations de la file de donnes. Le plus simple est dutiliser la classe gnrique LinkedList<T> o T est la classe des donnes qui seront stockes dans la file. Les oprations sont effectues grce aux mthodes suivantes : tester si la file est vide : isEmpty. enfiler : offer. renvoyer la tte de la file et dfiler : poll. Remarques : la mthode SearchTree.getRoot() renvoie un SearchNode correspondant la racine de larbre de recherche. la mthode SearchTree.isFinalNode(SearchNode node) permet de tester si un nud de recherche est terminal.

Intelligence artificielle

FIT 4 [INF444] 2009/10

TP 3 1/2

recherche aveugle

la mthode SearchTree.developNode(SearchNode node) dveloppe un nud et renvoie un itrateur sur ses fils (i.e. les nuds issus du dveloppement). chaque fois que vous visitez un nud, vous devez le signaler larbre de recherche en utilisant la mthode SearchTree.markVisitedNode(SearchNode node, int iteration) o node reprsente le nud visit et iteration le numro de litration correspondant cette visite. pour faciliter le dbuggage, il est conseill dafficher, chaque itration, le droulement de lalgorithme dans la console texte dEclipse en utilisant System.out.print. vous pouvez utiliser linstruction Thread.sleep(DELAY); chaque itration pour ralentir le droulement de lalgorithme et pouvoir observer plus facilement les modifications apportes larbre. une fois que lexcution de lalgorithme est termine, vous pouvez utiliser SearchTree.getPath(SearchNode solution) pour rcuprer le chemin de la solution, et SearchTree.pathToString(Vector<SearchLink> path) pour afficher ce chemin sous forme textuelle.

Exercice 2
Excutez le programme en lanant SearchTreeLaunch, et observez le droulement de lalgorithme. Combien ditrations sont ncessaires pour trouver la solution ? Que reprsentent les valeurs en gras ? Que reprsentent les valeurs en rouge ?

3 Parcours en profondeur
Exercice 3
Dans la classe DepthFirstRunnable, compltez la mthode makeTree de manire raliser un parcours en profondeur de larbre de recherche. La classe LinkedList<T> implmente (en plus de linterface de file) une interface de pile : tester si la file est vide : isEmpty. empiler : push. renvoyer le sommet de la pile et dpiler : pop.

Exercice 4
Excutez votre programme, et observez lvolution de larbre. Quel est le problme, et quelle est sa cause ?

4 Modification du parcours en profondeur


Exercice 5
Pour contourner la limitation du parcours en profondeur, une solution consiste implmenter le parcours par approfondissement itratif vu en cours. En vous aidant de DeepFirstRunnable, compltez la classe DeepFirstItRunnable de manire implmenter cet algorithme. Excutez le programme : combien ditrations sont ncessaires pour trouver la solution ?

Exercice 6
Une autre approche, sur un petit problme comme celui-ci, est de tenir une liste des tats visits, et de ne pas dvelopper un nud de recherche si ltat quil contient a dj t visit via un autre nud de recherche. En vous aidant de DeepFirstRunnable, compltez la classe DeepFirstModRunnable de manire implmenter cette modification. Excutez le programme : combien ditrations sont ncessaires pour trouver la solution ?

Intelligence artificielle

FIT 4 [INF444] 2009/10

TP 3 2/2