You are on page 1of 46

Jade

Java Agent Development


Framework
http://jade.tilab.com/
Verso atual: 4.0.1 (07/07/2010)

JADE
Jade um middleware para o
desenvolvimento de sistemas multiagentes
Inclui
Um ambiente de execuo 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 grficas que
permite a administrao e o monitoramento
das atividades dos agentes em execuo
17/08/10

@LES/PUC-Rio

JADE
Continer
Instncia de um ambiente Jade
onde os agentes executam
Ao iniciar o Jade, um MainContainer criado

Plataforma
Conjunto de contineres ativos

17/08/10

@LES/PUC-Rio

JADE

17/08/10

@LES/PUC-Rio

JADE
A Plataforma do Jade segue o modelo da
FIPA (Foundation for Intelligent Physical
Agents)

17/08/10

@LES/PUC-Rio

JADE
Agent Management System (AMS)
Agente que exerce o controle sobre o acesso e
o uso da plataforma
Existe um nico AMS por plataforma
Mantm a lista de identificadores dos agentes
(AID) que esto na plataforma
Todo agente deve se registrar no AMS

Directory Facilitator (DF)


Oferecer o servio de pginas amarelas na
plataforma

17/08/10

@LES/PUC-Rio

JADE
A classe Agent
Representa a classe base para a definio de
agentes
Para o desenvolvedor, um agente Jade uma
instncia de uma classe Java que estende a
classe Agent
J oferece todas as interaes bsicas da
plataforma (registro, configurao, etc...)
Oferece um conjunto de mtodos para a
implementao do comportamento do agente

17/08/10

@LES/PUC-Rio

JADE
Modelo Computacional do Agente
Um agente multi-tarefa, onde os servios so
executados concorrentemente
Cada servio de um agente deve ser
implementado como um ou mais
comportamtentos
A classe Agent oferece um scheduler (no
acessvel ao programador) que gerencia
automaticamente o agendamento dos
comportamentos

17/08/10

@LES/PUC-Rio

JADE
Ciclo de Vida de um agente

17/08/10

@LES/PUC-Rio

JADE
Iniciado
O objeto agente criado, mas ainda no se
registrou no AMS, i.e. no possui um identificador
e no pode se comunicar com outros agentes

Ativo
O objeto agente est registrado no AMS, possui
um identificador e pode executar seus servios

Suspenso
O objeto agente est parado, i.e. sua thread
interna est suspensa e o agente no est
executando servio algum

17/08/10

@LES/PUC-Rio

10

JADE
Esperando
O objeto agente est bloqueado, esperando por algum
evento, i.e. sua thread interna est dormindo e ser
acordada quando uma condio se tornar verdadeira

Removido
O objeto agente est terminado, i.e. sua thread
interna acabou sua execuo e o agente no est
mais registrado no AMS

Em Trnsito
Um agente mvel entra neste estado quando est
migrando para um novo local (continer). O sistema
continua a armazenar as mensagens enviadas a este
agente, que lhe sero passadas quando ele estiver no
novo local
17/08/10

@LES/PUC-Rio

11

JADE
Criao de um novo Agente segue os
seguintes passos
Jade gerencia a criao 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 mtodo setup()
Mtodo responsvel por inicializar os
comportamentos do agente
17/08/10

@LES/PUC-Rio

12

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());
}
}
prompt> set CLASSPATH=%CLASSPATH%;.;[CLASSPATH JADE JARS]
prompt> java jade.Boot -gui Agente1:examples.hello.HelloWorldAgent

17/08/10

@LES/PUC-Rio

13

JADE
Destruindo um Agente Jade
Mesmo que no esteja fazendo coisa alguma, o
agente continua executando
Para terminar um agente, deve-se executar o
mtodo doDelete() que chama o mtodo
takeDown()
Serve para remover todas as referncias ao
agente da plataforma

17/08/10

@LES/PUC-Rio

14

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

17/08/10

@LES/PUC-Rio

15

JADE
As Tarefas do Agente Classe Behaviour
Todas as tarefas dos agentes so executadas
por meio de "comportamentos"
Um comportamento um objeto da classe
Behaviour
O agente adiciona um comportamento com o
mtodo addBehaviour()
Comportamentos podem ser adicionados a
qualquer momento
No mtodo setup()
Dentro de outros comportamentos

17/08/10

@LES/PUC-Rio

16

