• Aucun résultat trouvé

La comparaison de programmes n’est cependant pas suffisante pour exprimer les opinions fortes que sont req+ et req−. Ces deux valeurs de profils indiquent respectivement que l’agent veut à tout prix ce qui y est lié, et veut éviter à tout prix ce qui y est lié. Les comparaisons ne permettent pas de distinguer une simple préférence d’une nécessite.

Pour prendre en compte cette contrainte forte, nous introduisons deux prédicats : req et ban. Le but de ces prédicats est de permettre de savoir quand préférer une partie du programme à une autre. Par exemple, prenons l’agent-robot (décrit en annexe A.1) qui exécute le programme

bashDoorOpen(d ) | openDoor(d),

sachant que l’action bashDoorOpen(d ) a pour attribut brutal. Nous souhaitons distinguer l’agent ayant une préférence pour la brutalité (p(brutal) = pref +), et l’agent refusant les solutions non brutales (p(brutal) = req+). Pour le premier, le programme transformé sera

bashDoorOpen(d )〉openDoor(d)

(défoncer les portes si possible, sinon les ouvrir). Pour le second, le programme transformé sera bashDoorOpen(d )

(défoncer la porte, sans aucune autre possibilité).

Définition 22. req(δ,G) est vrai si l’agent cherche à tout prix à exécuter δ sachant G.

Définition 23. ban(δ,G) est vrai si l’agent cherche à tout prix à éviter d’exécuter δ sachant G.

Les définitions de req et ban sont similaires, et se rapprochent de la définition de la comparaison, à savoir récursivement sur les constructions Golog.

req(a,G) ≡ Creq+(a,G) (5.36)

ban(a,G) ≡ Creq−(a,G) (5.37)

Le reste des définitions étant identiques pour req et ban, nous les donnons en utilisant le symbole P avec, pour chaque formule, P ∈ {req,ban}4.

P (φ?,G) ≡ false P (δ1;δ2,G) ≡ P(δ1,Gδleft 1;δ2) ∨ P(δ2,Grightδ 1;δ2) P (δ1| δ2,G) ≡ P(δ1,Gδleft 12) ∧ P(δ2,Grightδ 12) P (πx.δ,G) ≡ P(δ,Gπx.δ) P (δ,G) ≡ P(δ,Gδ) P (ifφ then δ1elseδ2,G) ≡ P(δ1,Gifleftφ then δ

1elseδ2) ∧ P(δ2,Grightifφ then δ

1elseδ2)

P (whileφ do δ,G) ≡ P(δ,Gwhileφ do δ) (5.38)

req et ban étant des contraintes très fortes, il est nécessaire de limiter leur propagation : un opérateur de choix ne porte req et ban que si ses deux membres le portent. Sans cela, une seule action req amènerait à des transformations majeures du programme. Par exemple, dans le programme ((a | b);c) | d, req(a) engendrerait req(a | b), req((a | b);c) et req(a;c), ce qui amènerait à transformer le programme en a; c, ce qui est beaucoup plus radical que ce que nous souhaitons.

5.5 Conclusion

Dans ce chapitre, nous avons défini les notions de profils et d’affinités, qui permettent de définir sur quels critères un programme agent peut être transformé, et une comparaison de programme qui découle des affinités et qui permet de déterminer si un programme est préférable à un autre vis-à-vis d’un profil donné. Nous avons choisi de définir les valeurs du profil sur deux axes : la polarité, qui est utilisée lors de la comparaison, et l’intensité, qui permet de différencier la préférence de la contrainte. Les prédicats req et ban découlent de ce second axe, et permettent de savoir si une branche de programme est simplement préférée vis-à-vis d’un programme, ou si elle doit être absolument choisie.

La comparaison, ainsi que les prédicats req et ban, se joignent aux transformations des chapitres précédents pour former PAGE framework, un cadre de manipulation de programmes Golog. Ce cadre est la base du processus automatique de transformation (PAGE process) présenté au chapitre suivant : c’est sur cette base que le processus s’appuie pour déterminer quelles transformations appliquer, parmi celles définies au chapitre 4.

Chapitre 6

Processus automatique de

transformation

L’espace des programmes qu’il est possible d’obtenir par le biais des transformations définies au chapitre 4 pour un programme donné est potentiellement très large1et contient un grand nombre de programmes qui n’ont aucun intérêt pour un concepteur d’application. Dans ce chapitre, nous proposons une approche constructive pour choisir un programme de cet ensemble, sous la forme de PAGE process, un processus semi-automatique qui applique ces transformations selon certaines règles pour obtenir un programme intéressant. Ce processus utilise la notion d’affinité pour choisir quelles transformations appliquer, dans le but d’obtenir un programme convenant à un profil donné. PAGE process est défini en terme de constructions de Golog, et est constitué de trois transforma-tions, chacune étant spécifique à une construction Golog : les transformations d’actions en un choix entre les actions d’une même famille, les transformations de choix de programmes pour en favoriser un, et les transformations de choix d’arguments pour favoriser les arguments correspondant à certains critères.

Un programme Golog peut être vu comme une structure récursive, dans laquelle les programmes sont des constructions composées de sous-programmes. Un choix non-déterministe de programme est ainsi un nœud à deux fils. De ce point de vue, le processus agit de manière récursive en parcourant l’arbre de bas en haut : les sous-programmes sont traités avant la construction qui les englobe. Ainsi, pour la passe qui transforme les choix de programme appliquée à un programme a | b, on appliquera d’abord cette passe à a, puis à b, avant de l’appliquer au programme entier.

