• Aucun résultat trouvé

Pour la suite, nous nous int´eressons uniquement aux filtres d’activation qui sont utilis´es dans le processus d’ordonnancement des agents de la simulation. Un filtre d’activation est

2.6. Gestion dynamique des filtres d’activation

d´eclench´e lorsque l’ensemble des conditions portant sur le filtre sont v´erifi´ees (composantes fa et fC), ce qui entraˆıne alors une action au niveau d’un agent. En externalisant dans

l’environnement la perception et traitement du contexte des agents, ce principe permet de mutualiser une partie du processus d’´evaluation du contexte. Les cons´equences sont que (1) plusieurs agents peuvent ainsi ˆetre activ´es (l’un apr`es l’autre) par un mˆeme filtre ou (2) un mˆeme agent peut ˆetre concern´e simultan´ement par plusieurs filtres. Par exemple pour la simulation de robots, le comportement d´eplacement al´eatoire peut ˆetre d´eclench´e `

a partir de deux contextes d’activation et donc de filtres logiques qui sont le contexte relatif `a la recherche de caisse et le contexte correspondant au d´eplacement d’une caisse.

Par ailleurs, Cat(Pfa) regroupe l’ensemble des agents qui poss`edent les propri´et´es

n´ecessaires `a l’´evaluation du contexte. Cette contrainte se traduit par : propriete(ωi) 6=

null. `A ce niveau de mod´elisation, la valeur associ´ee `a la propri´et´e n’est pas prise en compte, nous ne nous int´eressons qu’`a son existence.

Ainsi, plusieurs agents peuvent potentiellement ˆetre concern´es par un filtre d’activation ce qui permet de construire des cat´egories d’entit´es `a partir de la d´efinition en intention de fa, fm et fC associ´ee `a chaque filtre. Un filtre pouvant concern´e un ensemble d’entit´es,

il est n´ecessaire de discuter des cons´equences de l’ajout et de la suppression d’un filtre d’activation par un agent en fonction de son impact sur les autres agents du syst`eme. Cette section est construite `a partir de la distinction entre la description en intention d’un filtre pour construire des cat´egories d’entit´es et l’extension d’un filtre qui d´efinit les entit´es v´erifiant les conditions sur le filtre d’interaction.

2.6.1

L’ajout de nouveaux filtres d’activation dans l’environne-

ment

Chaque agent a la possibilit´e d’ajouter un filtre d’activation dans l’environnement. Par la suite, des r`egles d’environnement seront ajout´ees pour contrˆoler l’ajout de nouveaux filtres. Ces r`egles permettront de sp´ecifier si un agent `a l’autorisation d’ajouter un filtre ou quel type de filtres est accept´e. Pour g´erer les agents qui ne souhaitent pas appartenir aux entit´es potentiellement concern´ees par le filtre, nous avons ajout´e au tuple qui d´efinit un filtre un argument agentsP otentiels qui lors du traitement d’ajout du filtre r´epertorie l’ensemble des agents adh´erant au filtre. Ainsi, seulement les agents appartenant `a cette liste seront test´es pour valider les conditions sur la composante fa du filtre. Cet argument

agent. Si la liste agentsP otentiels est vide alors le filtre ne sera activ´e pour aucun des agents. Dans ce cas le filtre n’est pas ajout´e dans l’environnement. Trois situations sont alors identifi´ees :

1. L’ajout du filtre ne concerne que l’agent propri´etaire du filtre. Cette situation est particuli`ere et n´ecessite alors la condition id(ω) = idproprietaire qui v´erifie que

l’identifiant de l’entit´e test´ee par le filtre correspond `a l’identifiant du propri´e- taire du filtre. Dans l’algorithme d’ajout (algorithme 2), cette condition s’´ecrit ∃ condid ∈ (f.fa) tel que condid = [id = f.proprietaire] o`u f.fa correspond `a

la composante fa du filtre f et f.proprietaire donne l’identifiant de l’agent qui a

d´epos´e le filtre f . Dans ce cas, l’ajout du filtre ne pose aucun probl`eme et ne de- mande aucun processus de validation aupr`es des autres agents. Pour ce type de filtre, nous ne nous int´eressons pas `a la cat´egorie des agents potentiellement concern´es car la discrimination de la contrainte sur l’identifiant indique que ce filtre ne pourra ˆetre d´eclench´e que pour cet agent. Donc au mieux, l’extension du filtre correspond `

a un unique agent. Pour ce type de filtre, la liste des agents potentiels (formelle- ment agentsP otentiels) est limit´ee au seul agent d´etermin´e par la contrainte sur l’identifiant, ce qui s’´ecrit (f.agentsP otentiels) ← {proprietaire} au niveau de l’al- gorithme.

2. La deuxi`eme situation concerne une condition portant sur un identifiant d’un autre agent (id(ω) = v avec v ∈ N). Alors l’ajout du filtre dans l’environnement n´ecessite l’accord de l’agent identifi´e par la valeur v. Cette validation de l’ajout du filtre est effectu´ee par l’environnement. De la mˆeme mani`ere que pr´ec´edemment, la liste des agents potentiels (formellement agentsP otentiels) contient le seul agent d´etermin´e par la contrainte sur l’identifiant apr`es son accord. Une condition obligatoire est que l’agent concern´e par le filtre (i.e tel que son identifiant est ´egal `a v) connaˆıt l’action associ´ee au filtre. Dans le cas contraire, l’ajout du filtre est automatiquement refus´e. 3. La derni`ere situation recens´ee est celle o`u l’agent souhaite d´eposer dans l’environ- nement un filtre avec une port´ee plus g´en´erale et qui peut donc potentiellement concerner un ensemble d’agents. Il n’est pas envisageable de modifier les r´eactions d’un ensemble d’agents `a un contexte particulier sans leur accord au pr´ealable. Ainsi, l’environnement lorsqu’un tel filtre veut ˆetre ajout´e, r´epertorie l’ensemble des pro- pri´et´es n´ecessaires au d´eclenchement du filtre qui correspond `a la description en intention la composante fadu filtre. `A partir des entit´es contenus dans l’environne-

ment, ce dernier ex´ecute une m´ethode accord() pour la cat´egorie des agents d´efinie par Cat(Pfa). Le concepteur devra avoir au pr´ealable impl´ement´e cette fonctionna-

lit´e dans les agents pour avoir leur accord. Si les agents adh`erent au filtre, ils sont ajout´es `a la liste des agents potentiels du filtre. Par exemple, pour demander si un

2.6. Gestion dynamique des filtres d’activation

agent a veut adh´erer `a un filtre f , la m´ethode accord de l’agent a avec en param`etre le filtre f est appel´ee et s’´ecrit accorda(f ). Ainsi, chaque agent souhaitant adh´erer au

filtre est ajout´e `a la liste des agents potentiels agentsP otentiels, ce qui correspond `

a la ligne (f.agentsP otentiels) ← (f.agentsP otentiels) ∪ {a.id} dans l’algorithme 2. Plus pr´ecis´ement, la liste des agents potentiels est constitu´ee des identifiants des agents qui y ont adh´er´e au filtre.

Algorithme 2: L’algorithme d’ajout de filtres d’activation dans l’environnement Entr´ee : Nf iltre : ensemble des nouveaux filtres `a ajouter