JADE
As Tarefas do Agente Classe Behaviour
Mtodo action()
Mtodo que define as operaes que so executadas
quando o comportamento est em execuo

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

17

JADE

public class UmComportamento extends Behaviour {


public void action() {
while (true) {
// Cdigo do Comportamento
}
}
public boolean done() {
return true;
}
}

17/08/10

@LES/PUC-Rio

18

JADE
Detalhes sobre a Execuo de
Comportamentos
Um agente pode executar diversos
comportamentos concorrentemente
O scheduling de comportamentos no
preemptivo
Quando um comportamento est agendado para
execuo, o mtodo action chamado e executa at
retornar
Quem deve definir quando um agente deve passar da
execuo de um comportamento para outro o
desenvolvedor

17/08/10

@LES/PUC-Rio

19

JADE
Execuo
de um
agente

17/08/10

@LES/PUC-Rio

20

JADE
A Hierarquia de Comportamentos
Comportamentos Simples
Modelam os comportamentos atmicos
OneShotBehaviour e CyclicBehaviour

Comportamentos Compostos
Modelam comportamentos que so compostos de
outros comportamentos. Assim, as operaes que
devem ser executadas no esto definidas neste
comportamento em si, mas nos comportamentos
filhos que o compem
SequentialBehaviour, ParallelBehaviour e
FSMBehaviour

17/08/10

@LES/PUC-Rio

21

JADE
A
Hierarquia
de
Comporta
mentos

17/08/10

@LES/PUC-Rio

22

JADE
Comportamentos Simples
OneShotBehaviour
Modela comportamentos que s devem executar uma
vez e que no podem ser bloqueados (parar o
comportamento at que algum evento ocorra)

CyclicBehaviour
Modela comportamentos atmicos que devem ser
executados eternamente

17/08/10

@LES/PUC-Rio

23

JADE
Comportamentos Compostos
SequentialBehaviour
Executa seus sub-comportamentos seqencialmente
e termina quando todos estes estiverem terminados

ParallelBehaviour
Executa seus sub-comportamentos concorrentemente
e termina quando uma condio particular sobre o
conjunto de sub-comportamentos alcanada

FSMBehaviour
Executa seus sub-comportamentos como uma
Mquina de Estados Finita (FSM). Quando uma tarefa
acaba, sua sada usada para se calcular a transio
para a prxima tarefa. O comportamento termina
quando uma tarefa final executada
17/08/10

@LES/PUC-Rio

24

JADE
Esquemas de Comportamentos Simples
// OneShotBehaviour
public class MyOneShotBehaviour extends OneShotBehaviour {
public void action() {
// Executar a operao X
}
}
// CyclicBehaviour
public class MyCyclicBehaviour extends CyclicBehaviour {
public void action() {
// Executar a operao Y
}
}

17/08/10

@LES/PUC-Rio

25

JADE
Esquema Genrico de Comportamento
public class MyTwoStepBehaviour extends Behaviour {
private int step = 0;
public void action() {
switch (step) {
case 0:
// Executar a operao X
step++;
break;
case 1:
// Executar a operao Y
step++;
break;
}
}
public boolean done() {
return step == 2;
}
}

17/08/10

@LES/PUC-Rio

26

JADE
Comportamentos Especiais
WakerBehaviour
Comportamento que espera um determinado perodo
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

27

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 operao X
}
} );
}
}
A operao X executada 10 segundo depois de imprimir "Adicionando
waker behaviour"

17/08/10

@LES/PUC-Rio

28

JADE
TickerBehaviour
public class MyAgent extends Agent {
protected void setup() {
addBehaviour(new TickerBehaviour(this, 10000) {
protected void onTick() {
// Executar a operao Y
}
} );
}
}
A operao Y executada periodicamente a cada 10 segundos

17/08/10

@LES/PUC-Rio

29

JADE
A troca de mensagens assncrona e usa
a FIPA ACL (Agent Communication
Language)

17/08/10

@LES/PUC-Rio

30

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 contedo da mensagem
Language: sintaxe usada para expressar o contedo
Ontology: denota a semntica dos itens do
contedo
Outros campos de controle de convesao como:
conversation-id, reply-with, in-reply-to, reply-by

17/08/10

@LES/PUC-Rio

31

JADE
A Linguagem ACL - Exemplo
Mensagem ACL
Incio da mensagem

Tipo de ato de comunicao


(Performativa)

Controle de conversao

17/08/10

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

@LES/PUC-Rio

Contedo da mensagem

32