Formellement, on notera T (δ,δ0,G) pour dire que le résultat de la transformation du programmeδ à un point du programme où G est connu estδ0. On utilisera de la même manière Tapour désigner la transformation spécifique aux actions, T|pour la transformation spécifique aux choix de programmes, et Tπpour la transformation spécifique aux choix d’arguments. Les règles de parcours d’un programme pour la transformation dans le cas de constructions à transformer sont les suivantes :

1. Chaque transformation peut être appliquée en plusieurs points du programme, et peut également être appliquée sur les programmes qui sont le résultat d’autres transformations : selon le programme de départ, le nombre de programmes résultant peut être très grand ou même infini.

T (a,δ,G) ≡ Ta(a,δ,G), (6.1) T (δ1| δ2,δ,G) ≡ T (δ1,δ0 1,Gδl e f t 12) ∧ T (δ2,δ0 2,Gδr i g ht 12 ) ∧ T|(δ0 1| δ02,δ0,G), (6.2) T (πx.δ(x),δ0) ≡ T (δ(x),δ00(x),Gπx.δ(x)) ∧ Tπ(πx.δ00(x),δ0,G). (6.3) Pour les autres cas, le programme est simplement parcouru pour trouver des constructions à transformer. T (φ?,φ?,_) (6.4) T (δ1;δ2,δ0 1;δ0 2) ≡ T (δ1,δ0 1,Gδl e f t 1;δ2) ∧ T (δ2,δ0 2,Gδr i g ht 1;δ2 ) (6.5) T (δ,δ0∗) ≡ T (δ,δ0,Gδ) (6.6) T (ifφ then δ1elseδ2, ifφ then δ0

1elseδ0 2) ≡ T (δ1,δ0 1,Gl e f tifφ then δ 1elseδ2) ∧ T (δ2,δ0 2,Gifr i g htφ then δ 1elseδ2) (6.7) T (whileφ do δ,while φ do δ0) ≡ T (δ,δ0,Gwhileφ do δ) (6.8) T (δ1|| δ2,δ0 1|| δ02) ≡ T (δ1,δ0 1,Gδl e f t 1||δ2) ∧ T (δ2,δ0 2,Gδr i g ht 1||δ2) (6.9) T (δ1〉〉δ2,δ0 1〉〉δ02) ≡ T (δ1,δ0 1,Gl e f tδ 1〉〉δ2) ∧ T (δ2,δ0 2,Gδr i g ht 1〉〉δ2) (6.10) T (δ||,δ0||) ≡ T (δ,δ0,Gδ||) (6.11) T (〈φ → δ〉,〈φ → δ0〉) ≡ T (δ, δ0,G〈φ→δ〉) (6.12) T (δ1〉δ2,δ0 1〉δ02) ≡ T (δ1,δ0 1,Gl e f tδ 1〉δ2) ∧ T (δ2,δ0 2,Gδr i g ht 1〉δ2 ) (6.13) (6.14) Le processus de transformation utilise les familles d’actions et la comparaison de programmes basée sur l’affinité. De fait, en plus de la théorie de l’action nécessaire pour définir un programme Golog, le processus nécessite des définitions supplémentaires :

— attributes, la fonction qui donne la liste des attributs de chaque action (définition 15, page 80) ; — variablesAttributes, la fonction qui permet de déterminer les attributs des actions prenant des

arguments (définition 16, page 81) ;

— family, le prédicat permettant d’obtenir les familles d’actions (définition 8, page 70) ; — p, le profil vis-à-vis duquel on souhaite transformer le programme (définition 12, page 78).

6.1 Actions

La première transformation consiste à remplacer chaque action faisant partie d’une famille d’ac-tions par un choix entre les membres de cette famille ayant une affinité positive, permettant ainsi à l’agent de remplacer une action par une autre qui serait préférable, sans pour autant le bloquer si cette dernière n’était pas possible.

Pour toute action (a0), cette transformation se déclenche s’il existe une famille F telle que a0∈ F . De par la définition des familles d’actions (définition 8), nous savons qu’une action ne peut pas faire partie de plus d’une famille d’actions.

Cette transformation se base sur la transformation T6 pour faire apparaître les alternatives à l’action originale, sur la transformation T3 pour retirer les actions indésirables (ayant une affinité négative) et la transformation T1 est utilisée pour ordonner les actions, de manière à ce que les actions ayant la plus forte affinité soient préférées à celles ayant une utilité plus faible. Le résultat est une combinaison de choix préférentiels et de choix non-déterministes de la forme

(a1| a2) 〉 (a3| a4) 〉 (a5| a6)

où a1et a2ont une affinité supérieure à a3et a4, qui ont eux-mêmes une affinité supérieure à a5et a6. Dans les détails, nous avons choisi de ne conserver que les actions ayant une affinité positive, ainsi que l’action originale : nous n’introduisons pas d’actions ayant une affinité nulle. Nous ne retirons l’action originale que si elle est explicitement rejetée par une affinité négative. Le résultat de cette transformation pour une action a0∈ F , sachant un ensemble de formules G, est donc :

siblings(F,Creq+) 〉 siblings(F,Cpref +) 〉 (a0si ¬C(a0,G)) (6.15) où siblings est un raccourci désignant un choix entre les actions de la famille ayant une certaine affinité.

siblings(F,C ) =|ai∈F |C (ai,G)ai (6.16)