Professional Documents
Culture Documents
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
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
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
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
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
@LES/PUC-Rio
46