Jade Java Agent Development Framework Versão atual: 3.5 (25 Junho 2007)

Slides:



Advertisements
Apresentações semelhantes
Sistemas Operacionais
Advertisements

JADE/JADEX Maíra Gatti
Agentes de Software Introdução
Estruturas de Repetição
Sistemas distribuídos
Reflexão Marco Antonio Arquiteto de Software Novembro/2007.
Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007.
Prof. Thiago Pereira Rique
Jade e Jadex Equipe do Curso de ES para SMA
Padrão de Projeto Iterator
JADE: Java Agent Development Environment Framework
Orientação a Objetos: Encapsulamento e Classificação
Viviane Torres da Silva
Sistema para Gerenciamento de Redes Baseado em Agentes Móveis
Programação Básica em Java
Polimorfismo e Classes Abstratas Profa
Programação Concorrente
JADE Java Agent DEvelopment Framework
Sincronização de Processos (6) - Troca de Mensagens -
Classes e objetos Modelagem
Classes e objetos P. O. O. Prof. Grace.
Estrutura de Dados em Java
CRIANDO OBJETOS EM JAVA
Concorrência em Java Threads em Java.
Introdução a linguagem Python
Concorrência em Java Threads em Java.
Concorrência em Java Threads em Java.
Infra-Estrutura de Comunicação (IF678)
Aula prática 13 Orientação a Objetos – C++ Parte 1
Desenvolvendo Sistemas Multiagentes com JADE
JAVA Orientação a Objetos
Programação I Aula 2 (Métodos)
Entendendo as definições de classe
Chamada Remota de Procedimentos
Linguagem de Programação JAVA
Desenvolvimento de Aplicações CORBA
Classes, Objetos, Atributos e Métodos JAVA
Java Bytecode Software Básico Mitsuo Takaki.
Plataforma JADE Mauricio S Freitas.
FIPA THE FOUNDATION FOR INTELLIGENT PHYSICAL AGENTS
Orientação a Objetos Parte I
T. D. S. I. PARA WEB Prof. Emmanuel Nolêto. Java RMI.
Pilhas Profa. Nádia Félix.
INTRODUÇÃO À ORIENTAÇÃO A OBJETOS EM JAVA
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
Listas Simplesmente Encadeadas
Wagner Santos C. de Jesus
Programação com Threads
Java Kickstart, day 2 Semelhanças com linguagem C.
Aula Prática 4 Monitoria IP/CC (~if669).
Coleções, Genéricos, Threads Marco Antonio. Collection Principais métodos da interface Collection.
Programação para Web Unidade 06 – Java Beans e BDs Prof.: Henrique Santos.
Plano de Aula Agentes que Interagem Conceitos Básicos FIPA ACL
Comunicação em Sistemas Multiagentes
Capítulo 4: Processos.
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Socket em Java.
JADE: Java Agent Development Environment Framework
Bruno Inojosa MCP .NET Framework
Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim.
Objetos Distribuídos Frameworks Orientados a Objetos.
Bruno Affonso Diego Chiquito Ruan Berté.   O código de Escalonamento no Windows é implementado no Kernel.  A rotina que desempenha as tarefas do Escalonador.
Fundamentos de Engenharia de SW Diagramas da UML Usados no Projeto de Software.
CURSO JAVA BÁSICO Módulo 9 – slide 1 Módulo 10 Threads.
Bruna Cavallero Martins Universidade Católica de Pelotas.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Agentes de Software Introdução
Transcrição da apresentação:

Jade Java Agent Development Framework Versão atual: 3.5 (25 Junho 2007)

© LES/PUC-Rio O que é Jade? Jade é um middleware para o desenvolvimento de sistemas multi-agentes Inclui –Um ambiente de execução onde os agentes JADE "vivem" e que deve estar ativo em um host antes que um agente possa ser executado –Uma biblioteca de classes que programadores podem usar para desenvolver agentes –Um conjunto de ferramentas gráficas que permite a administração e o monitoramento das atividades dos agentes em execução

© LES/PUC-Rio Contêiner e Plataforma Contêiner –Instância de um ambiente Jade –É onde os agentes executam –Ao iniciar o Jade, um MainContainer é criado Plataforma –Conjunto de contêineres ativos

© LES/PUC-Rio Contêineres e Plataformas

© LES/PUC-Rio A Plataforma O Jade segue o modelo da FIPA (Foundation for Intelligent Physical Agents)

© LES/PUC-Rio AMS e DF Agent Management System (AMS) –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 Directory Facilitator (DF) –Oferecer o serviço de páginas amarelas na plataforma

