Desenvolvendo Sistemas Multiagentes com JADE
description
Transcript of Desenvolvendo Sistemas Multiagentes com JADE
Desenvolvendo Sistemas Multiagentes com JADE
Allan [email protected]
SMA e o JADE
SMA tem muitas coisas em comum Modelos de agentes Transporte de mensagens Tipos de comportamento
Precisamos fazer tudo do zero sempre?
É ai que entram os frameworks multiagentes
Roteiro
O que é o JADE? Visão geral do JADE
Arquitetura e funcionalidades Implementação agentes
Modelo de Agente do JADE Criando comportamentos para os
Agentes Fazendo os Agentes se comunicarem Serviços de Páginas Amarelas
O que o JADE?
JADE Java Agent DEvelopment framework
Criado pela Teltecom Italia Atua como um middleware para o
desenvolvimento de SMA em Java Possui um conjunto de ferramentas e
um biblioteca de programação Permite a distribuição dos agentes É baseado nos modelos da FIPA
Visão Geral do JADE
Runtime Evironment Infra-estrutura para dar “vida” aos
agentes Library
Classes para auxiliar na implementação da simulação
Graphical Tools Permitem a administração e o
monitoramento da simulação
Visão Geral do JADE
Utilitários de desenvolvimento Remote Monitoring Agent Dummy Agent Sniffer Agent Directory Facilitator GUI
Visão Geral do JADE
Library
Agent PlatfromAgent
Agent Management System
Directory Facilitator
Message Transport System
Criando Agentes
Todos os agentes devem herdar da classe jade.core.Agent
public class BookBuyerAgent extends Agent {
...
}
Criando Agentes
setup() e takeDown() e getAID()
public class BookBuyerAgent extends Agent {
protected void setup() { System.out.println(getAID().getName() + " is ready"); }
protected void takeDown() { System.out.println(getAID().getName() + " deleted"); }
}
Rodando Agentes no JADE A classe jade.Boot tem um método
main() que recebe o nome e o tipo dos agentes como parâmetro
Exemplo de parâmetro buyer1:BookBuyerAgent
buyer2:BookBuyerAgent Exemplo...
Passando Parâmetros para os Agentes
• Também podemos passar parâmetros para os agentes quando queremos
• Exemplo:▪ buyer1:BookBuyerAgent(The-lord-of-the-rings)
buyer2:BookBuyerAgent(Harry-Potter) O método getArguments() retorna
um Object[] com os parâmetros dos agentes
Exemplo...
Comportamentos
Comportamento dos agentes é definido pela classe abstrata Behaviour
Devemos herdar desta classe e adicionar comportamentos aos agentes com o método addBehaviour()
Principais métodos a serem implementados: void action() boolean done()
Ciclo de Vida de um Agente
Setup()O
agente foi
morto?
Pegue o próximo
comportamento
c.action()
Remova c do pool de
comportamentos
c.done()?
takeDown()Sim
Não
Não
Sim
Sim
Tipos de Comportamento Behaviour
Genérico, temos de implementar os métodos action() e done()
OneShotBehaviour done() sempre retorna true
CyclicBehaviour done() sempre retorna false
WakerBehaviour Executa o comportamento apenas uma vez após um
determinado tempo TickerBehaviour
Excuta o comportamento em tempos fixos de intervalo
Exemplos
Comportamentos do agente comprador e do agente vendedor...
Comunicação A comunicação é feita de forma
assíncrona Cada agente tem sua lista de
mensagens Modelo FIPA-ACLACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("Peter", AID.ISLOCALNAME));msg.setLanguage("English");msg.setOntology("Weather-forecast-ontology");msg.setContent("Today it’s raining");
send(msg);
Comunicação
Métodos Importantes Agent.send()▪ Envia uma mensagem
Agent.receive()▪ Retira a primeira mensagem da lista de
mensagens do agente▪ Retorna null se não tiver mensagem na lista
Behaviour.block()▪ O active() só volta a ser executado quando
houver uma mensagem seja inseria da lista do agente
Exemplos
Trocando mensagens entre o agente comprador e o agente vendedor...
Serviço de Páginas Amarelas Permitem aos agentes publicarem quem
é responsável por prover determinados serviços
Um agente chamado Directory Facilitator guarda estes dados
Directory FacilitatorAgentA: ServiceX,
ServiceYAgentB: ServiceX,
ServiceZ
AgentC: ServiceY
Publicando Serviços
DFService.register() Publica um serviço
DFAgentDescription e ServiceDescription Descrevem o serviço
Exemplo...
Procurando por Serviços
DFService.search() Realiza a busca por serviços Recebe o agente e o serviço pelo qual
ele busca Importante:▪ O serviço pode não estar presente no
momento do search!!!▪ Devemos usar uma forma de sincronizar a
chamada ou usar o método searchUntil Exemplo...
Dúvidas, críticas, sugestões?
Para brincar um pouco
Fazer o Agente comprador ter uma lista de livros e comprar todos eles
Implementar um mecanismo de pesquisa no comprador Ou seja, ele vai para todos os agente
que vendem livros ele vai procurar perguntar pelo preço e no fim vai comprar do agente que vender mais barato
Para saber mais...
O site do JADE tem tudo que você precisa http://jade.tilab.com/ É necessário um cadastro para o
download do projeto Tutorial para iniciantes (base para
esta aula) http://jade.tilab.com/doc/JADEProgrammi
ng-Tutorial-for-beginners.pdf