IA54 – Communication FIPA ACL UTBM – A2011 Mickael ADELINE Kévin LE ROY Paul TALAGRAND
Plan : Sujet et objectifs Résultats obtenus Architecture de la gestion des messages ACL ▫Diagrammes UML ▫Utilisation de la librairie ▫Décodage & encodage des données Architecture des protocoles ▫Diagrammes UML ▫Protocole Request ▫Utilisation du Protocole Request ▫Protocole CNP ▫Utilisation du Protocole CNP Conclusion & améliorations possibles 1
Sujet et objectifs : Fournir le support des messages ACL dans Janus Permettre l’utilisation de protocoles d’interaction dans Janus Développer une démo d’agents communicatifs 2
Résultats obtenus : Support des messages ACL dans Janus : ▫En accord avec les normes de la FIPA. ▫Se limite à la représentation en String. Implémentations de protocoles d’intéraction : ▫Request Interaction Protocol ▫CNP : Contract Net Interaction protocol Démos d’agents communicatifs : ▫Démo 1 : simple usage des messages ACL ▫Démo 2 : communication de 2 agents via le Protocole Request ▫Démo 3 : communication de 3 agents via CNP 3
Architecture de la librairie ACL : Structure d’un ACL Message : 4
Architecture de la librairie ACL : ACL Agent gérant les messages ACL : 5
Architecture de la librairie ACL : Utilisation de la librairie (Démo 1) : Côté « Sender » : ▫ACLMessage message = new ACLMessage(“Hey!”, Performative.PROPOSE); ▫sendACLMessage(message, agentAddressReceiver); Côté « Receiver » : ▫ACLMessage aMsg = getACLMessage(); 6
Architecture de la librairie ACL : Envoi d’un ACL Message : 7
Architecture de la librairie ACL : Réception d’un ACL Message : 8
Architecture des protocoles (Overview) : 9
Architecture des protocoles : 10 Utilisation des protocoles : ▫protocolManager = new FipaConversationManager(this); ▫AbstractFipaProtocol protocol = protocolManager.createConversation(EnumFipaProtocol.FIPA_REQUEST, "First request protocol"); ▫Côté initiateur : protocol.initiate(getAddress(), participant); ▫Côté participant : protocol.initiateAsParticipant();
Request Interaction Protocol : 11 Rôle REQUESTER : ▫case SENDING_REQUEST: requestProtocol.request( "friend" ); ▫case WAITING_ANSWER: answer = requestProtocol.getAnswer(); if (answer.getPerformative().compareTo(Perfor mative.REFUSE) == 0) return State.REFUSED; Else return State.WAITING_RESULT; ▫case WAITING_RESULT: result = requestProtocol.getResult(); ▫case DONE: leaveMe();
Request Interaction Protocol : 12 Rôle ANSWERER: ▫case WAITING_REQUEST: request = requestProtocol.getRequest(); ▫case SENDING_ANSWER: if( request.getContent().toString().equalsIgnore Case("friend") ) requestProtocol.agree("yeah!"); return State.SENDING_RESULT; else requestProtocol.refuse("no"); return State.DONE; ▫case SENDING_RESULT: requestProtocol.informDone("Let's meet!"); return State.DONE; ▫case DONE: leaveMe();
Contract Net Protocol : 13 Rôle REQUESTER : ▫case SENDING_CALL_FOR_PROPOSAL: contractNetProtocol.callForProposal("I wanna..."); ▫case WAITING_ALL_PROPOSALS: proposals = contractNetProtocol.getAllProposals(); contractNetProtocol.acceptProposals(selectedParticip ants, "thanks"); ▫case WAITING_ALL_RESULTS: results = contractNetProtocol.getResults(); return State.DONE; ▫case DONE: leaveMe();
Contract Net Protocol : 14 Rôle ANSWERER : ▫case WAITING_CALL_FOR_PROPOSAL: callForProposal = contractNetProtocol.getCallForProposal(); ▫case SENDING_PROPOSAL: if( callForProposal.getContent().toString().equalsIgnoreCase("I wanna...") ) contractNetProtocol.propose("120"); Else contractNetProtocol.refuse("not interested"); ▫case WAITING_PROPOSAL_ANSWER: ProtocolResult result = contractNetProtocol.getAnswerToCallForProposal(); ▫ if (result.getPerformative().compareTo(Performative.ACCEPT_PROPOSAL) == 0) return State.SENDING_RESULT; else if (result.getPerformative().compareTo(Performative.REJECT_PROPOSAL) == 0) return State.REJECTED; ▫case SENDING_RESULT: contractNetProtocol.informResult("task completed"); ▫case REJECTED: leaveMe(); ▫case DONE: leaveMe();
Conclusion & améliorations possibles : Objectifs atteints. ▫Retouches à effectuer, mais l’essentiel des fonctionnalités ont été développées. Améliorations possibles : ▫Gérer l’encodage/décodage en BitEfficient et en XML. ▫Certains attributs des messages ACL ne sont pas exploités : Reply-by, In-reply-to, Reply-with, Reply-to. ▫Certaines méthodes de la classe ACLAgent devraient être en protected et non pas en public. 15