Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br.
Transcript of Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br.
Jade e Jadex
Equipe do Curso de ES para SMA
{lucena, furtado, choren, viviane}@inf.puc-rio.br
JadeJava Agent Development
Framework
http://jade.tilab.com/
Versão atual: 3.2 (26 Jul 2004)
Laboratório de Engenharia de Software (LES) – PUC-Rio 3
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 4
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 5
Contêineres e Plataformas
Laboratório de Engenharia de Software (LES) – PUC-Rio 6
A Plataforma
• O Jade segue o modelo da FIPA (Foundation for Intelligent Physical Agents)
Laboratório de Engenharia de Software (LES) – PUC-Rio 7
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 8
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 9
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 10
O Ciclo de Vida de um Agente
Laboratório de Engenharia de Software (LES) – PUC-Rio 11
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 12
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 13
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 14
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 15
Um Exemplo
Laboratório de Engenharia de Software (LES) – PUC-Rio 16
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 17
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 18
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 19
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 20
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 21
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 22
A Execução de um Agente
Laboratório de Engenharia de Software (LES) – PUC-Rio 23
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 24
A Hierarquia de Comportamentos
Laboratório de Engenharia de Software (LES) – PUC-Rio 25
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 26
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
Laboratório de Engenharia de Software (LES) – PUC-Rio 27
Esquemas de Comportamentos Simples
// OneShotBehaviourpublic class MyOneShotBehaviour extends OneShotBehaviour { public void action() { // Executar a operação X }}
// CyclicBehaviourpublic class MyCyclicBehaviour extends CyclicBehaviour { public void action() { // Executar a operação Y }}
Laboratório de Engenharia de Software (LES) – PUC-Rio 28
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 29
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 30
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 31
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 32
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 33
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 34
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
Laboratório de Engenharia de Software (LES) – PUC-Rio 35
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 36
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 37
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 38
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 39
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 40
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 41
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 42
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 43
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 44
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 45
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 46
Jadex
http://vsis-www.informatik.uni-hamburg.de/projects/jadex/
Versão atual: 0.92 (09 Mai 2004)
Laboratório de Engenharia de Software (LES) – PUC-Rio 48
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 49
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 50
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 51
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 52
O Modelo Jadex
Laboratório de Engenharia de Software (LES) – PUC-Rio 53
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 54
Um Exemplo
Laboratório de Engenharia de Software (LES) – PUC-Rio 55
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 56
Um Exemplo
Laboratório de Engenharia de Software (LES) – PUC-Rio 57
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 58
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 59
Um Exemplo
package jadex.ex;
import jadex.runtime.*;import jade.lang.acl.*;import jadex.*;import 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 60
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 61
Um Exemplo
Laboratório de Engenharia de Software (LES) – PUC-Rio 62
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 63
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 64
Um Exemplo
// PLANO DE TRADUÇÃOpackage jadex.ex;
import jadex.runtime.*;import jade.lang.acl.*;import jadex.*;import 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 65
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 66
Um Exemplo
// PLANO DE MANUTENÇÃO DO BELIEFBASEpackage jadex.ex;
import jadex.runtime.*;import jade.lang.acl.*;import jadex.*;import 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 67
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 68
Outras Features
• Jadex oferece suporte ainda a– Capabilities
– Goals
– Events
Laboratório de Engenharia de Software (LES) – PUC-Rio 69
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 70
Dúvidas?
Laboratório de Engenharia de Software (LES) – PUC-Rio 71