As plataformas multiagente tˆem sido utilizadas nos mais variados dom´ınios com a miss˜ao de criar sistemas inteligentes e inerentemente robustos [RFMB14].
A plataforma JADE ´e uma tecnologia que permite uma programa¸c˜ao distribu´ıda no desenvolvimento de aplica¸c˜oes ponto-a-ponto e considera a execu¸c˜ao de aplica¸c˜oes em tempo real que podem trabalhar em ambientes com ou sem fios [CPR03].
Esta tecnologia ´e implementada na linguagem Java e suporta um modelo com base no paradigma de agentes. O JADE implementa as especifica¸c˜oes da FIPA e neste contexto, um ambiente em JADE ´e visto como um conjunto de containers onde vivem os agentes.
Os agentes s˜ao implementados atrav´es de threads em Java e executam as suas tarefas de forma cooperativa mediante as comunica¸c˜oes que estabelecem entre si.
Quanto ao controlo/gest˜ao dos agentes, este ´e da responsabilidade dos componentes que integram o modelo de referˆencia de gest˜ao da plataforma JADE. Estes componentes s˜ao: o Agent Platform, o Agent, o Facilitador de Diret´orio (DF), o AMS e o Message Transport Service.
Neste contexto, as seguintes subse¸c˜oes apresentam alguns aspetos carater´ısticos da plataforma JADE que foram essenciais `a implementa¸c˜ao da ferramenta desenvolvida nesta disserta¸c˜ao.
AMS - Agent Management System
O AMS ´e considerado um componente obrigat´orio na plataforma do JADE visto ser o respons´avel pela sua supervis˜ao mediante a gest˜ao das opera¸c˜oes efetuadas sobre a pla- taforma. Este componente ´e o ´unico que pode criar ou matar agentes, matar containers ou at´e encerrar a plataforma multiagente [BCG07].
Faz parte das competˆencias deste agente efetuar o registo e o cancelamento do registo de todos os agentes da plataforma. Sempre que um novo agente entra na plataforma JADE, o AMS atribui ao novo agente um identificador ´unico denominado de Identificador de Agente (AID) que o distingue dos restantes agentes. No caso do desaparecimento de um agente, o AMS procede ao cancelamento do registo do agente que desapareceu [BCG07].
Apenas um ´unico AMS pode existir numa plataforma e no caso da plataforma abran- ger v´arias m´aquinas, o AMS ´e a autoridade respons´avel pela gest˜ao de todas elas [BCG07].
Devido ao fato de este agente especial desempenhar o papel de autoridade na plata- forma JADE, sempre que os agentes pretendem executar a¸c˜oes envolvidas na gest˜ao da plataforma, como por exemplo subscrever o mecanismo de notifica¸c˜ao dos eventos que ocorrem na mesma, estes dever˜ao comunicar ao AMS o que pretendem e s´o depois, ter˜ao acesso livre para executar as a¸c˜oes pretendidas.
Tarefas dos Agentes
Os comportamentos associados `as opera¸c˜oes que os agentes desempenham durante o seu tempo de execu¸c˜ao s˜ao denominados de behaviours. Para fazer com que um agente execute uma tarefa definida segundo um objeto do tipo behaviour, este dever´a ser adi- cionado `a classe principal do agente atrav´es do m´etodo addBehaviour(). Este m´etodo ´e disponibilizado pela classe Agent que, por sua vez, se encontra inclu´ıda no pacote nativo do JADE, jade.core [BCG07].
Os comportamentos podem ser adicionados ao agente a qualquer altura desde o in´ıcio da sua execu¸c˜ao, no m´etodo setup(), ou mesmo dentro de outros behaviours [BCG07].
Cada classe que estenda a classe Behaviour dever´a implementar os m´etodos action() e done(). O m´etodo action() define as opera¸c˜oes a realizar durante a execu¸c˜ao do behvaiour e o m´etodo done() retorna um valor do tipo boolean que indica se o behaviour j´a se encontra conclu´ıdo ou n˜ao. Quando os behaviours terminam dever˜ao ser removidos da pilha de behaviours que o agente se encontra a executar [BCG07].
Comunica¸c˜ao de Agentes
A comunica¸c˜ao de agentes ´e considerada a carater´ıstica mais importante do JADE [BCG07].
O paradigma da comunica¸c˜ao de agentes baseia-se numa troca de mensagens ass´ıncrona e a cada agente ´e atribu´ıda uma ”caixa de correio”que o JADE utiliza para armazenar as mensagens enviadas pelos outros agentes [BCG07].
Sempre que uma mensagem ´e depositada na caixa de correio de um agente, o agente recetor da mensagem ´e automaticamente notificado [BCG07].
O formato das mensagens no JADE segue o formato definido na estrutura das men- sagens Linguagem de Comunica¸c˜ao de Agentes FIPA (FIPA-ACL) e cada mensagem ´e constitu´ıda pelos seguintes campos:
• sender - Emissor da mensagem;
• receivers - Lista de recetores da mensagem;
• performative - Ato comunicativo que indica a inten¸c˜ao do emissor ao enviar a mensagem. Dependendo do protocolo de intera¸c˜ao utilizado, a performative poder´a ser REQUEST, INFORM, PROPOSE, CFP (Call for Proposal), ou outras. No caso de REQUEST, o emissor pretende que o recetor execute uma a¸c˜ao, o INFORM notifica o recetor relativamente a um fato, e o PROPOSE ou CFP indicam que o emissor pretende iniciar uma negocia¸c˜ao com o recetor da mensagem. Outros tipos de performatives podem ser encontrados em [FIP14];
• content - Cont´em a informa¸c˜ao atual a ser trocada atrav´es da mensagem, como por exemplo a a¸c˜ao a ser executada numa mensagem REQUEST ;
• language - Indica a sintaxe utilizada para expressar o conte´udo da mensagem. Para a comunica¸c˜ao ser eficaz, ambas as entidades emissora e recetora da mensagem
dever˜ao ser capazes de codificar e analisar as express˜oes definidas pela linguagem referenciada neste campo;
• ontology - Indica o vocabul´ario dos s´ımbolos utilizados no conte´udo da mensagem. Para a comunica¸c˜ao ser eficaz, ambas as entidades emissora e recetora da mensagem dever˜ao atribuir o mesmo significado a esses s´ımbolos;
• Campos Adicionais - Existem ainda outros campos adicionais utilizados para faci- litar o controlo de v´arias conversas em simultˆaneo e para especificar os tempos limite para rece¸c˜ao de respostas. Estes campos poder˜ao ser o conversation-id, o reply-with, o in-reply-to ou o reply-by.
No JADE, a implementa¸c˜ao de cada mensagem ´e conseguida atrav´es de um objeto da classe jade.lang.acl.ACLMessage que atrav´es dos seus m´etodos get e set permite o acesso a todos os campos especificados pelo formato ACL [BCG07].
Todos os tipos de performatives definidos pelas especifica¸c˜oes FIPA s˜ao mapeados como constantes na classe ACLMessage [BCG07].