• Aucun résultat trouvé

Pour améliorer une instance MASTA, les agents communiquent avec leurs pairs pendant qu’ils

consomment les tâches. Comme nous l’avons vu dans le chapitre 5, les agents communiquent

uniquement par envoi de messages et quasi exclusivement de manière asynchrone. Les agents sont réactifs, c’est-à-dire qu’ils ne sont déclenchés qu’en réaction à la réception d’un message. Pour ce faire, un agent possède plusieurs attributs :

• son adresse, c’est-à-dire un identifiant unique qui permet de distinguer l’agent, de lui envoyer des messages et de l’identifier comme émetteur d’un message ;

• la liste de ses accointances, c’est-à-dire la liste des pairs avec lesquels l’agent est capable

de communiquer directement. Comme indiqué dans le chapitre1, on suppose que le système

distribué est complet et donc que tous les agents peuvent directement communiquer les uns avec les autres ;

• sa file de messages qui stocke les messages que l’agent reçoit et qu’il n’a pas encore traités. La file de messages d’un agent est une structure de type « premier entré, premier sorti », l’agent traite donc les messages dans leur ordre de réception ;

• son état courant qui sélectionne le comportement à appliquer ;

• son comportement qui indique comment l’agent réagit lorsqu’il reçoit un message donné dans un état donné.

Dans un premier temps, je décris comment le comportement d’un agent est spécifié par un automate fini déterministe. Puis, je montre comment ces spécifications permettent une implé- mentation directe grâce à la programmation réactive.

7.2.1 Spécification

Le comportement d’un agent est spécifié à l’aide d’automates finis déterministes (cf. figure 7.1).

Le comportement d’un agent dépend de son état courant et du premier message de sa file. En fonction de ces deux paramètres, l’agent exerce une action et/ou change d’état. Même si tous

7.2. Comportement 105

les agents utilisent le même comportement, chaque agent est indépendant, possède son propre état courant, ses propres croyances et sa propre file de messages. L’exécution indépendante, concurrente et asynchrone de ce comportement permet aux agents d’améliorer dynamiquement une allocation de tâches de manière décentralisée.

L’exécution de tâche mise à part, un agent peut entreprendre deux autres types d’actions : l’envoi de messages (que l’on note grâce à l’opérateur !) ou la modification d’une structure de données interne (lot de tâches, base de croyances, etc.). Un agent peut envoyer un message à l’un de ses pairs mais également à lui-même. En s’envoyant un message, un agent est en mesure d’auto-activer son propre comportement.

État 1

start État 2

émetteur:message if condition ⇒ actions

Figure 7.1 : Automate fini déterministe spécifiant le comportement d’un agent qui, lorsqu’il reçoit un message de émetteur dans l’état 1 et qu’une condition est remplie, effectue des actions et passe dans l’état 2.

Exemple 7.1 (Spécification d’un comportement avec une machine à états finis).

L’automate de la figure7.2spécifie le comportement de l’agent Bruce lors de ses interactions avec un agent téméraire. L’agent Bruce possède une variable interne patience qui déter- mine son niveau de patience. L’état initial de l’agent Bruce est l’état Banner. Tant qu’il lui reste de la patience, l’agent Bruce accepte de recevoir le message pichenette de la part de l’agent téméraire mais perd progressivement patience. En revanche, lorsque sa patience est nulle et qu’il reçoit une pichenette, l’agent Bruce passe dans l’état Hulk et envoie un message avertissement à l’agent téméraire. Dans l’état Hulk, l’agent Bruce répond systématiquement à une pichenette par un HulkSmash. Après avoir délivré un HulkSmash, l’agent Bruce s’envoie un message calme grâce auquel, lorsqu’il le traite, il réinitialise sa variable patience et repasse dans l’état Banner.

Banner start Hulk téméraire:pichenette if patience == 0 ⇒ téméraire ! avertissement téméraire:pichenette if patience > 0 ⇒ patience -= 1 téméraire:pichenette ⇒ téméraire ! HulkSmash

& self ! calme

self:calme ⇒ patience = 3

106 Chapitre 7. Architecture composite d’agent

Les automates présentés en annexe A permettent une spécification complète et formelle du

comportement d’un agent MASTA. Ce sont ces automates qui ont aidé à l’implémentation des comportements effectifs des agents MASTA. On peut, à leur lecture, se faire une idée de la complexité de ces comportements. La section suivante discute de la relation directe entre la spécification d’un comportement par un automate fini déterministe et l’implémentation de ce comportement grâce à la programmation réactive.

7.2.2 Implémentation

Comme nous le verrons dans le chapitre suivant, le prototype distribué MAS4Data utilise des agents MASTA pour la réallocation de tâches pendant leur exécution. MAS4Data est implémenté

grâce à la boîte à outils Akka [Akka 2019] qui permet la construction d’applications réactives,

concurrentes et distribuées.

Pour illustrer la relation directe entre la spécification d’un comportement par un automate fini

détermiste et son implémentation en Akka, l’extrait de code 7.3 présente l’implémentation du

comportement de l’agent Bruce de l’exemple7.1. On peut y constater que l’automate qui spécifie

le comportement de l’agent (cf. figure 7.2) se traduit naturellement et directement en Akka.

Chaque état est traduit par une méthode dans laquelle sont décrites les actions qu’entreprend l’agent pour chaque message qu’il est susceptible de recevoir. Notons l’utilisation de l’opérateur ! pour l’envoi de message (lignes 26 et 37), de la méthode become pour le changement d’état (ligne 28), et de la valeur sender qui contient l’expéditeur du message en cours de traitement (lignes 26 et 37).

En Akka, une sous-classe de Actor correspond à la définition d’un agent et de son comportement. Les acteurs Akka sont instanciés au sein d’un ActorSystem. Cette structure correspond à un système multi-agents dans lequel les agents partagent une configuration materielle commune. Il est également possible de déployer plusieurs ActorSystem distants (par exemple un par nœud de calcul) et de les lier de sorte que les agents des différents environnements puissent communiquer entre eux.

Comme le montrent les automates de l’annexe A, le comportement d’un agent MASTA est

complexe et nécessite plusieurs automates pour être complétement spécifié. Pour aider à la compréhension de ces automates, les sections suivantes présentent en détail l’organisation interne d’un agent composite, les différentes interactions des agents composants ainsi que la sémantique de leurs différents états.