JADE: Java Agent Development Environment Framework http://jade.tilab.com/ Versão atual: 4.3.3 10/12/2014 O que são Agentes? 29/06/2017 @LES/PUC-Rio 2 O que são Agentes? Agente de software é uma entidade que está situada em um ambiente e capaz de ação autônoma neste ambiente para atingir seus objetivos projetados. Wooldridge & Jennings A entidade Agente é qualquer coisa que possa perceber o ambiente e agir sobre o mesmo. Russell & Norvig 29/06/2017 @LES/PUC-Rio 3 O que são Agentes? Autonomia: Operam sem intervenção humana ou de outros agentes Tem algum tipo de controle sobre suas ações e seu estado interno 29/06/2017 @LES/PUC-Rio 4 O que são Agentes? Características: Autonomia: • Operar sem controle direto de humanos ou de outros agentes Reatividade: • Reagir a estímulos Pró-atividade: • Tomar decisões para ajustar-se a metas definidas Interatividade: • Comunicação Adaptação Aprendizado Racionalidade Mobilidade 29/06/2017 @LES/PUC-Rio 5 O que são Agentes? Características: JADE Autonomia Reatividade Pró-atividade Interatividade Adaptação Aprendizado Racionalidade Mobilidade: poder desenvolver o programa em uma máquina e ser executada em outra 29/06/2017 @LES/PUC-Rio 6 JADE Jade é um middleware para o desenvolvimento de sistemas multi-agentes, que suporta: Um modelo assíncrono de programação de agentes Comunicação entre agentes de uma mesma plataforma ou de plataformas diferentes. 6/29/2017 @LES/PUC-Rio 7 JADE Jade é também uma plataforma para execução de agentes, que inclui: Um ambiente de execução (container) onde os agentes JADE "vivem" e possam ser executados. Uma biblioteca de classes de desenvolvimento de agentes. Um conjunto de ferramentas gráficas que permite a administração e o monitoramento das atividades dos agentes em execução. 6/29/2017 @LES/PUC-Rio 8 Contêiner e Plataforma Contêiner Instância de um ambiente Jade É onde os agentes executam Plataforma Conjunto de contêineres ativos 29/06/2017 @LES/PUC-Rio 9 Contêineres e Plataformas 29/06/2017 @LES/PUC-Rio 10 Contêineres e Plataformas Cada instância de agente é identificada por um agent identifier (AID) Um ID global é aquele que representa o identificador do agente em toda a plataforma • <nome_local>@<nome-plataforma> Um ID local refere-se ao conjunto de informações que representam o agente em seu container 29/06/2017 @LES/PUC-Rio 11 Plataforma O Jade segue o modelo da FIPA (Foundation for Intelligent Physical Agents) 29/06/2017 @LES/PUC-Rio 12 Plataforma Agente que exerce o controle sobre o acesso e o uso da plataforma Existe um único AMS por plataforma Mantém a lista de identificadores dos agentes (AID) que estão na plataforma Todo agente deve se registrar no AMS 29/06/2017 @LES/PUC-Rio 13 Plataforma Oferece o serviço de páginas amarelas na plataforma 29/06/2017 @LES/PUC-Rio 14 Plataforma Sistema JADE suporta a comunicação entre vários agentes FIPA e fornece uma implementação padrão da comunicação linguagem FIPA-ACL, o que facilita a comunicação entre os agentes e permite a detecção de serviços do sistema. 29/06/2017 @LES/PUC-Rio 15 Plataforma 29/06/2017 @LES/PUC-Rio 16 Modelo Computacional do Agente Um agente é multi-tarefa, onde os serviços são executados concorrentemente Cada serviço de um agente deve ser implementado como um ou mais comportamentos 29/06/2017 @LES/PUC-Rio 17 A Classe Agent A classe base para a definição de agentes Um agente Jade é uma instância de uma classe Java que estende a classe Agent Já oferece todas as interações básicas da plataforma (registro, configuração, etc...) 29/06/2017 @LES/PUC-Rio 18 A Classe Agent Oferece um conjunto de métodos para a implementação do comportamento do agente A classe Agent oferece um scheduler (não acessível ao programador) que gerencia automaticamente o agendamento dos comportamentos 29/06/2017 @LES/PUC-Rio 19 As Tarefas do Agente – Classe Behaviour Todas as tarefas dos agentes são executadas por meio de "comportamentos" Um comportamento é um objeto da classe Behaviour O agente adiciona um comportamento com o método addBehaviour() Comportamentos podem ser adicionados a qualquer momento Inicialização do agente ou a partir de um comportamento 29/06/2017 @LES/PUC-Rio 20 As Tarefas do Agente – Classe Behaviour Método action() Método que define as operações que são executadas quando o comportamento está em execução Método done() Método que especifica se um comportamento foi completado e deve ser removido do pool de comportamentos que um agente está executando 29/06/2017 @LES/PUC-Rio 21 A Execução de Comportamentos Um agente pode executar diversos comportamentos concorrentemente O scheduling de comportamentos não é preemptivo Quando um comportamento está agendado para execução, o método action é chamado e executa até retornar Quem deve definir quando um agente deve passar da execução de um comportamento para outro é o desenvolvedor 29/06/2017 @LES/PUC-Rio 22 A Execução de um Agente 29/06/2017 @LES/PUC-Rio 23 A Hierarquia de Comportamentos Comportamentos Simples Modelam os comportamentos atômicos OneShotBehaviour e CyclicBehaviour Comportamentos Compostos Modelam comportamentos que são compostos de outros comportamentos. Assim, as operações que devem ser executadas não estão definidas neste comportamento em si, mas nos comportamentos filhos que o compõem SequentialBehaviour, ParallelBehaviour e FSMBehaviour 29/06/2017 @LES/PUC-Rio 24 A Hierarquia de Comportamentos 29/06/2017 @LES/PUC-Rio 25 Comportamentos Simples OneShotBehaviour Modela comportamentos que só devem executar uma vez e que não podem ser bloqueados (parar o comportamento até que algum evento ocorra) CyclicBehaviour Modela comportamentos atômicos que devem ser executados eternamente 29/06/2017 @LES/PUC-Rio 26 Comportamentos Compostos SequentialBehaviour Executa seus sub-comportamentos seqüencialmente e termina quando todos estes estiverem terminados ParallelBehaviour Executa seus sub-comportamentos concorrentemente e termina quando uma condição particular sobre o conjunto de sub-comportamentos é alcançada FSMBehaviour Executa seus sub-comportamentos como uma Máquina de Estados Finita (FSM). Quando uma tarefa acaba, sua saída é usada para se calcular a transição para a próxima tarefa. O comportamento termina quando uma tarefa final é executada 29/06/2017 @LES/PUC-Rio 27 Esquemas de Comportamentos Simples // OneShotBehaviour public class MyOneShotBehaviour extends OneShotBehaviour { public void action() { // Executar a operação X } } // CyclicBehaviour public class MyCyclicBehaviour extends CyclicBehaviour { public void action() { // Executar a operação Y } } 29/06/2017 @LES/PUC-Rio 28 A Comunicação entre Agentes 29/06/2017 @LES/PUC-Rio 29 A Comunicação entre Agentes A troca de mensagens é assíncrona e usa a FIPA ACL (Agent Communication Language) 29/06/2017 @LES/PUC-Rio 30 Enviando Mensagens Deve-se criar e montar um objeto ACLMessage e chamar o método send() do agente Esta mensagem de exemplo representa um pedido de um agente para o outro, onde o solicitante deseja obter o preço (que será armazenado na variável p) de um computador com processador Celeron e 256 MB de memória. 29/06/2017 @LES/PUC-Rio 31 Recebendo Mensagens Para receber uma mensagem usa-se o método receive(), que recupera a primeira mensagem da fila de mensagens do agente Este método remove a mensagem da pilha, ou retorna null caso esteja vazia ACLMessage msg = receive(); if (msg != null) { // Processar a mensagem } 29/06/2017 @LES/PUC-Rio 32 Troca de mensagem entre os agentes 29/06/2017 @LES/PUC-Rio 33 O Serviço de Páginas Amarelas – Agente DF 29/06/2017 @LES/PUC-Rio 34 O Serviço de Páginas Amarelas – Agente DF Todo agente deve registrar seu serviço no DF (Directory Facilitator) Só existe um DF em cada plataforma Jade 29/06/2017 @LES/PUC-Rio 35 Registrando um Serviço no DF Deve-se criar um objeto ServiceDescription e chamar o método register() de um DF (usualmente no método setup() do agente) protected void setup() { ... // Registrar um agente vendedor de livros no DF DFAgentDescription dfd = new DFAgentDescription(); dfd.setName(getAID()); ServiceDescription sd = new ServiceDescription(); sd.setType("book-selling"); sd.setName("JADE-book-trading"); dfd.addServices(sd); try { DFService.register(this, dfd); } catch (FIPAException fe) { fe.printStackTrace(); } ... 29/06/2017} @LES/PUC-Rio 36 Removendo um Serviço do DF Chamar o método deregister() do DF (usualmente no método takeDown() do agente) protected void takeDown() { // Saindo do DF try { DFService.deregister(this); } catch (FIPAException fe) { fe.printStackTrace(); } // Mostrando uma mensagem de saída System.out.println("Agente vendedor " + getAID().getName() + " terminando"); } 29/06/2017 @LES/PUC-Rio 37 Procurando por Serviços no DF Criar um objeto DFAgentDescription e chamar o método search() do DF protected void setup() { ... // Criando um TickerBehaviour para procurar agentes vendedores a cada minuto addBehaviour(new TickerBehaviour(this, 60000) { protected void onTick() { // Atualizando a lista de agentes vendedores DFAgentDescription template = new DFAgentDescription(); ServiceDescription sd = new ServiceDescription(); sd.setType("book-selling"); template.addServices(sd); try { DFAgentDescription[] result = DFService.search(myAgent, template); sellerAgents = new AID[result.length]; for (int i = 0; i < result.length; ++i) sellerAgents[i] = result[i].getName(); } catch (FIPAException fe) { fe.printStackTrace(); } ... } ); ... } 29/06/2017 @LES/PUC-Rio 38 Referência Manual do Jade. Disponível em http://jade.tilab.com/doc/tutorials/noEngli sh/ManualJadePortuguese.pdf. Acesso em Agosto de 2015. 29/06/2017 @LES/PUC-Rio 39