Post on 16-Apr-2015
JADE/JADEX
Maíra Gatti2007.2
© LES/PUC-Rio
Agenda
• Jade
• Jadex
• Jadex WebBridge
• ESSMA
– AUML + Jadex
– AUML + Jade
JadeJava Agent Development Framework
http://jade.tilab.com/
Versão atual: 3.5 (25 Junho 2007)
© LES/PUC-Rio
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
© LES/PUC-Rio
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
© LES/PUC-Rio
Contêineres e Plataformas
© LES/PUC-Rio
A Plataforma
• O Jade segue o modelo da FIPA (Foundation for Intelligent Physical Agents)
© LES/PUC-Rio
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
© LES/PUC-Rio
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
© LES/PUC-Rio
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
© LES/PUC-Rio
O Ciclo de Vida de um Agente
© LES/PUC-Rio
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
© LES/PUC-Rio
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
© LES/PUC-Rio
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
© LES/PUC-Rio
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
© LES/PUC-Rio
Um Exemplo
© LES/PUC-Rio
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
© LES/PUC-Rio
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."); }}
© LES/PUC-Rio
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
© LES/PUC-Rio
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
© LES/PUC-Rio
O Esquema de um Comportamento
public class UmComportamento extends Behaviour { public void action() { while (true) { // Código do Comportamento } }
public boolean done() { return true; }}
© LES/PUC-Rio
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
© LES/PUC-Rio
A Execução de um Agente
© LES/PUC-Rio
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
© LES/PUC-Rio
A Hierarquia de Comportamentos
© LES/PUC-Rio
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 }}
© LES/PUC-Rio
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; }}
© LES/PUC-Rio
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
© LES/PUC-Rio
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"
© LES/PUC-Rio
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
© LES/PUC-Rio
A Comunicação entre Agentes
• A troca de mensagens é assíncrona e usa a FIPA ACL (Agent Communication Language)
© LES/PUC-Rio
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
© LES/PUC-Rio
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
© LES/PUC-Rio
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”
© LES/PUC-Rio
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?”
© LES/PUC-Rio
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);
© LES/PUC-Rio
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}
© LES/PUC-Rio
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();}
© LES/PUC-Rio
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();}
© LES/PUC-Rio
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
© LES/PUC-Rio
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(); } ...}
© LES/PUC-Rio
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");}
© LES/PUC-Rio
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(); } ... } ); ...}
© LES/PUC-Rio
Nova versã0 3.5 – Novidade
• Novo mecanismo de comunicação– Para lista de assinaturas
– Os agentes podem enviam mensagens sem especificar os destinatários, somente o assunto
– Implementado no kernel do Jade pelo • TopicManagement Service
• jade.core.messaging package
• Versão reestruturada do Web Service Integration Gateway (WSIG)– 1) Está empacotado com uma aplicação web que pode ser implantada
em qualquer servidor, tal como, Apache Tomcat
– 2) Os web services visíveis são derivados diretamente das ações especificadas na ontologia referenciada pelo descritor de serviço registrado no DF.
– 3) um documento WSDL padrão é produzido para cada agent service que precise ser visível como um web service.
• Desta forma é possível construir clientes web services sem nenhum conhecimento sobre qual agente provê o serviço e como ele o faz
• http://jade.tilab.com/doc/tutorials/WSIG_Guide.pdf
© LES/PUC-Rio
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
Jadex BDI Agent Systems
http://vsis-www.informatik.uni-hamburg.de/projects/jadex/
Versão atual: 0.96 (15 Junho 2007)
© LES/PUC-Rio
Jadex - Introdução
• O que são agentes inteligentes mesmo?
• Como construir os modelos mentais dos agentes usando o Jade?
© LES/PUC-Rio
Jadex - Introdução
• Modelo BDI – Belief Desire Intention
• É necessário uma arquitetura de agentes capaz de montar as inúmeras partes do agente que representa o modelo
– Agente interno
– Sociedade de agentes
– Inteligência artificial
• Jadex = Jade + BDI
– Grupo de Sistemas Distribuídos e Sistemas de Informação
– Universidade de Hamburg
© LES/PUC-Rio
Jadex
• Jade + BDI
– Mas o que muda exatamente?
AGENTES ORIENTADOS A OBJETIVOS
– Classes explícitas
• Belief, Goals, Plans
– Os agentes possuem beliefs, que pode ser qualquer tipo de classe Java e são carregados em uma base de belief
– Goals são descrições de estado a ser alcançado implícitas ou explícitas
– Para atingir os objetivos (goals) os agentes executam os planos (plans)
© LES/PUC-Rio
Jadex
Os planos podem ler e alterar os beliefs do agente
© LES/PUC-Rio
Jadex
© LES/PUC-Rio
Jadex Agent
© LES/PUC-Rio
Jadex
• OQL-like query language
– Linguagem de busca de fatos na base de beliefs
• ADF - XML based Agent Definition File
– Especifica os beliefs, goals e plans iniciais do agente
– O ambiente de execução Jadex
• le o arquivo
• gera o modelo mental do agente
• Executa o agente de acordo com os goals, selecionando os planos
• Capabilities
– Define um conjunto de funcionalidades pre-definidas
• Tais como para acessar o DF
– Arquivo tal como ADF que pode ser plugado nos agentes
© LES/PUC-Rio
Jadex - OQL
© LES/PUC-Rio
Jadex – Agent Plattform
© LES/PUC-Rio
Jadex - Fragmento de Especificação do Meta-modelo do Agente
© LES/PUC-Rio
Jadex - Especificação do Meta-modelo do Goal
© LES/PUC-Rio
Jadex – Esqueleto de Plano
© LES/PUC-Rio
Exemplo
© LES/PUC-Rio
Exemplo
© LES/PUC-Rio
Exemplo – Modelo do Agente
© LES/PUC-Rio
Plano: StackBlocks
© LES/PUC-Rio
Arquitetura Jadex
© LES/PUC-Rio
Jadex - Ferramentas
• Todas do Jade
• Ferramenta de visualização BDI
• Ferramenta Introspector
• Agente de Log (Logger Agent)
© LES/PUC-Rio
Jadex – BDI Viewer Tool
© LES/PUC-Rio
Jadex – Introspector Tool
© LES/PUC-Rio
Jadex Webbridge
• Como usar Jadex em uma aplicação Web?
• Servlets, JSP, Jade, Jadex, Goals....???
© LES/PUC-Rio
Jadex Webbridge
© LES/PUC-Rio
ESSMA
• Panacéia linguagens de modelagem e metodologias
• Panacéia de plataformas e frameworks
• Como integrar???
© LES/PUC-Rio
AUML + Jadex
• Protocolos de interação orientados a objetivos
© LES/PUC-Rio
AUML + Jadex
• Protocolos de interação orientados a objetivos
– META: Esconder o detalhe da troca de mensagens entre os agentes para dar ênfase nos aspectos de domínio dos protocolos
© LES/PUC-Rio
AUML + Jadex
• Protocolos de interação orientados a objetivos
© LES/PUC-Rio
© LES/PUC-Rio
© LES/PUC-Rio
O plano para o comprador
© LES/PUC-Rio
AUML + Jade bahaviors
• FSM: Finite State Machine
• cpXML: conversation policy XML
• template of the conversation building block
© LES/PUC-Rio
AUML -> FSM
© LES/PUC-Rio
Plugin Eclipse
© LES/PUC-Rio
Bibliografia
• Jade: http://jade.tilab.com/
• Lars Braubach, Alexander Pokahr. Goal-Oriented Interaction Protocols, Fifth German conference on Multi-Agent System TEchnologieS (MATES-2007).
• Alexander Pokahr, Lars Braubach. An Architecture and Framework for Agent-Based Web Applications, 5th International Central and Eastern European Conference on Multi-Agent Systems (CEEMAS 2007).
• Alexander Pokahr, Lars Braubach, Winfried Lamersdorf. A Flexible BDI Architecture Supporting Extensibility, The 2005 IEEE/WIC/ACM International Conference on Intelligent Agent Technology (IAT-2005).
• Alexander Pokahr, Lars Braubach, Winfried Lamersdorf. Jadex: A BDI Reasoning Engine, Chapter of Multi-Agent Programming, Kluwer Book, Editors: R. Bordini, M. Dastani, J. Dix and A. Seghrouchni.
• Alexander Pokahr, Lars Braubach, Winfried Lamersdorf. A Flexible BDI Architecture Supporting Extensibility, The 2005 IEEE/WIC/ACM International Conference on Intelligent Agent Technology (IAT-2005).
• M. Dinkloh and J. Nimis. A tool for integrated design and implementation of conversations in multiagent systems. In ProMAS Workshop, pages 187–200, 2004.
Obrigada!
Maíra Gatti
2007.2