71
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

Embed Size (px)

Citation preview

Page 1: 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

Page 2: 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)

Page 3: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 4: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 5: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

Laboratório de Engenharia de Software (LES) – PUC-Rio 5

Contêineres e Plataformas

Page 6: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

Laboratório de Engenharia de Software (LES) – PUC-Rio 6

A Plataforma

• O Jade segue o modelo da FIPA (Foundation for Intelligent Physical Agents)

Page 7: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 8: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 9: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 10: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

Laboratório de Engenharia de Software (LES) – PUC-Rio 10

O Ciclo de Vida de um Agente

Page 11: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 12: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 13: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 14: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 15: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

Laboratório de Engenharia de Software (LES) – PUC-Rio 15

Um Exemplo

Page 16: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 17: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 18: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 19: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 20: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 21: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 22: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

Laboratório de Engenharia de Software (LES) – PUC-Rio 22

A Execução de um Agente

Page 23: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 24: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

Laboratório de Engenharia de Software (LES) – PUC-Rio 24

A Hierarquia de Comportamentos

Page 25: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 26: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 27: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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 }}

Page 28: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 29: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 30: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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"

Page 31: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 32: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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)

Page 33: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 34: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 35: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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”

Page 36: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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?”

Page 37: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 38: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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}

Page 39: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 40: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 41: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 42: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 43: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 44: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 45: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 46: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

Laboratório de Engenharia de Software (LES) – PUC-Rio 46

Page 47: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

Jadex

http://vsis-www.informatik.uni-hamburg.de/projects/jadex/

Versão atual: 0.92 (09 Mai 2004)

Page 48: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 49: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 50: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 51: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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.

Page 52: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

Laboratório de Engenharia de Software (LES) – PUC-Rio 52

O Modelo Jadex

Page 53: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 54: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

Laboratório de Engenharia de Software (LES) – PUC-Rio 54

Um Exemplo

Page 55: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 56: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

Laboratório de Engenharia de Software (LES) – PUC-Rio 56

Um Exemplo

Page 57: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 58: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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>

Page 59: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 60: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 61: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

Laboratório de Engenharia de Software (LES) – PUC-Rio 61

Um Exemplo

Page 62: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 63: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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>

Page 64: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 65: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 66: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 67: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 68: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

Laboratório de Engenharia de Software (LES) – PUC-Rio 68

Outras Features

• Jadex oferece suporte ainda a– Capabilities

– Goals

– Events

Page 69: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

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

Page 70: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

Laboratório de Engenharia de Software (LES) – PUC-Rio 70

Dúvidas?

Page 71: Jade e Jadex Equipe do Curso de ES para SMA {lucena, furtado, choren, viviane}@inf.puc-rio.br

Laboratório de Engenharia de Software (LES) – PUC-Rio 71