• Nenhum resultado encontrado

Jade Java Agent Development Framework

N/A
N/A
Protected

Academic year: 2021

Share "Jade Java Agent Development Framework"

Copied!
46
0
0

Texto

(1)

Jade

Java Agent Development

Framework

http://jade.tilab.com/

(2)

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

(3)

JADE

Contêiner

Instância de um ambiente Jade

É onde os agentes executam

Ao iniciar o Jade, um MainContainer é criado

Plataforma

(4)
(5)

JADE

A Plataforma do Jade segue o modelo da

FIPA (Foundation for Intelligent Physical

Agents)

(6)

JADE

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

(7)

JADE

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

(8)

JADE

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

(9)

JADE

(10)

JADE

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

(11)

JADE

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

(12)

JADE

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/JADE

Entra no estado Ativo

É executado o método setup()

Método responsável por inicializar os

comportamentos do agente

(13)

JADE

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

(14)

JADE

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

(15)

JADE

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.");

} }

(16)

JADE

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()

(17)

JADE

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

(18)

JADE

public class UmComportamento extends Behaviour { public void action() {

while (true) {

// Código do Comportamento }

}

public boolean done() { return true;

} }

(19)

JADE

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

(20)

JADE

Execução

de um

agente

(21)

JADE

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

(22)

JADE

A

Hierarquia

de

Comporta

mentos

(23)

JADE

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

(24)

JADE

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

(25)

JADE

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 }

(26)

JADE

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;

(27)

JADE

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

(28)

JADE

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"

(29)

JADE

TickerBehaviour

public class MyAgent extends Agent { protected void setup() {

addBehaviour(new TickerBehaviour(this, 10000) { protected void onTick() {

// Executar a operação Y }

} ); }

}

(30)

JADE

A troca de mensagens é assíncrona e usa

a FIPA ACL (Agent Communication

Language)

(31)

JADE

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

(32)

JADE

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

(33)

JADE

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”

(34)

JADE

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" );

(35)

JADE

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 }

(36)

JADE

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

(37)

JADE

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(); }

(38)

JADE

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

(39)

JADE

Registrando um Serviço no DF

Deve-se criar um objeto ServiceDescription e

chamar o método register() de um DF

(40)

JADE

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("JADE-book-trading"); dfd.addServices(sd);

try { DFService.register(this, dfd); }

catch (FIPAException fe) { fe.printStackTrace(); } ...

(41)

JADE

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");

(42)

JADE

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(); } ...

} ); ... }

(43)

JADE

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

(44)

JADE

Versão 3.7

Suporte a tecnologia OSGI. Um bundle

JADE-OSGi permite iniciar a plataforma dentro do

ambiente OSGi e criar os agentes neste

ambiente.

Versão 4.01

(45)

JADE

Bibligrafia para apoio ao desenvolvimento:

Tutoriais na pagina do projeto;

Lista de discussão muito ativa; e

Livro: Developing Multi-Agent Systems with

JADE (Fabio Luigi Bellifemine, Giovanni Caire,

Dominic Greenwood), Ed Wiley, 2007

(46)

JADE

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

Referências

Documentos relacionados

Segundo Abadie (2003) uma importante característica nos processos de separação é que, a menos que haja eventuais perdas ou contaminações, os produtos que saem destes processos,

Este trabalho tem como objetivo, apresentar uma metodologia alternativa de cálculo, baseada no Método dos Elementos Finitos (MEF) aliada ao Método dos Mínimos Quadrados e ao Método

Arquivo Público Municipal de Caetité. autonomia para negociar a venda de gado de seus senhores, tanto nos limites das fazendas quanto fora deles. Os negócios

Pode ser efetuada a ablação por cateter nos doentes com fibrilhação auricular não-valvular a serem tratados com Pradaxa ® 150 mg duas vezes ao dia para a prevenção de AVC..

Em casos de hemorragias graves, seu médico deve ser comunicado, e as medidas a serem tomadas consistem em: redução da dose, interrupção do tratamento e, em casos

Diante dos pontos acima ressaltados se verifica a necessidade e possibilidade da Prefeitura Municipal capitanear os esforços dos demais entes públicos (Ministério

3o A qualidade da educação básica será aferida, objetivamente, com base no IDEB, calculado e divulgado periodicamente pelo INEP, a partir dos dados sobre rendimento escolar,

Carmem Hanning Quanto ao homem que saía havia o porte as mãos o cheiro de suor seu pior Ainda assim sentiu sua falta sem bem saber por