© LES/PUC-Rio A Classe Agent Representa a classe base para a definição de agentes Para o desenvolvedor, 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...) Oferece um conjunto de métodos para a implementação do comportamento do agente

© LES/PUC-Rio 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 comportamtentos A classe Agent oferece um scheduler (não acessível ao programador) que gerencia automaticamente o agendamento dos comportamentos

© LES/PUC-Rio O Ciclo de Vida de um Agente

© LES/PUC-Rio Ciclo de Vida de um Agente Iniciado –O objeto agente é criado, mas ainda não se registrou no AMS, i.e. não possui um identificador e não pode se comunicar com outros agentes Ativo –O objeto agente está registrado no AMS, possui um identificador e pode executar seus serviços Suspenso –O objeto agente está parado, i.e. sua thread interna está suspensa e o agente não está executando serviço algum

© LES/PUC-Rio Ciclo de Vida de um Agente Esperando –O objeto agente está bloqueado, esperando por algum evento, i.e. sua thread interna está dormindo e será acordada quando uma condição se tornar verdadeira Removido –O objeto agente está terminado, i.e. sua thread interna acabou sua execução e o agente não está mais registrado no AMS Em Trânsito –Um agente móvel entra neste estado quando está migrando para um novo local (contêiner). O sistema continua a armazenar as mensagens enviadas a este agente, que lhe serão passadas quando ele estiver no novo local

© LES/PUC-Rio Criando um Agente Jade Jade gerencia a criação de um novo agente com os seguintes passos O construtor do agente é executado –O agente recebe um identificador do MAS –Ex: –Entra no estado Ativo É executado o método setup() –Método responsável por inicializar os comportamentos do agente

