jade: java agent development environment framework versão atual: 4.3.0 03/2013
TRANSCRIPT
JADE:Java Agent Development Environment Framework
http://jade.tilab.com/Versão atual: 4.3.0
03/2013
O que são Agentes?
11/04/23 @LES/PUC-Rio 2
O que são Agentes?
Agente de software é uma entidade que está situada em um ambiente e capaz de ação autônoma neste ambiente para atingir seus objetivos projetados.
Wooldridge & Jennings
A entidade Agente é qualquer coisa que possa perceber o ambiente e agir sobre o mesmo.
Russell & Norvig
11/04/23 @LES/PUC-Rio 3
O que são Agentes?
Autonomia: Operam sem intervenção humana ou de outros
agentes Tem algum tipo de controle sobre suas ações e
seu estado interno
11/04/23 @LES/PUC-Rio 4
O que são Agentes?
Características: Autonomia Reatividade Pró-atividade Interatividade Adaptação Aprendizado Racionalidade Mobilidade
11/04/23 @LES/PUC-Rio 5
O que são Agentes?
Características: Autonomia Reatividade Pró-atividade Interatividade Adaptação Aprendizado Racionalidade Mobilidade
11/04/23 @LES/PUC-Rio 6
JADE
04/11/23 @LES/PUC-Rio 7
JADE
Jade é um middleware para o desenvolvimento de sistemas multi-agentes, que suporta:
Um modelo assíncrono de programação de agentes Comunicação entre agentes de uma mesma plataforma
ou de plataformas diferentes. Mobilidade e segurança.
04/11/23 @LES/PUC-Rio 8
JADE
Jade é também uma plataforma para execução de agentes, que inclui:
Um ambiente de execução (container) onde os agentes JADE "vivem" e possam ser executados.
Uma biblioteca de classes de desenvolvimento de agentes.
Um conjunto de ferramentas gráficas que permite a administração e o monitoramento das atividades dos agentes em execução.
Contêiner e Plataforma
Contêiner Instância de um ambiente Jade É onde os agentes executam
Plataforma Conjunto de contêineres ativos
11/04/23 @LES/PUC-Rio 9
Contêineres e Plataformas
11/04/23 @LES/PUC-Rio 10
Plataforma
O Jade segue o modelo da FIPA (Foundation for Intelligent Physical Agents)
11/04/23 @LES/PUC-Rio 11
Plataforma
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
11/04/23 @LES/PUC-Rio 12
Plataforma
Oferece o serviço de páginas amarelas na plataforma
11/04/23 @LES/PUC-Rio 13
Plataforma
Sistema JADE suporta a comunicação entre vários agentes FIPA e fornece uma implementação padrão da comunicação linguagem FIPA-ACL, o que facilita a comunicação entre os agentes e permite a detecção de serviços do sistema.
11/04/23 @LES/PUC-Rio 14
Plataforma
11/04/23 @LES/PUC-Rio 15
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 comportamentos
11/04/23 @LES/PUC-Rio 16
A Classe Agent
A classe base para a definição de agentesUm agente Jade é uma instância de uma
classe Java que estende a classe AgentJá oferece todas as interações básicas da
plataforma (registro, configuração, etc...)
11/04/23 @LES/PUC-Rio 17
A Classe Agent
Oferece um conjunto de métodos para a implementação do comportamento do agente
A classe Agent oferece um scheduler (não acessível ao programador) que gerencia automaticamente o agendamento dos comportamentos
11/04/23 @LES/PUC-Rio 18
O Ciclo de Vida de um Agente
11/04/23 @LES/PUC-Rio 19
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 AMS• Ex: agente@localhost:1099/JADE• Entra no estado Ativo
É executado o método setup()• Método responsável por inicializar os
comportamentos do agente
11/04/23 @LES/PUC-Rio 20
Um Exemplo
11/04/23 @LES/PUC-Rio 21
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
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
11/04/23 @LES/PUC-Rio 23
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
11/04/23 @LES/PUC-Rio 24
O Esquema de um Comportamento
11/04/23 @LES/PUC-Rio 25
public class UmComportamento extends Behaviour { public void action() { while (true) { // Código do Comportamento } }
public boolean done() { return true; }}
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
11/04/23 @LES/PUC-Rio 26
A Execução de um Agente
11/04/23 @LES/PUC-Rio 27
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
11/04/23 @LES/PUC-Rio 28
A Hierarquia de Comportamentos
11/04/23 @LES/PUC-Rio 29
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
11/04/23 @LES/PUC-Rio 30
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
11/04/23 @LES/PUC-Rio 31
Esquemas de Comportamentos Simples
11/04/23 @LES/PUC-Rio 32
// 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 }}
Esquema Genérico de Comportamento
11/04/23 @LES/PUC-Rio 33
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; }}
A Comunicação entre Agentes
11/04/23 @LES/PUC-Rio 34
A Comunicação entre Agentes
A troca de mensagens é assíncrona e usa a FIPA ACL (Agent Communication Language)
11/04/23 @LES/PUC-Rio 35
A Linguagem ACL - Exemplo
11/04/23 @LES/PUC-Rio 36
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
A Linguagem ACL – Performativas
INFORM “A porta está aberta”QUERY “A porta está aberta?”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”
11/04/23 @LES/PUC-Rio 37
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?”
11/04/23 @LES/PUC-Rio 38
Enviando Mensagens
Deve-se criar e montar um objeto ACLMessage e chamar o método send() do agente
11/04/23 @LES/PUC-Rio 39
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);
Recebendo Mensagens
Para 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
11/04/23 @LES/PUC-Rio 40
ACLMessage msg = receive();if (msg != null) { // Processar a mensagem}
O Serviço de Páginas Amarelas – Agente DF
11/04/23 @LES/PUC-Rio 41
O Serviço de Páginas Amarelas – Agente DF
Todo agente deve registrar seu serviço no DF (Directory Facilitator)
Só existe um DF em cada plataforma Jade
11/04/23 @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)
11/04/23 @LES/PUC-Rio 43
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(); } ...}
Removendo um Serviço do DF
Chamar o método deregister() do DF (usualmente no método takeDown() do agente)
11/04/23 @LES/PUC-Rio 44
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");}
Procurando por Serviços no DF
Criar um objeto DFAgentDescription e chamar o método search() do DF
11/04/23 @LES/PUC-Rio 45
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[i].getName(); } catch (FIPAException fe) { fe.printStackTrace(); } ... } ); ...}
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 (Agent Management System), 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
11/04/23 @LES/PUC-Rio 46