Sortie :Rf iltre : ensemble des filtres non-ajout´es

D´ebut

Rf iltre ← ∅

pour chaque f ∈ Nf iltre faire

ajout = f aux

si∃ condid∈ (f.fa) tel que condid= [id = f.proprietaire] alors

(f.agentsP otentiels) ← {f.proprietaire} F ← F ∪ {f}

sinon

si ∃ condid ∈ (f.fa) et v∈ N tel que condid= [id = v] alors

si accord{a|id(a)=v}(f ) = vrai alors

(f.agentsP otentiels)← {v} F ← F ∪ {f} sinon Rf iltre← Rf iltre∪ {f} sinon Pfa ← descriptionS(f.fa)

pour chaque a∈ Cat(Pfa) faire

si accorda(f ) = vrai alors

(f.agentsP otentiels)← (f.agentsP otentiels) ∪ {a.id} ajout = vrai

si ajout = vrai alors F ← F ∪ {f} sinon

Rf iltre← Rf iltre∪ {f}

retourner Rf iltre

L’algorithme d’ajout d’un nouveau filtre d’activation (algorithme 2) utilise alors la d´efinition en intention de la composante fa du filtre (Pfa), puis d´etermine la cat´egorie

des agents (Cat(Pfa)) pour ensuite avoir leur accord sur l’ajout du filtre. L’algorithme

2 poss`ede comme donn´ee initiale l’ensemble des nouveaux filtres d’activation Nf iltre `a

ajouter dans l’environnement et retourne l’ensemble des filtres Rf iltre qui ne sont pas

ajout´es car ils ne correspondent `a aucun agent. La condition initiale est que le filtre n’existe pas dans l’environnement. Cette condition est v´erifi´ee par l’environnement lors de la demande d’ajout du filtre. Dans le cas ´ech´eant, la demande n’est pas trait´ee. La complexit´e de l’algorithme 2 est de O((na∗ accord()) ∗ nf) o`u na est la cardinalit´e de

la cat´egorie des agents de la simulation d´efinie par fa et nf est le nombre de filtres

d’activation `a ajouter dans l’environnement. La fonction accord() est param´etrable par le concepteur et sp´ecifie le coˆut pour un agent d’accepter l’association `a un filtre.

2.6.2

La suppression de filtres d’activation de l’environnement

La suppression d’un filtre d’activation pour un agent consiste `a supprimer le lien entre une action de l’agent et un contexte associ´e dans l’environnement. L’algorithme de suppression de filtres pour les agents (algorithme 3) prend en param`etre l’ensemble des couples (id, nom) o`u id est l’identifiant de l’agent souhaitant supprimer son adh´esion au filtre portant le nom nom. Il consiste `a retirer de la liste agentsP otentiels du filtre f (f.agentsP otentiels) l’identifiant correspondant `a l’agent (couple.id), ce qui s’exprime (f.agentsP otentiels) ← (f.agentsP otentiels) \ {couple.identifiant}. Les filtres `a tester sont identifi´es par la condition f.nom = couple.nom. Le filtre est effectivement supprim´e lorsque la liste agentsP otentiels est vide, ce qui implique que le filtre ne sera jamais activ´e pour aucun agent.

Algorithme 3: L’algorithme de suppression de filtres d’activation de l’environnement Entr´ee : Lid−n : ensemble des couples (identif iant, nom)

D´ebut

pour chaque couple∈ Lid−n faire

pour chaque f ∈ F faire si f.nom = couple.nom alors

si couple.id∈ (f.agentsP otentiels) alors

(f.agentsP otentiels)← (f.agentsP otentiels) \ {couple.id} si (f.agentsP otentiels) =∅ alors

F ← F \ {f} Fin