© LES/PUC-Rio Um Exemplo package examples.hello; import jade.core.Agent; public class HelloWorldAgent extends Agent { protected void setup() { // Mostra uma mensagem de Hello System.out.println("Hello World! Meu nome eh " + getAID().getName()); } prompt> set CLASSPATH=%CLASSPATH%;.;[CLASSPATH JADE JARS] prompt> java jade.Boot -gui Agente1:examples.hello.HelloWorldAgent

© LES/PUC-Rio Um Exemplo

© LES/PUC-Rio Destruindo um Agente Jade Mesmo que não esteja fazendo coisa alguma, o agente continua executando Para terminar um agente, deve-se executar o método doDelete() que chama o método takeDown() Serve para remover todas as referências ao agente da plataforma

© LES/PUC-Rio Um Exemplo package examples.hello; import jade.core.Agent; public class HelloWorldAgent extends Agent { protected void setup() { // Mostra uma mensagem de Hello System.out.println("Hello World! Meu nome eh " + getAID().getName()); doDelete(); } protected void takeDown() { // Imprimindo uma mensagem de saida System.out.println("Agente " + getAID().getName() + " terminando."); }

© LES/PUC-Rio 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 –No método setup() –Dentro de outros comportamentos

© LES/PUC-Rio 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

© LES/PUC-Rio O Esquema de um Comportamento public class UmComportamento extends Behaviour { public void action() { while (true) { // Código do Comportamento } public boolean done() { return true; }

© LES/PUC-Rio Detalhes sobre 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

© LES/PUC-Rio A Execução de um Agente

© LES/PUC-Rio 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

© LES/PUC-Rio A Hierarquia de Comportamentos

© LES/PUC-Rio 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

© LES/PUC-Rio 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

© LES/PUC-Rio 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 }

© LES/PUC-Rio Esquema Genérico de Comportamento public class MyTwoStepBehaviour extends Behaviour { private int step = 0; public void action() { switch (step) { case 0: // Executar a operação X step++; break; case 1: // Executar a operação Y step++; break; } public boolean done() { return step == 2; }

© LES/PUC-Rio Comportamentos Especiais WakerBehaviour –Comportamento que espera um determinado período de tempo (em ms) para efetivamente executar a tarefa TickerBehaviour –Comportamento que executa uma tarefa periodicamente em intervalos de tempo constantes (em ms). Este comportamento nunca acaba

© LES/PUC-Rio WakerBehaviour public class MyAgent extends Agent { protected void setup() { System.out.println("Adicionando waker behaviour"); addBehaviour(new WakerBehaviour(this, 10000) { protected void handleElapsedTimeout() { // Executa a operação X } } ); } A operação X é executada 10 segundo depois de imprimir "Adicionando waker behaviour"

© LES/PUC-Rio TickerBehaviour public class MyAgent extends Agent { protected void setup() { addBehaviour(new TickerBehaviour(this, 10000) { protected void onTick() { // Executar a operação Y } } ); } A operação Y é executada periodicamente a cada 10 segundos

© LES/PUC-Rio A Comunicação entre Agentes A troca de mensagens é assíncrona e usa a FIPA ACL (Agent Communication Language)

© LES/PUC-Rio A Linguagem ACL Campos principais –Sender: o agente que envia a mensagem –Receivers: lista de agentes destino da mensagem –Performative: ato de fala que indica o que o agente que envia a mensagem espera com ela –Content: o real conteúdo da mensagem –Language: sintaxe usada para expressar o conteúdo –Ontology: denota a semântica dos itens do conteúdo –Outros campos de controle de convesação como: conversation-id, reply-with, in-reply-to, reply-by

© LES/PUC-Rio A Linguagem ACL - Exemplo Início da mensagem Tipo de ato de comunicação (Performativa) Controle de conversação ( inform :sender agent1 :receiver hpl-auction-server :content (price (bid good02) 150) :in-reply-to round-4 :reply-with bid04 :language FIPA SL :ontology hpl-auction ) Mensagem ACL Conteúdo da mensagem

© LES/PUC-Rio A Linguagem ACL – Performativas INFORMA porta está aberta QUERYA porta está aberta? CFPAlguém quer abrir a porta? REQUESTAbra a porta para mim AGREEOK, vou abrir a porta para você REFUSEEu não vou abrir a porta FAILUREEu não consigo abrir a porta

© LES/PUC-Rio A Linguagem ACL – Performativas PROPOSEEu posso abrir a porta para você, pelo seguinte preço SUBSCRIBEQuero ser avisado quando a porta for aberta NOT-UNDERSTOODPorta? Que porta?

© LES/PUC-Rio Enviando Mensagens Deve-se criar e montar um objeto ACLMessage e chamar o método send() do agente ACLMessage msg = new ACLMessage( ACLMessage.INFORM ); msg.addReceiver( new AID( "Agente2", AID.ISLOCALNAME ) ); msg.setLanguage( "English" ); msg.setOntology( "Weather-forecast-ontology" ); msg.setContent( "Today its raining" ); send(msg);

© LES/PUC-Rio Recebendo Mensagens Para se 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 }

© LES/PUC-Rio Bloqueando um Agente à espera de uma Mensagem O scheduler de ações do Jade não pára a execução de uma ação caso não haja mensagens para um agente Para parar a execução de uma ação à espera de uma mensagem, deve-se usar o método block() public void action() { ACLMessage msg = myAgent.receive(); if (msg != null) { // Mensagem recebida - processá-la... } else block(); }

© LES/PUC-Rio Selecionando um Tipo de Mensagem da Fila Pode-se selecionar um tipo de mensagem da fila usando um MessageTemplate public void action() { MessageTemplate mt; mt = MessageTemplate.MatchPerformative(ACLMessage.CFP); ACLMessage msg = myAgent.receive(mt); if (msg != null) { // Mensagem do tipo CFP recebida - processá-la... } else block(); }

© LES/PUC-Rio O Serviço de Páginas Amarelas – Agente DF Todo agente deve registrar seu serviço no DF Só existe um DF em cada plataforma Jade

© LES/PUC-Rio 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(); }... }

© LES/PUC-Rio 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"); }

© LES/PUC-Rio 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.getName(); } catch (FIPAException fe) { fe.printStackTrace(); }... } );... }

© LES/PUC-Rio Nova versã0 3.5 – Novidade Novo mecanismo de comunicação –Para lista de assinaturas –Os agentes podem enviam mensagens sem especificar os destinatários, somente o assunto –Implementado no kernel do Jade pelo TopicManagement Service jade.core.messaging package Versão reestruturada do Web Service Integration Gateway (WSIG) –1) Está empacotado com uma aplicação web que pode ser implantada em qualquer servidor, tal como, Apache Tomcat –2) Os web services visíveis são derivados diretamente das ações especificadas na ontologia referenciada pelo descritor de serviço registrado no DF. –3) um documento WSDL padrão é produzido para cada agent service que precise ser visível como um web service. Desta forma é possível construir clientes web services sem nenhum conhecimento sobre qual agente provê o serviço e como ele o faz

© LES/PUC-Rio Concluindo... Jade é um framework de desenvolvimento de sistemas multi-agentes –Implementa o modelo de infraestrutura FIPA com registro, páginas amarelas e mecanismo de envio de mensagens Uso de AMS, DF e de FIPA ACL –Ciclo de vida de um agente setup(), addBehaviour(), takeDown() –Abordagem orientada a tarefas: o comportamento dos agentes é decomposto em pedaços menores (Behaviour) que são adicionados ao agente quando necessário