Jade Java Agent Development Framework



Documentos relacionados
JADE : Java Agent DEvelopment Framework JADE

Me. Eng. JOÃO ALVAREZ PEIXOTO. Sistemas Multi-agentes em Java utilizando a plataforma JADE

Universidade Federal do ABC ufabc

JADE Framework para desenvolvimento de sistemas multiagente

Agentes Inteligentes: Uma Abordagem Prática com o Java Agent Development Framework

Gerenciador de proj et os; Transport e de m ensagens; Suporte às fases de desenvolvim ento e depuração; Proj et ado para sust ent ar escalabilidade;

Programação de Computadores - I. Profª Beatriz Profº Israel

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve

Centralizado Distribuído

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

(Aula 17) Threads em Java

INTRODUÇÃO À TECNOLOGIA SERVLETS

Programação de Computadores - I. Profª Beatriz Profº Israel

Usando o Conference Manager do Microsoft Outlook

Programação para Android. Aula 06: Activity, menus e action bar

Prática em Laboratório N.02 Criando um serviço Web via NetBeans

Documentação Usando o Javadoc

1.6. Tratamento de Exceções

Restauração do Exchange Server.

Para criar uma animação precisamos de uma imagem e que ela contenha alguns frames. O número de frames é uma escolha sua.

Sistemas Distribuídos

ADMINISTRAÇÃO DE SISTEMAS OPERACIONAIS SERVIÇOS IMPRESSÃO. Professor Carlos Muniz

LEIA ISTO PRIMEIRO. IBM Tivoli Configuration Manager, Versão 4.2.1

Profº. Enrique Pimentel Leite de Oliveira

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução

Grupo I [6v] Considere o seguinte extracto de um programa de definição de uma calculadora apenas com a função soma de dois valores reais

Sistemas Distribuídos

Java. Marcio de Carvalho Victorino

JSP - ORIENTADO A OBJETOS

ISO/IEC 12207: Gerência de Configuração

NetBeans. Conhecendo um pouco da IDE

Kerio Exchange Migration Tool

Aula 30 - Sockets em Java

4 O Workflow e a Máquina de Regras

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

Manual de Gerenciamento de Conteúdo

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

MANUAL DE INSTALAÇÃO

Manual de Utilização COPAMAIL. Zimbra Versão 8.0.2

Programação por Objectos. Java

Manual de Instalação do Agente Citsmart

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Novell. Novell Teaming 1.0. novdocx (pt-br) 6 April 2007 EXPLORAR O PORTLET BEM-VINDO DESCUBRA SEU CAMINHO USANDO O NOVELL TEAMING NAVIGATOR

Satélite. Manual de instalação e configuração. CENPECT Informática cenpect@cenpect.com.br

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

Como posso usar o HP Easy Printer Care através de USB ou conexão paralela?

MQSeries Everyplace. Leia-me primeiro G

Curso de Aprendizado Industrial Desenvolvedor WEB

MANUAL DO ANIMAIL Terti Software

Aula 03 - Projeto Java Web

THREADS EM JAVA. George Gomes Cabral

Java para Desenvolvimento Web

Apostila Oultlook 2007 Prof. Fabrício Melo

ADMINISTRAÇÃO DE SISTEMAS OPERACIONAIS COTAS DE DISCO. Professor Carlos Muniz

Computação Orientada aos Serviços. WF (parte 1) Semestre de Inverno 12/13

Java Threads. Introdução

Desenvolvimento de Aplicações Java/CORBA

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Prototype, um Design Patterns de Criação

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

Web Services. Autor: Rômulo Rosa Furtado

Universidade da Beira Interior. Sistemas Distribuídos

EAI Manual do Administrador

ÍNDICE. 1. Introdução O que é o Sistema Mo Porã Como acessar o Site Mo Porã Cadastro do Sistema Mo Porã...

UNIVERSIDADE FEDERAL DE GOIÁS CERCOMP (CENTRO DE RECURSOS COMPUTACIONAIS) TUTORIAL DE USO DO WEBMAIL - UFG

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Analisar os sistemas operacionais apresentados na figura e responder as questões abaixo: Identificar

Threads em Java. Sistemas Operacionais - Laboratório Professor Machado

Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede

Webmail UFMA Tutorial de Operações Básicas do Usuário Cliente Web

Relatorio do trabalho pratico 2

UNIVERSIDADE FEDERAL DO PARANÁ. CURSO: Ciência da Computação DATA: / / 2013 PERÍODO: 4 o.

Quinta Lista de Exercícios -

Programação Web. Professor: Diego Oliveira. Conteúdo 02: JSP e Servlets

Projeto de Software Orientado a Objeto

IMPLEMENTAÇÃO DE SOCKETS E THREADS NO DESENVOLVIMENTO DE SISTEMAS CLIENTE / SERVIDOR: UM ESTUDO EM VB.NET

Usar o Office 365 em seu telefone Android

Programação Orientada a Objetos (DPADF 0063)

GUIA INTEGRA SERVICES E STATUS MONITOR

Capítulo 2. Charm++ 16

LINX POSTOS AUTOSYSTEM

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

Desenvolvimento de aplicações Web. Java Server Pages

Inicialização Rápida do Novell Vibe Mobile

2 Diagrama de Caso de Uso

Procedimentos de Implantação ireport x Protheus

Índice. Para encerrar um atendimento (suporte) Conversa Adicionar Pessoa (na mesma conversa)... 20

MANUAL DO CLIENTE DE CONTAS DE

FANESE Faculdade de Administração e Negócios de Sergipe

AP_ Conta Aplicativo para digitação e envio de contas médicas no padrão TISS

Transcrição:

Jade Java Agent Development Framework http://jade.tilab.com/ Versão atual: 4.0.1 (07/07/2010)

17/08/10 @LES/PUC-Rio 2 Jade é um middleware para o desenvolvimento de sistemas multiagentes Inclui Um ambiente de execução onde os agentes "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

17/08/10 @LES/PUC-Rio 3 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

17/08/10 @LES/PUC-Rio 4

17/08/10 @LES/PUC-Rio 5 A Plataforma do Jade segue o modelo da FIPA (Foundation for Intelligent Physical Agents)

17/08/10 @LES/PUC-Rio 6 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

17/08/10 @LES/PUC-Rio 7 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

17/08/10 @LES/PUC-Rio 8 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

17/08/10 @LES/PUC-Rio 9 Ciclo de Vida de um agente

17/08/10 @LES/PUC-Rio 10 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

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 17/08/10 @LES/PUC-Rio 11

17/08/10 @LES/PUC-Rio 12 Criação de um novo Agente segue os seguintes passos 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: agente@localhost:1099/ Entra no estado Ativo É executado o método setup() Método responsável por inicializar os comportamentos do agente

17/08/10 @LES/PUC-Rio 13 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 JARS] prompt> java jade.boot -gui Agente1:examples.hello.HelloWorldAgent

17/08/10 @LES/PUC-Rio 14 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

17/08/10 @LES/PUC-Rio 15 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.");

17/08/10 @LES/PUC-Rio 16 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

17/08/10 @LES/PUC-Rio 17 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

17/08/10 @LES/PUC-Rio 18 public class UmComportamento extends Behaviour { public void action() { while (true) { // Código do Comportamento public boolean done() { return true;

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 17/08/10 @LES/PUC-Rio 19

17/08/10 @LES/PUC-Rio 20 Execução de um agente

17/08/10 @LES/PUC-Rio 21 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

17/08/10 @LES/PUC-Rio 22 A Hierarquia de Comporta mentos

17/08/10 @LES/PUC-Rio 23 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

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 17/08/10 @LES/PUC-Rio 24

17/08/10 @LES/PUC-Rio 25 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

17/08/10 @LES/PUC-Rio 26 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;

17/08/10 @LES/PUC-Rio 27 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

17/08/10 @LES/PUC-Rio 28 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"

17/08/10 @LES/PUC-Rio 29 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

17/08/10 @LES/PUC-Rio 30 A troca de mensagens é assíncrona e usa a FIPA ACL (Agent Communication Language)

17/08/10 @LES/PUC-Rio 31 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

17/08/10 @LES/PUC-Rio 32 A Linguagem ACL - Exemplo Início da mensagem Tipo de ato de comunicação (Performativa) Controle de conversação Mensagem ACL (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 ) Conteúdo da mensagem

A Linguagem ACL Performativas INFORM A porta está aberta QUERY A porta está aberta? CFP Alguém quer abrir a porta? REQUEST Abra a porta para mim AGREE OK, vou abrir a porta para você REFUSE Eu não vou abrir a porta FAILURE Eu não consigo abrir a porta PROPOSE Eu posso abrir a porta para você, pelo seguinte preço SUBSCRIBE Quero ser avisado quando a porta for aberta NOT-UNDERSTOOD Porta? Que porta? 17/08/10 @LES/PUC-Rio 33

17/08/10 @LES/PUC-Rio 34 Deve-se criar e montar um objeto ACLMessage e chamar o método send() do agente para enviar messagens: ACLMessage msg = new ACLMessage( ACLMessage.INFORM ); msg.addreceiver( new AID( "Agente2", AID.ISLOCALNAME ) ); msg.setlanguage( "English" ); msg.setontology( "Weather-forecast-ontology" ); msg.setcontent( "Today it s raining" ); send(msg);

17/08/10 @LES/PUC-Rio 35 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

17/08/10 @LES/PUC-Rio 36 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();

17/08/10 @LES/PUC-Rio 37 Selecionando um Tipo de Mensagem da Fila: Pode-se selecionar um tipo especifico 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();

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 17/08/10 @LES/PUC-Rio 38

17/08/10 @LES/PUC-Rio 39 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)

17/08/10 @LES/PUC-Rio 40 Registrando um Serviço no DF 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("-book-trading"); dfd.addservices(sd); try { DFService.register(this, dfd); catch (FIPAException fe) { fe.printstacktrace();...

17/08/10 @LES/PUC-Rio 41 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");

17/08/10 @LES/PUC-Rio 42 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();... );...

17/08/10 @LES/PUC-Rio 43 Versã0 3.5 Novo mecanismo de comunicação com 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) Está empacotado com uma aplicação web que pode ser implantada em qualquer servidor, tal como, Apache Tomcat Os web services visíveis são derivados diretamente das ações especificadas na ontologia referenciada pelo descritor de serviço registrado no DF. 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 http://jade.tilab.com/doc/tutorials/wsig_guide.pdf

17/08/10 @LES/PUC-Rio 44 Versão 3.7 Suporte a tecnologia OSGI. Um bundle - OSGi permite iniciar a plataforma dentro do ambiente OSGi e criar os agentes neste ambiente. Versão 4.01 Integração do -LEAP e

17/08/10 @LES/PUC-Rio 45 Bibligrafia para apoio ao desenvolvimento: Tutoriais na pagina do projeto; Lista de discussão muito ativa; e Livro: Developing Multi-Agent Systems with (Fabio Luigi Bellifemine, Giovanni Caire, Dominic Greenwood), Ed Wiley, 2007

17/08/10 @LES/PUC-Rio 46 Conclusão Jade é um framework (ou plataforma) 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