Desenvolvendo sistemas multiagentes com jade

Propaganda
Desenvolvendo SMAs na Plataforma JADE
Pós Graduação em
Engenharia da
Informação
Tópicos Especiais
em Ciências
Cognitivas
André Filipe de Moraes Batista
[email protected]
UFABC 2009
Objetivos

Conhecer a arquitetura da plataforma JADE

Desenvolver a programação na plataforma
JADE, com o desenvolvimento de um sistema
multiagente

Conhecer as ferramentas oferecidas pela
plataforma
1
JADE
Java Agent Development framework
JADE - Middleware
Biblioteca de alto nível que facilita o
desenvolvimento de aplicações fornecendo
serviços genéricos úteis para várias
aplicações
JADE :
 Plataforma de agentes em conformidade com
o padrão FIPA
 Package para o desenvolvimento de agentes

JADE - Implementação

A implementação dos agentes em JADE será
em JAVA.

Por quê utilizar JAVA ?
 ambientes heterogêneos distribuídos
 Serialização de Objetos
 RMI
 etc
 POO
2
Instalando o Software
Configuração das variáveis de ambiente
- Instalação dos arquivos fontes
-Execução da plataforma
-
Requisitos Mínimos
Para execução da plataforma 
 Java Run-Time
Environment(JRE) 1.4 ou
superior
Para desenvolvimento 
 Java Development Kit (JDK) 1.4
ou superior
Software JADE

Licença LGPL
Direitos:



Acesso ao código fonte
Fazer e distribuir cópias
Fazer melhorias e novas funcionalidades
Deveres:


Jamais fazer modificações privadas e secretas
Não alterar a licença e suas modificações
Software JADE

Disponível em
http://jade.cselt.it
http://jade.tilab.com



Última versão: 3.7
Software JADE
Instalação





Faça o download do arquivo jadeAll.zip
Descompacte este arquivo para o hd principal (C:)
Será criada uma pasta chamada jade.
Inclua a seguinte linha na variável de ambiente
path:
 .;c:\java\bin;c:\java\lib
E na variável classpath:
 .;c:\jade\lib\jade.jar; c:\jade\lib\jadeTools.jar;
c:\jade\lib\iiop.jar
Obtendo ajuda
•
JADE administrator guide
http://jade.tilab.com/doc/administratorsguide.pdf
•
JADE programmer guide
http://jade.tilab.com/doc/programmersguide.pdf
•
Examples & tutorials
http://jade.tilab.com/doc/index.html
Nosso manual no site Oficial
http://jade.tilab.com/doc/tutorials/noEnglish
/ManualJadePortuguese.pdf
Developing Multi-Agent Systems with JADE
Fabio Bellifemine, Giovanni Caire, Dominic
Greenwood
Editor: WILEY
ISBN: 978-0-470-05747-6
3
JADE - Arquitetura
- Arquitetura da plataforma JADE
-Agentes FIPA: Páginas Amarelas e
Páginas Brancas
-
Arquitetura


Jade é um middleware para o
desenvolvimento de sistemas multiagentes
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
Padrão FIPA

JADE segue o modelo da FIPA (Foundation for
Intelligent Physical Agents)
Arquitetura
PLATFORM
a set of active
containers
The main container of the platform;
all other containers register with it as
soon as they start.
CONTAINER
a running instance of the
JADE runtime environment
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
3
Primeiros Programas
Classe Agent
-Modelo Computacional de um Agente
-Hello World
- Ciclo de Execução dos Agentes
-Ambiente Gráfico da Plataforma
-
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
Modelo Computacional de um 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
 Hello World
Agentes são como
Applets, eles executam
dentro de outro programa
javac *.java
java jade.Boot Fred:HelloAgent
No caso, a classe
jade.Boot fornece o
ambiente de execução dos
agentes
Importamos
jade.core.Agent
Um agente é uma
extensão da classe
Agent
Método setup é o
método main de um
agente
Agentes – Ciclo de Vida
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
Agentes – Ciclo de Vida
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
Agent Identifiers

classe jade.core.AID
getAID()  obter identificação do agente

getAID().getLocalName()

GUID  getAID().getName()


Endereços  método getAID().getAllAdresses(),
retorna um interator


Interator  auxílio com Collections
Métodos  hasNext() e next()
O método
getAID().getAllAddresses()
retorna um objeto Interator
java jade.Boot Luis:InfoAgentes
Hello World ! Eu sou um agente!
Meu nome local é Luis
Meu nome global (GUID) é Luis@lap:1099/JADE
Meus endereços são:
- http://lap:7788/acc
Passando Argumentos (1/3)
Importamos a
classe AID
para manipular
AID’s
Passando Argumentos (2/3)
O método
doDelete() invoca o
método takeDown()
Passando Argumentos (3/3)
java jade.Boot Jose:CompradordeLivros(“O-Pequeno-Principe”)
Ola !!! Eu sou o Agente Comprador Jose e estou pronto para comprar !
Pretendo comprar o livro: O-Pequeno-Principe
java jade.Boot Jose:CompradordeLivros
Ola !!! Eu sou o Agente Comprador Jose e estou pronto para comprar !
Nao tenho livros para comprar !
Agente Comprador Jose@lap:1099/JADE esta finalizado
Interface Gráfica

java jade.Boot –gui …
 Executa
a plataforma com interface gráfica
 Na
verdade é um agente que possui interface gráfica,
denominado RMA (Remote Monitoring Agent)

Seria possível, então, desenvolver um agente
com interface gráfica???
Basic operations:
• Start
• Kill
• Suspend
Active agents:
• Resume
• RMA
(the GUI itself)
• Send
Message
• ams (white pages)
• Migrate
• df (yellow pages)
• Clone
Useful tools:
• Sniffer (“interaction spy”)
• Dummy agent
• Log Manager
• Introspector (agents internals)
• Add platform
4
Comportamentos
Behaviours
-Tipos de Comportamentos
-Comportamentos pré-definidos
-Aplicação
-
Comportamentos



Cada ação do agente  comportamento
Código deve estar em uma classe que herde
jade.core.behaviour.Behaviour
Uma vez implementado, basta chamar o
método addBehaviour() para que o
comportamento seja executado.
Exemplo (1/5)
Exemplo (2/5)
Exemplo (3/5)
Método action() é
executado quando
o comportamento é
acionado.
Exemplo (4/5)
Variável que
representa o agente
Exemplo (5/5)
Método que verifica a
finalização do
comportamento.
Tipos de Comportamentos
Simple Behaviour
Composite Behaviour
40
F.F.
Dalpiaz
– AOSE
2008-09
Dalpiaz
– AOSE
2008-09
Comportamentos Simples

One Shot Behaviour

Um comportamento é dito one-shot quando



Após o método action() este é finalizado
Ou seja, o método action() é executado apenas 1 vez
jade.core.behaviours.OneShotBehaviour fornece a
implementação de um comportamento one-shot

Esta implementa o método done() retornando true
Comportamentos Simples

Comportamentos Cíclicos

Um comportamento é dito cíclico quando



Nunca termina
Seu método action() executa a mesma coisa diversas vezes
jade.core.behaviours.CyclicBehaviour

Implementa o método done() retornando false
Comportamentos Simples

Comportamentos Temporais
 WakerBehaviour
e TickerBehaviour.
 possuem
uma estreita relação com o tempo durante
sua execução
 Aos serem invocados, ambos aguardam até que se
tenha cumprido um tempo de definido (time-out) para
serem executados.
 Waker
vs. Ticker
 Executa apenas uma vez
 Ticker  Executa a cada time-out
 Waker
Comportamentos Simples

Waker
Comportamentos Simples

Ticker
Comp. Compostos


Comportamentos compostos tentam modelar diferentes
tipos de comportamentos de um agente
A classe abstrata
jade.core.behaviours.CompositeBehaviour modela
estes tipos de comportamento




É feita pela composicao de outros comportamentos (children)
É apenas uma interface
Não define como os comportamentos filhos serão escalonados
Duas formas de escalonamento estão disponíveis


Sequencial
Paralela
Sequential behaviour


Comportamentos filhos
são executados em
sequencia
Dois modos de usar:



Extendendo
jade.core.behaviours.Se
quentialBehaviour
Declarando um
SequentialBehaviour
Depois da execução
de todos os filhos, o
comportamento é
finalizado
Parallel behaviour

Escalonamento concorrente dos comportamentos filhos


Classe jade.core.behaviours.ParallelBehaviour
Três modos de finalização do comportamento pai




when all children are done (constant ParallelBehaviour.WHEN_ALL)
when any child is done (constant ParallelBehaviour.WHEN_ANY)
when N children are terminated
use the constructor ParallelBehaviour(int endCondition)
Parallel Behaviour
Output
Behaviour 1 executing cycle 1
Behaviour 2 executing cycle 1
Behaviour 3 executing cycle 1
Behaviour 1 executing cycle 2
Behaviour 2 executing cycle 2
Behaviour 3 executing cycle 2
Behaviour 2 executing cycle 3
Behaviour 1 executing cycle 3
Behaviour 2 executing cycle 4
FMS Behaviour

Semelhante a uma máquina de estado finito



Classe jade.core.behaviours.FSMBehaviour
Cada comportamento filho é um estado da máquina
Veja exemplo em nossa apostila
5
Comunicação entre Agentes
Estrutura de uma mensagem em JADE
-Envio/Recebimento de mensagens
-Respondendo mensagens
-Encontrando agentes
-Buscando no AMS
-
Comunicação entre Agentes

JADE agents have communication capabilities


The adopted paradigm is asynchronous message passing.
Each agent has a sort of mailbox (the agent message
queue)



JADE posts into the mailbox the messages sent by other agents
Whenever a message is posted in the message queue the
receiving agent is notified
The programmer decides when to get the message from the
message queue
How do agents communicate?

Messages exchanged by JADE agents have a format
specified by the FIPA ACL (Agent Communication
Language)


Instances of the jade.lang.acl.ACLMessage class.
JADE provides methods to get and set all the fields
defined by the ACL language







get/setPerformative()
get/setSender()
add/getAllReceiver()
get/setLanguage()
get/setOntology()
get/setContent()
…
Enviando uma Mensagem

Sending a message to another agent requires



filling the fields of an ACLMessage object
call the send() method of the Agent class
The code below informs an agent whose nickname is
Peter that today it’s raining
Receiving messages

The JADE runtime automatically posts messages in the receiver’s
private message queue as soon as they arrive

An agent can pick up messages from its message queue by means
of the receive() method

This method returns the first message in the message queue
(removing it) or null if the message queue is empty and immediately
returns
Blocking behaviours

The previous behavior is continuously executing even no messages
occur - msg != null is false.

In general, this is not a good way of programming…

Use the block() method

Another way of enacting blocking behaviours is using the
blockingReceive() method instead of receive().
Exemplo: Sender
Exemplo: Receiver
Seleção de Mensagens

The receive() method returns the first message in the message
queue and removes it.

If there are two (or more) behaviours receiving messages, one may
“steal” a message that the other one was interested in.

To avoid this it is possible to read only messages with certain
characteristics specifying a jade.lang.acl.MessageTemplate
parameter in the receive() method.
6
DF e AMS
Registro
-Exclusão de registro
-Busca
-Métodos Úteis
-
Páginas Amarelas
Páginas Amarelas


The DF is an agent and as such it communicates using
ACL
The ontology and language that the DF “understands”
are specified by FIPA

•
The jade.domain.DFService class provides static utility
methods that facilitate the interactions with the DF





It is possible to search/register to a DF agent of a remote
platform
register()
modify()
deregister()
search()
The JADE DF also supports a subscription mechanism


When an agent registers with the DF it must provide a description
(jade.domain.FIPAAgentManagement.DFAgentDescription) The
description is composed of

The agent AID

A collection of service descriptions (class ServiceDescription)

In turn, ServiceDescription is composed of

The service type (e.g. “Weather forecast”)

The service name (e.g. “Meteo-1”)

The languages, ontologies and interaction protocols that must be known to
exploit the service

A collection of service-specific properties in the form key-value pair
When an agent searches/subscribes to the DF it must specify
another DFAgentDescription that is used as a template
Páginas Amarelas

Ao finalizar um agente, deve-se retirar seu
cadastro das páginas amarelas
 Podemos
usar o método takeDown()
DF – Busca (1/2)
public class Busca extends Agent {
protected void setup() {
DFAgentDescription template = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
sd.setType("Tipo");
template.addServices(sd);
try{
DFAgentDescription[] result = DFService.search(this,
template);
//Imprimo os resultados
for (int i = 0; i < result.length; i++) {
String out = result[i].getName().getLocalName() + "
provê ";
DF – Busca (2/2)
//Para obter os serviços do agente invocamos
//o método getAllServices();
Iterator iter = result[i].getAllServices();
while (iter.hasNext()) {
//Extraímos os servicos para um objeto ServiceDescription
ServiceDescription SD = (ServiceDescription) iter.next();
//Capturamos o nome do serviço
out += " " + SD.getName();
}
System.out.println(out);
} //fim do laço for
} catch (FIPAException e) {
e.printStackTrace();
}
}
}
Download