La planification en Prolog Planification vs. Recherche

Transcription

La planification en Prolog Planification vs. Recherche
La planification en Prolog
Notes de démonstration, Ift3330
François Paradis
Novembre 2005
Planification vs. Recherche
• Augmente l'efficacité en ne générant pas les
chemins non pertinents
• Travaille sur des plans (i.e. stratégie) plutôt
que sur des états
– représentation locale, e.g. les relations entre
objets
IFT3330, Demo Planification, v1.1
2
1
STRIPS
• Formalisme de représentation dû à un système de
Richard Fikes and Nils Nilsson (Stanford
Research Institute Problem Solver)
• Composé de:
– conditions (prédicats)
– états initiaux et finaux (ensemble de conditions)
– opérateurs (règles), comprenant des pré-conditions et
effets (ajout et/ou retrait de conditions)
– plans (suite d'opérateurs)
IFT3330, Demo Planification, v1.1
3
Exemple du singe (1/2)
Une pièce où il y a un singe (position a), une boîte
(b) et des bananes accrochées au plafond (c).
conditions:
situé, e.g. situé(singe,a)
niveau, e.g. niveau(singe,bas)
possède, e.g. possède(singe,bananes)
état initial:
situé(singe,a), situé(boîte,b),situé(bananes,c),
niveau(singe,bas), niveau(boîte,bas), niveau(bananes,haut)
état final:
possède(singe,banane)
IFT3330, Demo Planification, v1.1
4
2
Exemple du singe (2/2)
opérateurs:
déplace(X,Y)
pré-conditions: situé(singe,X), niveau(singe,bas)
ajouts: situé(singe,Y)
retraits: situé(singe,X)
prend(X)
pré-conditions: situé(X,Y), situé(singe,Y), not possède(singe,_),
niveau(X,N), niveau(singe,N)
ajouts: possède(singe,X)
dépose(X), monte-boîte, descend-boîte
plan:
déplace(a,b), prend(boîte), déplace(b,c), dépose(boîte),
monte-boîte, prend(bananes)
IFT3330, Demo Planification, v1.1
5
Exemple des blocs
Opérateurs
move_to_table(B,X) :
pré-conditions: on(B,X), clear(B)
ajout: clear(X), on(B,table)
retrait: on(B,X)
move(B,X,Y) :
pré-conditions: on(B,X), clear(B), clear(Y)
ajout: on(B,Y), clear(X)
retrait: on(B,X), clear(Y)
IFT3330, Demo Planification, v1.1
6
3
Résolution simple
• état initial: on(a,b), clear(a), clear(c), on(b,table),
on(c,table),
• état final: on(b,c), on(a,table), on(c,a), clear(b)
• planification means-ends (profondeur)
move_to_table(a,b)
move(b,table,c)
move_to_table(b,c)
move(c,table,a)
move(b,table,c)
IFT3330, Demo Planification, v1.1
7
Partial Order Planning (POP)
• Construit un plan en trouvant des étapes pour
satisfaire les pré-conditions de l'étape "finale", et
ainsi de suite sur les étapes trouvées jusqu'à ce que
toutes les pré-conditions soient satisfaites.
• Contraintes d'ordonnancement. Exemple:
M1: move(b,_,c)
M2: move(c,_,a)
[M2,M1] (M2<M1)
• Causalités pour résoudre les incohérences
[S1,p,S2]
(
IFT3330, Demo Planification, v1.1
S1
p S2 )
8
4
Représentation des opérateurs
•
•
•
•
Pré-conditions: can(opérateur,[conditions])
Ajout: add(opérateur, [conditions])
Retrait: delete(opérateur, [conditions])
On définit des opérateurs start et finish, afin
de pouvoir définir un plan initial [start,finish]
IFT3330, Demo Planification, v1.1
9
Représentation des plans
plan(Étapes, Ordres, Liens)
– Étapes: liste d'actions insérées
– Ordres: liste de [Étape1,Étape2], i.e. Étape1
doit être exécutée avant Étape2
– Liens causaux: liste de
[Étape1,Condition,Étape2], i.e. Étape1 est
insérée dans le but de satisfaire la condition de
Étape2
IFT3330, Demo Planification, v1.1
10
5
Étapes de l'algorithme
(voir POP_squelette.pl)
• select_subgoal: choisir une étape dans le plan
actuel et un but (pré-condition) à réaliser
• choose_operator: choisir un opérateur pour
satisfaire le but trouvé par select_subgoal ; ajouter
l'ordre et le lien causal
• resolve_threats: résoudre les menaces, e.g. qui
pourraient défaire un but
• linearize: transformer la liste des étapes en ordre
total, i.e. une séquence qui satisfait les contraintes
d'ordre
IFT3330, Demo Planification, v1.1
11
Choix d'un opérateur
Pour une étape S:
• S'il existe déjà une étape T avant S dans
laquelle p est vraie (i.e. p est dans les effets
de T), ajouter le lien causal de T à S.
• Ajouter une nouvelle étape U qui a p dans
ses effets, et un lien causal de U à S.
IFT3330, Demo Planification, v1.1
12
6
Résolution de menaces
• Une menace a la forme suivante:
S1
p S2
S3 not p
• On peut la résoudre par:
– promotion, force S3 après le lien causal, i.e
S3>S2
– démotion, force S3 avant le lien causal, i.e.
S3<S1
IFT3330, Demo Planification, v1.1
13
Exemple d'exécution POP
état
initial
a
b
c
b
c
a
état
final
Stratégie POP
• considérer les pré-conditions à l'état final comme des
sous-problèmes en réalisant leur planification (i.e.
on(b,c), on(c,a), on(a,table), clear(b))
• la résolution de menaces permet d'ordonner ces sousproblèmes, e.g. il faut d'abord mettre a sur la table, puis
mettre c sur a, puis mettre b sur c.
IFT3330, Demo Planification, v1.1
14
7
Exemple d'exécution POP (suite)
# 1:
• étapes du plan initial : [start,finish] ; ordres du plan initial : [[start,finish]]
• Après select_subgoal: Etape: finish; But: on(b,c)
• Après choose_operator:
nouvelle étape: move(b,X,c)
nouveaux ordres: [move(b,X,c),finish], [start,move(b,_X,c)]
nouveau lien: [move(b,X,c),on(b,c),finish]
• pas de menaces
• i.e. Plan3 = plan([move(b,table,c),start,finish],
[[start,move(b,X,c)],[move(b,X,c),finish],[start,finish]],
[[move(b,X,c),on(b,c),finish]])
# 2:
• étapes courantes : [move(b,X,c),start,finish],
• Après select_subgoal: Etape: move(b,X,c); But: on(b,X)
• Après choose_operator:X=table
nouveau lien: [start,on(b,table),move(b,table,c)]
IFT3330, Demo Planification, v1.1
15
Exemple d'exécution POP (suite)
# 3:
• Étapes courantes : [move(b,table,c),start,finish],
• Après select_subgoal: Etape: move(b,table,c); But: clear(b)
• Après choose_operator:
nouvelle étape: move_to_table(X,b)
nouveaux ordres: [move_to_table(X,b),move(b,table,c)],
[move_to_table(X,b),move(b,table,c)]
nouveau lien: [move_to_table(X,b),clear(b),move(b,table,c)]
# 4:
• Étapes courantes : [move_to_table(X,b),move(b,table,c),start,finish],
• Après select_subgoal: Etape: move_to_table(X,b); But: on(X,b)
• Après choose_operator:X=a
nouveau lien: [start,on(a,b),move_to_table(a,b)]
# 5:
• Étapes courantes : [move_to_table(a,b),move(b,table,c),start,finish],
• Après select_subgoal: Etape: move_to_table(a,b); But: clear(a)
• Après choose_operator:
nouveau lien: [start,clear(a),move_to_table(a,b)]
IFT3330, Demo Planification, v1.1
16
8
Exemple d'exécution POP (suite)
# 6:
• Après select_subgoal: Etape: move(b,table,c); But: clear(c)
• Après choose_operator:
nouveau lien: [start,clear(c), move(b,table,c)
# 7:
• Après select_subgoal: Etape: finish; But: on(c,a)
• Après choose_operator:
nouvelle étape: move (c,X,a)
nouveaux ordres: [move(c,X,a),finish], [start,move(c,X,a)]
nouveau lien: [move(c,X,a),on(c,a),finish]
La nouvelle étape menace le lien [start,clear(a),move_to_table(a,b)]
qui avait été trouvé en #5 parce qu'on pourrait avoir à partir de start:
clear(a) et ¬clear(a) !!!
Démotion de la nouvelle étape en ajoutant l'ordre:
[move_to_table(a,b),move(c,X,a)]
(i.e. il faut mettre a sur la table avant de mettre c sur a)
IFT3330, Demo Planification, v1.1
17
Exemple d'exécution POP (suite)
# 8:
• Étapes courantes: [move(c,X,a),move_to_table(a,b),move(b,table,c),start,finish]
• Après select_subgoal: Etape: move(c,X,a); But: on(c,X)
• Après choose_operator: X=table
nouveau lien: [start,on(c,table),move(c,table,a)]
# 9:
• Étapes courantes: [move(c,table,a),move_to_table(a,b),move(b,table,c),start,finish]
• Après select_subgoal: Etape: move(c,table,a); But: clear(c)
• Après choose_operator:
nouveau lien: [start,clear(c),move(c,table,a)]
L'étape move(b,table,c) trouvée en #1-#2 menace le nouveau lien
[start,clear(c),move (c,table,a)] parce qu'on pourrait avoir à partir de
start: clear(c) et ¬clear(c) !!!
Démotion de l'étape en ajoutant l'ordre:
[move(c,table,a),move(b,table,c)]
(i.e. il faut mettre c sur a avant de mettre b sur c)
IFT3330, Demo Planification, v1.1
18
9
Exemple d'exécution POP (suite)
ETC.
# 13: On a Terminé!
• Étapes courantes:
[move(c,table,a),move_to_table(a,b),move(b,table,c),start,finish]
• Après linearize: [move_to_table(a,b), move(c,table,a), move(b,table,c)]
IFT3330, Demo Planification, v1.1
19
10