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