JADE : Java Agent DEvelopment Framework

Propaganda
JADE : Java Agent DEvelopment Framework
http:// sharon.cselt.it/projects/jade
JADE
– “Framework” para desenvolvimento de software, no
projecto de sistemas multi-agente e aplicações conforme
as normas da FIPA
– Escrito em JAVA, compreende várias “packages” JAVA
Agent Platform
Agent
AMS
DF
Message Transport Protocol
2
1
JADE
• “Agent Management System” (AMS)
– Supervisão sobre acesso e uso da plataforma.
– Mantém directoria de identificadores de agentes (AID) e
seu estado. Todos os agentes se registam em AMS.
– Em uma plataforma, existe apenas um AMS.
• “Directory Facilitator” (DF)
– Serviços de páginas amarelas.
Quando plataforma JADE é lançada, AMS e DF são
criados automaticamente
3
JADE
– Plataforma pode ter vários “containers”, onde residem os
agentes
– “Containers” não estão necessariamente na mesma máquina
– Em cada plataforma existe um “container” especial: “main
container”, reside na máquina onde corre o servidor RMI
• Comunicação
– Receptor no mesmo “container” : Passagem como evento
– Receptor na mesma plataforma, mas noutro “container” :
RMI
– Receptor numa plataforma diferente : Protocolo IIOP
4
2
JADE
• Suporta mobilidade intra-plataforma e clonagem
– Plataforma pode estar distribuída através de múltiplas
máquinas (em cada máquina está um “container”)
– Agentes podem migrar entre “containers”
doMove(Location)
beforeMove() / afterMove()
– Agentes podem ser clonados
doClone(Location, String)
beforeClone() / afterClone()
5
Execução JADE
– Alterar a variável CLASSPATH
%JADE%\lib\jade.jar;JADE%\lib\jadeTools.jar;%JADE%\lib\Base64.jar;
%JADE%\lib\iiop.jar;
– Executar o comando:
java jade.Boot [options] [agentlist]
lança “main container” que inclui AMS e DF
[options]
-container
-host HostName
-port PortNumber
-gui
...
(p.defeito, máquina local)
(p.defeito, 1099)
(GUI do RMA)
[agentlist] identificadores de agentes separados por espaços
identificador = nome:nome_classe
6
3
Execução JADE
•
Lançar agentes na plataforma
i.
Usando RMA
•
seleccionar “container” e usar botão “Start New Agent”
ii. A partir da linha de comando, quando se arranca JADE
• java jade.Boot –gui nome:nomeclasse
(ex: java jade.Boot –gui ping0:examples.PingAgent.PingAgent)
7
Execução JADE
•
Múltiplos “containers”
–
Na mesma máquina
•
•
–
Iniciar JADE
java jade.Boot –gui
Adicionar novo “container” com agente
java jade.Boot –container agentId
Em máquinas diferentes
•
•
Iniciar JADE na máquina MCCARTHY
java jade.Boot –gui
Adicionar novo “container” com agente na máquina MARKOV
java jade.Boot –host MCCARTHY -container agentId
agente vive na máquina MARKOV, mas pertence à plataforma
que corre na máquina MCCARTHY; o seu endereço é
nome@MCCARTHY:1099/JADE
8
4
JADE
• Ferramentas que simplificam a administração da
plataforma e desenvolvimento de aplicações
–
–
–
–
–
Remote Monitoring Agent
Dummy Agent
Sniffer Agent
Introspector Agent
Directory Facilitator GUI
9
JADE
• “Remote Monitoring Agent” (RMA)
–
–
–
–
–
Consola gráfica para controlo da plataforma
Vizualização do estado de agentes e “containers”
Pode existir mais que um RMA na mesma plataforma
Em um “container”, apenas pode existir um RMA
Como executar:
• Como um agente normal
java jade.Boot myConsole:jade.tools.rma.rma
• Usando o argumento “-gui”
java jade.Boot –gui
10
5
JADE (RMA)
11
JADE
• “Dummy Agent”
– Ferramenta de monitoração e “debugging”
– Permite enviar, receber e visualizar mensagens ACL
– Como executar:
• A partir da linha de comando
java jade.Boot da:jade.tools.DummyAgent.DummyAgent
• A partir do menu do RMA GUI
botão “Start DummyAgent”
12
6
JADE (DummyAgent)
13
JADE
•
“Sniffer Agent”
–
–
–
Quando se espia um agente (ou grupo), as mensagens
dirigidas ou enviadas a este são visualizadas com
notação semelhante a diagramas de sequência UML
Quando um agente ou “container” é criado ou
destruído, Sniffer é informado de imediato pelo AMS
Como executar:
•
A partir do menu do RMA GUI
– botão “Start Sniffer”
nome do agente sniffer é atribuído pelo sistema
– botão “Start New Agent”
Name: XXXX
14
ClassName: jade.tools.sniffer.Sniffer
7
JADE (SnifferAgent)
15
JADE
•
“Directory Facilitator” (DF) GUI
–
–
–
DF fornece serviços de páginas amarelas. Agentes podem
registar os seus serviços no DF, ou questionar o DF
Em cada plataforma, existe pelo menos um DF
Como executar:
•
•
A partir do menu do RMA GUI
– “Tools” → “Show the DF GUI”
“Introspector Agent”
–
–
Monitoração ciclo de vida de um agente: mensagens
enviadas e recebidas e fila de comportamentos.
Como executar:
•
A partir do menu do RMA GUI
– botão “Start IntrospectorAgent”
16
8
JADE (DF Gui)
17
JADE
•
Classe “Agent”
classe base para construção de agentes
–
Início execução do agente
1. É executado o construtor
2. É atribuído um identificador ao agente, que é registado no AMS
identificador = nomelocal + @ + maquina:porto + “/JADE”
3. É executado o método setup()
O método setup() é usado para:
• Modificar dados registados no AMS
• Atribuir serviços ao agente, e registar o agente em um ou mais
domínios (DFs)
• Adicionar comportamentos (obrigatório pelo menos um). Estes
são escalonados assim que termina método setup()
18
9
JADE
–
Parar execução do agente
•
•
–
Agent.doDelete() – pára execução agente
Agent.takeDown() – método que pode ser reescrito pelo
utilizador para qualquer limpeza antes de agente ser destruído.
Comunicação
•
•
•
•
•
Passagem de mensagens assíncrona
Trocados objectos da classe ACLMessage
Agent.send(msg) – envia uma mensagem
Agent.receive() – recepção mensagem
Agent.blockingReceive() – recepção mensagem; suspende toda a
actividade do agente até que uma mensagem seja recebida
19
JADE
–
Implementação de comportamentos
•
•
•
•
•
Tarefas dos agentes são implementadas como objectos
“Behaviour”
Agent.addBehaviour(Behaviour1)
Agent.removeBehaviour(Behaviour1)
Existe uma fila de comportamentos. Escalonamento efectuado
numa política de ronda.
É executado método action() de um comportamento. Quando
retorna, é chamado o método done() para verificar se o
comportamento terminou a sua tarefa; se sim, este é removido da
fila.
20
10
JADE (exemplo)
import
import
import
import
import
import
import
jade.core.*;
jade.core.behaviours.*;
jade.lang.acl.ACLMessage;
jade.domain.FIPAAgentManagement.ServiceDescription;
jade.domain.FIPAAgentManagement.DFAgentDescription;
jade.domain.DFService;
jade.domain.FIPAException;
public class PingPong extends Agent
{
class ReceiveMsgReplyBehaviour extends SimpleBehaviour
{
private boolean finished=false;
private int n=0;
public ReceiveMsgReplyBehaviour(Agent a) { super(a); }
21
JADE (exemplo)
public void action()
{
ACLMessage msg=blockingReceive();
if (msg!=null) {
if (msg.getPerformative()!=ACLMessage.NOT_UNDERSTOOD){
ACLMessage reply = msg.createReply();
if (msg.getPerformative() ==ACLMessage.INFORM) {
String content=msg.getContent();
System.out.println("mensagem recebida:"+content);
String replycont;
if (content.equals("ping")) replycont="pong";
else replycont="ping";
reply.setContent(replycont);
if (n==10) finished=true;
n++;
}
else
reply.setPerformative(ACLMessage.NOT_UNDERSTOOD);
send(reply);
}
22
}
}
11
JADE (exemplo)
public boolean done()
{ return finished; }
}
// fim de classe ReceiveMsgReplyBehaviour
protected void setup()
{
DFAgentDescription dfd = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
sd.setType("Agente PingPong");
sd.setName(getName());
dfd.setName(getAID());
dfd.addServices(sd);
try {
DFService.register(this,dfd);
} catch (FIPAException e) {
System.out.println(getLocalName() + "erro no registo em
DF. " + e.getMessage());
doDelete();
}
23
JADE (exemplo)
ReceiveMsgReplyBehaviour Behaviour1 = new
ReceiveMsgReplyBehaviour(this);
addBehaviour(Behaviour1);
if (getName().indexOf("ping0")==0) {
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.setContent("ping");
AID receiver =new AID("pong0",false);
msg.addReceiver(receiver);
send(msg);
}
} // fim do metodo setup()
}
// fim da classe PingPong
24
12
Download