IFT3330/6330 Intelligence artificielle
Devoir 2 - planification
(à rendre avant midi le 21 novembre)
1. Description du problème
Ce devoir consiste à réaliser un algorithme de planification POP - Partial Order Planifier - en Prolog. Cet algorithme
est décrit dans le livre de référence Russell et Norvig. Le but de ce devoir est de vous permettre d'avoir un contact
concret avec la réalisation d'un tel algorithme.
2. Application
Nous considérons l'application dans le monde des blocs. Le problème est comme crit dans le livre. Plus
précisément:
Il y a un certain nombre de blocs de même taille sur une table, et un bras mécanique. Ce bras mécanique peut
prendre un bloc si ce bloc est libre (i.e. aucun autre bloc n'est sur lui) et le déplacer à un autre endroit, soit sur la
table, soit sur un autre bloc libre. On suppose que la table est suffisamment grande, donc un bloc peut toujours être
mis sur la table. Le bras mécanique ne peut pas saisir plus d'un bloc à la fois.
Le programme de planification doit planifier une suite d'opérations par le bras mécanique pour transformer une
configuration de blocs en une autre.
3. Votre programme
L'algorithme de POP est décrit dans le livre (pp. 356). Cependant, cet algorithme ne donne pas tous les détails (e.g.
comment tester SOLUTION(plan), et comment faire SELECT-SUBGOAL(plan)). C'est à vous de compléter ces
détails selon vos jugements. Toue réalisation raisonnable de ces détails sont acceptés. L'objectif principal est la
réalisation globale de la planification. Il est aussi à noter qu'il est possible de modifier certains détails de l'algorithme
pour mieux l'adapter au langage Prolog.
En ce qui concerne la représentation d'une situation, on impose la façon suivante: Une situation est représentée
comme une liste de prédicats. Chaque prédicat décrit un aspect de la situation. Par exemple, la situation suivant:
est représentée par:
[on(a,b), clear(a), clear(c), on(b, table), on(c,table)].
Un plan est composé d'une liste d'opérations. Comme dans le livre, nous définissons les deux opérations suivantes:
move(B,X,Y): pour déplacer le bloc B de X à Y
move_to_table(B,X): pour déplacer le bloc B de X à la table.
Si la configuration finale est la suivante:
a
b
c
a
b
c
Le plan doit idéalement contenir:
[move_to_table(a,b), move(c,table,a), move(b,table,c)].
Finalement, l'algorithme POP résulte seulement en un plan partiellement ordonné qui n'est peut pas être exécuté par
le bras mécanique. Il est aussi nécessaire de créer un plan totalement ordonné à partir de ce plan partiellement
ordonné. C'est aussi à vous d'imaginer une façon pour le réaliser.
Concrètement, votre programme doit contenir un prédicat planifier(Debut, Final, Plan) Debut et
Final représentent respectivement la situation de départ et la situation finale, et Plan doit contenir le plan
(totalement ordonnée) que votre programme doit trouver.
Pour ce devoir, le nombre de blocs dans ce monde n'est pas fixe. Chaque bloc est représenté par une constante
différente de table.
4. Comparaison avec la recherche
La recherche en profondeur d'abord peut aussi être utilisée pour trouver un plan. Pour pouvoir comparer, on vous
demande aussi de programmer un autre prédicat recherche(Debut, Final, Plan). Dans votre rapport,
vous devez comparer cette planification par la recherche avec celle avec POP.
5. Remise
La date limite de la remise (par le programme remise) est le 21 nov. avant midi. Le rapport contenant une
description de votre réalisation et une discussion et comparaison, d'environ 3-5 pages, doit être rendu le même jour.
Chaque jour de retard pour la remise entraînera 1 point de pénalité.
6. Évaluation
Ce devoir compte pour 12 points et doit être réalisé par en groupe de 2 personnes (ou seul). Les points sont attribués
de la façon suivante:
- Réalisation de l'algorithme POP: 5 points
- Créer un plan ordonné à partir d'un plan partiellement ordonné: 2 points
- Réalisation de planification par la recherche: 2 points
- Rapport: 3 points
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !