Vous êtes sur la page 1sur 11

MINISTERE DE L'ENSEIGNEMENT SUPERIEUR REPUBLIQUE DU MALI

ET DE LA RECHERCHE SCIENTIFIQUE Un Peuple - Un But - Une Foi


--------------------
DIRECTION NATIONALE DE L’ENSEIGNEMENT ANNEE: 2021-2022
SUPERIEUR ET DE LA RECHERCHE
SCIENTIFIQUE

Ecole Nationale d’Ingénieurs – Abderhamane Baba Touré


410, Av. Van Vollenhoven BP 242 – Tél: (223) 20 22 27 36 – Fax: (223) 20 21 50 38 / Bamako – MALI.

Réseaux & Télécommunications

Rapport de TP 2 de Système Distribué

Thème : Communication entre deux Agents sous Jade

GIT_M1_S2
Object Rapport de TP N°2

Ouzairou DJIRE
Mah Rokiatou dite koyan SANOGO
Noms et Prénoms
Souleymane KODJO

Date: 03/08/2022

Professeur (s) Dr. DOUMBIA

NOTE APPRECIATION
Table des matières
I. Introduction ......................................................................................................................... 3
II. But du TP ........................................................................................................................ 3
III. Architecture du système multi-agents [1] ....................................................................... 3
IV. Code Source des Agents Programmés [2] ....................................................................... 4
➢ Code source de l’AgentA ................................................................................................ 4
➢ Code source de l’AgentB ................................................................................................ 6
V. Les captures d’écran montrant l’exécution ..................................................................... 9
➢ L’Exécution 1 .................................................................................................................. 9
➢ L’Exécution 2 : ................................................................................................................ 9
VI. Conclusion ..................................................................................................................... 10
VII. Liste des figures ............................................................................................................ 11
VIII. Références ................................................................................................................. 11

2
I. Introduction
Les communications dans les systèmes multi-agents, comme chez les humains, sont à la base
des interactions et de l’organisation des agents. La communication agrandit les capacités
perceptives des agents en leur permettant de bénéficier des informations et du savoir-faire des
autres agents. Cependant les communications sont indispensables à la coopération et il est
difficile de concevoir un système d’agents coopérants s’il n’existe pas un système permettant
aux agents d’échanger des informations ou de véhiculer des requêtes.

II. But du TP
L’objectif de ce TP de pouvoir programmer deux (2) Agents sous Jade et de faire en sorte que
ces deux(agents) puissent communiquer par envoi de messages c’est-à-dire :
L'Agent 1 envoie un message à l'Agent 2 contenant un nombre x. L'Agent 2 reçoit le message,
détermine si le nombre x est premier ou non et renvoie le résultat à l'Agent 1. L'Agent 1 reçoit
le résultat et l'affiche.

III. Architecture du système multi-agents [1]


Comme nous l’avons déjà introduit, l’architecture du système multi-agents comporte m agents
machines (Figure 1)

Les différents agents coopèrent et interagissent, par échange de messages, suivant une approche
décentralisée pour construire un ordonnancement réalisable, et ce dans le but de converger au
mieux vers une solution globale

Localement, chaque agent définit un plan de réalisation en utilisant des règles de priorité tout
en minimisant les espaces d’inoccupation de sa machine.

Dans le cas présent nous parlerons d’un système de deux agents interactifs.

Figure 1 Structure du système multi-agents

3
Le mode d’interaction dans le système multi-agents consiste en la mise en relation dynamique
des agents par le biais d’un ensemble d’actions interchangées (algorithmes locaux, échange de
messages). Cette mise en relation dynamique entre les agents du système conduit à la
convergence vers les solutions désirées.

Nous précisons toutefois que durant le processus d’interaction, chaque agent Machine est en
connexion, avec ses agents voisins auxquels il est lié au sens de la gamme opératoire tant que
la solution finale n’est pas arrêtée ; ces agents, avec qui il doit coopérer pour l’établissement de
son plan local, sont identifiés dans sa base connaissances (relative au sou problème qui lui a été
affecté).

IV. Code Source des Agents Programmés [2]


➢ Code source de l’AgentA
import java.util.Scanner;

import jade.core.AID;

import jade.core.Agent;

import jade.core.behaviours.FSMBehaviour;

import jade.core.behaviours.OneShotBehaviour;

import jade.lang.acl.ACLMessage;