JADE
A Linguagem ACL Performativas
INFORM
A porta est aberta
QUERY
A porta est aberta?
CFP
Algum quer abrir a porta?
REQUEST Abra a porta para mim
AGREE
OK, vou abrir a porta para voc
REFUSE
Eu no vou abrir a porta
FAILURE
Eu no consigo abrir a porta
PROPOSE Eu posso abrir a porta para voc, pelo
seguinte preo
SUBSCRIBE Quero ser avisado quando a porta for
aberta
NOT-UNDERSTOOD
Porta? Que porta?

17/08/10

@LES/PUC-Rio

33

JADE
Deve-se criar e montar um objeto
ACLMessage e chamar o mtodo 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 its raining" );
send(msg);

17/08/10

@LES/PUC-Rio

34

JADE
Para se receber uma mensagem usa-se o
mtodo receive(), que recupera a primeira
mensagem da fila de mensagens do
agente
Este mtodo 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

35

JADE
Bloqueando um Agente espera de uma
Mensagem
O scheduler de aes do Jade no pra a
execuo de uma ao caso no haja
mensagens para um agente
Para parar a execuo de uma ao espera
de uma mensagem, deve-se usar o mtodo
block()
public void action() {
ACLMessage msg = myAgent.receive();
if (msg != null) { // Mensagem recebida process-la
else
block();
}

17/08/10

@LES/PUC-Rio

36

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

17/08/10

@LES/PUC-Rio

37

JADE
O Servio de
Pginas
Amarelas
(Agente DF)
Todo agente
deve registrar
seu servio no
DF
S existe um
DF em cada
plataforma
Jade

17/08/10

@LES/PUC-Rio

38

JADE
Registrando um Servio no DF
Deve-se criar um objeto ServiceDescription e
chamar o mtodo register() de um DF
(usualmente no mtodo setup() do agente)

17/08/10

@LES/PUC-Rio

39

JADE
Registrando um Servio 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(); }
...
}

17/08/10

@LES/PUC-Rio

40

JADE
Removendo um Servio do DF
Chamar o mtodo deregister() do DF
(usualmente no mtodo takeDown() do
agente)
protected void takeDown() {
// Saindo do DF
try {
DFService.deregister(this);
}
catch (FIPAException fe) {
fe.printStackTrace();
}
// Mostrando uma mensagem de sada
System.out.println("Agente vendedor " + getAID().getName() +
" terminando");
}

17/08/10

@LES/PUC-Rio

41

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

17/08/10

@LES/PUC-Rio

42

JADE
Vers0 3.5
Novo mecanismo de comunicao com lista de assinaturas
Os agentes podem enviam mensagens sem especificar os destinatrios,
somente o assunto
Implementado no kernel do Jade pelo TopicManagement Service
jade.core.messaging package

Verso reestruturada do Web Service Integration Gateway (WSIG)


Est empacotado com uma aplicao web que pode ser implantada em
qualquer servidor, tal como, Apache Tomcat
Os web services visveis so derivados diretamente das aes especificadas
na ontologia referenciada pelo descritor de servio registrado no DF.
Um documento WSDL padro produzido para cada agent service que
precise ser visvel como um web service.
Desta forma possvel construir clientes web services sem nenhum
conhecimento sobre qual agente prov o servio e como ele o faz
http://jade.tilab.com/doc/tutorials/WSIG_Guide.pdf

17/08/10

@LES/PUC-Rio

43

JADE
Verso 3.7
Suporte a tecnologia OSGI. Um bundle JADEOSGi permite iniciar a plataforma dentro do
ambiente OSGi e criar os agentes neste
ambiente.

Verso 4.01
Integrao do JADE-LEAP e JADE

17/08/10

@LES/PUC-Rio

44

JADE
Bibligrafia para apoio ao desenvolvimento:
Tutoriais na pagina do projeto;
Lista de discusso muito ativa; e
Livro: Developing Multi-Agent Systems with
JADE (Fabio Luigi Bellifemine, Giovanni Caire,
Dominic Greenwood), Ed Wiley, 2007

17/08/10

@LES/PUC-Rio

45

JADE
Concluso
Jade um framework (ou plataforma) de
desenvolvimento de sistemas multi-agentes
Implementa o modelo de infraestrutura FIPA com
registro, pginas 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 pedaos menores
(Behaviour) que so adicionados ao agente quando
necessrio
17/08/10

@LES/PUC-Rio

46

You might also like