Jade e Jadex
Equipe do Curso de ES para SMA
{lucena, furtado, choren, viviane}@inf.puc-rio.br
Jade
Java Agent Development Framework
http://jade.tilab.com/
Versão atual: 3.2 (26 Jul 2004)
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
3
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
4
Contêineres e Plataformas
Laboratório de Engenharia de Software (LES) – PUC-Rio
5
A Plataforma
• O Jade segue o modelo da FIPA (Foundation for
Intelligent Physical Agents)
Laboratório de Engenharia de Software (LES) – PUC-Rio
6
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
Laboratório de Engenharia de Software (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
Laboratório de Engenharia de Software (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
Laboratório de Engenharia de Software (LES) – PUC-Rio
9
O Ciclo de Vida de um Agente
Laboratório de Engenharia de Software (LES) – PUC-Rio
10
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
11
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
12
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: agente@localhost:1099/JADE
– Entra no estado Ativo
• É executado o método setup()
– Método responsável por inicializar os comportamentos do
agente
Laboratório de Engenharia de Software (LES) – PUC-Rio
13
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
14
Um Exemplo
Laboratório de Engenharia de Software (LES) – PUC-Rio
15
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
16
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.");
}
}
Laboratório de Engenharia de Software (LES) – PUC-Rio
17
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
18
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
19
O Esquema de um Comportamento
public class UmComportamento extends Behaviour {
public void action() {
while (true) {
// Código do Comportamento
}
}
public boolean done() {
return true;
}
}
Laboratório de Engenharia de Software (LES) – PUC-Rio
20
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
21
A Execução de um Agente
Laboratório de Engenharia de Software (LES) – PUC-Rio
22
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
23
A Hierarquia de Comportamentos
Laboratório de Engenharia de Software (LES) – PUC-Rio
24
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
25
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 subcomportamentos é 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
Laboratório de Engenharia de Software (LES) – PUC-Rio
26
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
}
}
Laboratório de Engenharia de Software (LES) – PUC-Rio
27
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;
}
}
Laboratório de Engenharia de Software (LES) – PUC-Rio
28
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
29
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"
Laboratório de Engenharia de Software (LES) – PUC-Rio
30
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
31
A Comunicação entre Agentes
• A troca de mensagens é assíncrona e usa a FIPA ACL
(Agent Communication Language)
Laboratório de Engenharia de Software (LES) – PUC-Rio
32
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
33
A Linguagem ACL - Exemplo
Mensagem ACL
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
)
Laboratório de Engenharia de Software (LES) – PUC-Rio
Conteúdo da mensagem
34
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”
Laboratório de Engenharia de Software (LES) – PUC-Rio
35
A Linguagem ACL – Performativas
• 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?”
Laboratório de Engenharia de Software (LES) – PUC-Rio
36
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 it’s raining" );
send(msg);
Laboratório de Engenharia de Software (LES) – PUC-Rio
37
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
}
Laboratório de Engenharia de Software (LES) – PUC-Rio
38
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();
}
Laboratório de Engenharia de Software (LES) – PUC-Rio
39
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();
}
Laboratório de Engenharia de Software (LES) – PUC-Rio
40
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
41
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(); }
...
}
Laboratório de Engenharia de Software (LES) – PUC-Rio
42
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");
}
Laboratório de Engenharia de Software (LES) – PUC-Rio
43
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(); }
...
} );
...
}
Laboratório de Engenharia de Software (LES) – PUC-Rio
44
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
Laboratório de Engenharia de Software (LES) – PUC-Rio
45
Laboratório de Engenharia de Software (LES) – PUC-Rio
46
Jadex
http://vsis-www.informatik.uni-hamburg.de/projects/jadex/
Versão atual: 0.92 (09 Mai 2004)
O que é Jadex?
• Jadex é um framework que oferece suporte ao
modelo BDI (Beliefs – Desires – Intentions) sobre a
plataforma JADE
• Inclui
Laboratório de Engenharia de Software (LES) – PUC-Rio
48
O Modelo BDI
• Teoria sobre o raciocínio humano
– As causas para as ações humanas são os desejos,
ignorando outras facetas como p. ex. as emoções
• No caso de agentes, é composto por
– Belief
– Desire
– Plan
– Intention
Laboratório de Engenharia de Software (LES) – PUC-Rio
49
O Modelo BDI
• Crença (Belief)
– Informação que um agente possui sobre o seu ambiente e sobre seu
estado interno
• Desejo (Desire)
– Objetivo do agente que guia a escolha de ações
• Plano (Plan)
– Meio pelo qual os agentes alcançam os objetivos. Pode não ser uma
seqüência de ações simples (i.e. pode incluir sub-objetivos)
• Intenção (Intention)
– Ato de se comprometer a alcançar um determinado objetivo por
meio de um plano
Laboratório de Engenharia de Software (LES) – PUC-Rio
50
Algoritmo BDI
Initialize-state();
repeat
options := option-generator(event-queue);
selected-options := deliberate(options);
update-intentions(selected-options);
execute();
get-new-external-events();
drop-successful-attitudes();
drop-impossible-attitudes();
end repeat
A. Rao and M. Georgeff. BDI Agents: from theory to practice. In V. Lesser (ed.) Proceedings of the First
International Conference on Multi-Agent Systems (ICMAS’95), pp. 312–319. The MIT Press: Cambridge,
MA, USA, 1995.
Laboratório de Engenharia de Software (LES) – PUC-Rio
51
O Modelo Jadex
Laboratório de Engenharia de Software (LES) – PUC-Rio
52
Agente Jadex
• Descrito através de um arquivo XML
• Contém
– Nome
– Estado inicial
• Beliefs
• Goals
• Biblioteca de planos
• Expressões para especificar determinadas propriedades do agente
Laboratório de Engenharia de Software (LES) – PUC-Rio
53
Um Exemplo
Laboratório de Engenharia de Software (LES) – PUC-Rio
54
Definindo um Agente
• Arquivo de definição (ADF – agent definition file)
escrito em XML
<agent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://jadex.sourceforge.net/jadex.xsd"
name="ta"
class="jadex.runtime.JadeWrapperAgent"
package="jadex.examples.tutorial">
</agent>
prompt> set CLASSPATH=%CLASSPATH%;.;[CLASSPATH JADE JARS];
[CLASSPATH jadex.jar]
prompt> java jade.Boot rma:jadex.tools.rma.rma
Laboratório de Engenharia de Software (LES) – PUC-Rio
55
Um Exemplo
Laboratório de Engenharia de Software (LES) – PUC-Rio
56
Planos
• Devem estender uma das classes ThreadedPlan
ou NonThreadedPlan
• Deve implementar o método body()
• Deve-se colocar a referência à classe do plano no
arquivo ADF (incluindo o import para o pacote da
classe)
• Plano pode ser
– Ativo: sempre em execução
– Passivo: instanciado a cada evento
Laboratório de Engenharia de Software (LES) – PUC-Rio
57
Um Exemplo
<agent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://jadex.sourceforge.net/jadex.xsd"
name="ta"
class="jadex.runtime.JadeWrapperAgent"
package="jadex.examples">
<imports>
<import>jadex.ex.*</import>
</imports>
<plans>
<plan name="traduz" instant="true">
<constructor>
new EnglishPortugueseTranslationPlanP1()
</constructor>
<waitqueuefilter>
EnglishPortugueseTranslationPlanP1.getEventFilter()
</waitqueuefilter>
</plan>
</plans>
</agent>
Laboratório de Engenharia de Software (LES) – PUC-Rio
58
Um Exemplo
package jadex.ex;
import
import
import
import
jadex.runtime.*;
jade.lang.acl.*;
jadex.*;
java.util.*;
public class EnglishPortugueseTranslationPlanP1 extends ThreadedPlan {
private Hashtable palavras;
public EnglishPortugueseTranslationPlanP1() {
this.palavras = new Hashtable();
palavras.put("chair", "cadeira");
palavras.put("table", "mesa");
palavras.put("book", "livro");
System.out.println("Criado: " + this);
}
Laboratório de Engenharia de Software (LES) – PUC-Rio
59
Um Exemplo
public void body() {
while (true) {
REvent event = waitFor(getEventFilter());
String conteudo = ((RMessageEvent)event).getContent().toString();
if (palavras.get(conteudo) != null) {
String traducao = palavras.get(conteudo).toString();
System.out.println(conteudo + " em portugues eh " + traducao);
}
else
System.out.println("Nao conheco a palavra " + conteudo + ".");
}
}
public static IFilter getEventFilter() {
MessageTemplate mt;
mt = MessageTemplate.MatchPerformative(ACLMessage.REQUEST);
MessageFilter mfilter = new MessageFilter(mt);
return mfilter;
}
}
Laboratório de Engenharia de Software (LES) – PUC-Rio
60
Um Exemplo
Laboratório de Engenharia de Software (LES) – PUC-Rio
61
A BeliefBase
• Representa o conhecimento dos agentes sobre o
ambiente
• Deve estar declarado no arquivo ADF
• Pode-se consultar, adicionar e remover objetos da
BeliefBase dinamicamente
• Um exemplo
– Indicação no arquivo ADF
– Inserção de dados na BeliefBase
– Consulta a dados na BeliefBase
Laboratório de Engenharia de Software (LES) – PUC-Rio
62
Um Exemplo
<agent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://jadex.sourceforge.net/jadex.xsd"
name="ta3"
class="jadex.runtime.JadeWrapperAgent"
package="jadex.examples">
<imports>
<import>jadex.ex.*</import>
<import>java.util.*</import>
</imports>
<plans>
<plan name="traduz">
<constructor>new EnglishPortugueseTranslationPlanP4()</constructor>
<filter>EnglishPortugueseTranslationPlanP4.getEventFilter()</filter>
</plan>
<plan name="mantemDicionario">
<constructor>new EnglishPortugueseTranslationPlanP3()</constructor>
<filter>EnglishPortugueseTranslationPlanP3.getEventFilter()</filter>
</plan>
</plans>
<beliefs>
<belief name="dicionario" class="Hashtable">
<fact>new Hashtable()</fact>
</belief>
</beliefs>
</agent>
Laboratório de Engenharia de Software (LES) – PUC-Rio
63
Um Exemplo
// PLANO DE TRADUÇÃO
package jadex.ex;
import
import
import
import
jadex.runtime.*;
jade.lang.acl.*;
jadex.*;
java.util.*;
public class EnglishPortugueseTranslationPlanP4 extends ThreadedPlan {
public EnglishPortugueseTranslationPlanP4() {
System.out.println("Criado plano P4: " + this);
}
public void body() {
REvent event = getInitialEvent();
String conteudo = ((RMessageEvent)event).getContent().toString();
Hashtable dicionario =
(Hashtable)getBeliefbase().getFact("dicionario");
Laboratório de Engenharia de Software (LES) – PUC-Rio
64
Um Exemplo
// CONTINUAÇÃO DO PLANO DE TRADUÇÃO
if (dicionario.get(conteudo) != null) {
String traducao = dicionario.get(conteudo).toString();
System.out.println("Traduzindo: " + conteudo +
" em portugues eh " + traducao);
}
else
System.out.println("Nao conheco a palavra " + conteudo + ".");
}
public static IFilter getEventFilter() {
MessageTemplate mt;
mt = MessageTemplate.MatchPerformative(ACLMessage.REQUEST);
MessageFilter mfilter = new MessageFilter(mt);
return mfilter;
}
}
Laboratório de Engenharia de Software (LES) – PUC-Rio
65
Um Exemplo
// PLANO DE MANUTENÇÃO DO BELIEFBASE
package jadex.ex;
import
import
import
import
jadex.runtime.*;
jade.lang.acl.*;
jadex.*;
java.util.*;
public class EnglishPortugueseTranslationPlanP3 extends ThreadedPlan {
public EnglishPortugueseTranslationPlanP3() {
System.out.println("Criado plano P3: " + this);
}
public void body() {
REvent event = getInitialEvent();
String conteudo = ((RMessageEvent)event).getContent().toString();
Hashtable dicionario =
(Hashtable)getBeliefbase().getFact("dicionario");
StringTokenizer st = new StringTokenizer(conteudo, " ");
Laboratório de Engenharia de Software (LES) – PUC-Rio
66
Um Exemplo
// CONTINUAÇÃO DO PLANO DE MANUTENÇÃO DO BELIEFBASE
if (st.countTokens() == 4) {
st.nextToken(); st.nextToken();
String palavraIngles = st.nextToken();
String palavraPortugues = st.nextToken();
if (!dicionario.containsKey(palavraIngles))
dicionario.put(palavraIngles, palavraPortugues);
}
// Código para imprimir a Hashtable na tela (removido daqui)
}
public static IFilter getEventFilter() {
MessageTemplate mt = new MessageTemplate(new
MatchStartContentLiteral("adicione ingles_portugues"));
MessageFilter mfilter = new MessageFilter(mt);
return mfilter;
}
}
Laboratório de Engenharia de Software (LES) – PUC-Rio
67
Outras Features
• Jadex oferece suporte ainda a
– Capabilities
– Goals
– Events
Laboratório de Engenharia de Software (LES) – PUC-Rio
68
Concluindo...
• Jadex é um framework de desenvolvimento de
sistemas multi-agentes
– Implementa o modelo BDI
• Planos
• Beliefs
• Objetivos
– É feito sobre o Jade
Laboratório de Engenharia de Software (LES) – PUC-Rio
69
Dúvidas?
Laboratório de Engenharia de Software (LES) – PUC-Rio
70
Laboratório de Engenharia de Software (LES) – PUC-Rio
71
Download

Aula09(Plataforma) - (LES) da PUC-Rio