public class AgentA extends Agent {

Scanner sc = new Scanner(System.in) ;

protected void setup(){

System.out.println("******************Creation de l'agent A******************");

FSMBehaviour agentA_beh= new FSMBehaviour();

agentA_beh.registerFirstState(new attendreAgentB(), "attendreAgentB");

agentA_beh.registerState(new envoiChiffre(), "envoiChiffre");

agentA_beh.registerState(new afficherReponse(), "afficherReponse");

agentA_beh.registerLastState(new fin(), "fin");

agentA_beh.registerDefaultTransition("attendreAgentB", "envoiChiffre");

agentA_beh.registerTransition("envoiChiffre", "attendreAgentB",0);

agentA_beh.registerTransition("envoiChiffre", "afficherReponse",0);

agentA_beh.registerTransition("afficherReponse", "fin",0);

addBehaviour(agentA_beh); }

private class attendreAgentB extends OneShotBehaviour{

@Override

public void action() {

System.out.println("En attente de l'agent B");

4
block();}}

private class envoiChiffre extends OneShotBehaviour{

int valeurRetour = 0;

@Override

public void action() {

ACLMessage messageRecu = receive();

if (messageRecu.getContent().equalsIgnoreCase("pret") ) { valeurRetour=0;

}else{valeurRetour=1;}

System.out.print("Entrez un nombre : ");

int nombre = sc.nextInt() ;

System.out.println("Envoi du nombre :"+ nombre);

ACLMessage messageEnvoie = new ACLMessage(ACLMessage.INFORM);

//messageEnvoie.addReceiver(messageRecu.getSender()); OLD 58

messageEnvoie.addReceiver(new AID("AgentB", AID.ISLOCALNAME));

messageEnvoie.setContent(nombre+"");

send(messageEnvoie);

block() ;

public int onEnd(){

return valeurRetour;

private class afficherReponse extends OneShotBehaviour{

@Override

public void action() {

ACLMessage reponseRecu = receive();

String reponse = reponseRecu.getContent() ;

System.out.println("LA reponse est : "+ reponse);

/*****************************************************************/

private class fin extends OneShotBehaviour{

@Override

public void action() {

System.out.println("Fin de Communication");

myAgent.doDelete();

5
➢ Code source de l’AgentB
import jade.core.Agent;

import jade.core.AID;

import jade.core.Agent;

import jade.core.behaviours.FSMBehaviour;

import jade.core.behaviours.OneShotBehaviour;

import jade.lang.acl.ACLMessage;

public class AgentB extends Agent {

String reponse ;

boolean stop = false;

// Fonction pour verifier un nmbre premiere

public static String verifie(int nbre) {

int reste;

boolean flag = true ;

for(int i=2; i <= nbre/2; i++){

//nombre est divisible par lui-meme

reste = nbre%i;

//si le reste est 0, alors arrete la boucle. Sinon continuer la boucle

if(reste == 0){

flag = false;

break;

//si flag est true, alors nombre est premier, sinon non premier

if(flag)

return nbre + " est un nombre premier" ;

else

return nbre + " n'est pas un nombre premier" ;

//Fin Fonction

protected void setup(){

System.out.println("******************Creation de l'agent B******************");

6
FSMBehaviour agentB_beh= new FSMBehaviour();

//definiton des etats

agentB_beh.registerFirstState(new attendrechiffre(), "attendrechiffre");

agentB_beh.registerState(new VerifieNombre(), "VerifieNombre");

agentB_beh.registerState(new envoieReponse(), "envoieReponse");

agentB_beh.registerLastState(new fin(), "fin");

//definiton des transition

agentB_beh.registerDefaultTransition("attendrechiffre", "afficher");

agentB_beh.registerTransition("attendrechiffre", "VerifieNombre",0);

agentB_beh.registerTransition("VerifieNombre", "envoieReponse",0);

agentB_beh.registerTransition("envoieReponse", "fin",0);

addBehaviour(agentB_beh);

/**********************************************************************/

private class attendrechiffre extends OneShotBehaviour{

int valeurRetour = 0;

public void action() {

System.out.println("En attente.........");

ACLMessage message = new ACLMessage(ACLMessage.INFORM);

message.addReceiver(new AID("AgentA", AID.ISLOCALNAME));

if(!stop){

message.setContent("pret");

send(message);

valeurRetour=0;

block();

}else{

message.setContent("arret");

send(message);

valeurRetour=1;

public int onEnd(){

return valeurRetour;

7
}

/**********************************************************************/

private class VerifieNombre extends OneShotBehaviour{

int valeurReTour = 0 ;

@Override

public void action() {

ACLMessage messageRecu = receive();

int nombre = Integer.parseInt(messageRecu.getContent());

System.out.println("Nombre recue "+ nombre);

reponse = verifie(nombre) ;

/**********************************************************************/

private class envoieReponse extends OneShotBehaviour{

@Override

public void action() {

ACLMessage msg = new ACLMessage(ACLMessage.INFORM) ;

msg.setContent(reponse);

msg.addReceiver(new AID("AgentA", AID.ISLOCALNAME));

send(msg);

//stop = true ;

private class fin extends OneShotBehaviour{

@Override

public void action() {

System.out.println("Fin de communication de l'agent");

myAgent.doDelete();

} }}

8
V. Les captures d’écran montrant l’exécution
➢ L’Exécution 1

Figure 2 L’Exécution 1

➢ L’Exécution 2 :

Figure 3 L’exécution 2

➢ Le Résultat de l’exécution :

Figure 4 résultat de l'exécution

9
VI. Conclusion
Ce TP nous a appris la manière de faire communiquer deux agents dans le Framework jade à
travers deux agents pour vérifier si un nombre est premier ou pas et d’afficher le résultat .
Par ailleurs il nous a permis d’améliorer nos connaissances en matière de programmation agents
JADE en java à l’aide d’IDE Eclipse et de comprendre la manière d’échanger des informations
entre deux agents.

10
VII. Liste des figures
FIGURE 1 STRUCTURE DU SYSTEME MULTI-AGENTS .............................................................................................. 3
FIGURE 2 L’EXECUTION 1 ........................................................................................................................................ 9
FIGURE 3 L’EXECUTION 2 ....................................................................................................................................... 9
FIGURE 4 RESULTAT DE L'EXECUTION ..................................................................................................................... 9

VIII. Références
1. Structure d’un système multi-agents,
https://www.researchgate.net/publication/281328109 [Consulté le 01/08/2022]
2. Structure d’un système multi-agents,
https://djug.developpez.com/java/jade/communication [Consulté le 01/08/2022]

11

Vous aimerez peut-être aussi