250 likes | 473 Views
Allan Lima adsl@cin.ufpe.br. Desenvolvendo Sistemas Multiagentes com JADE. 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.
E N D
Allan Lima adsl@cin.ufpe.br Desenvolvendo Sistemas Multiagentes com JADE
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 frameworksmultiagentes
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 • CriadopelaTeltecom 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 • RuntimeEvironment • Infra-estrutura para dar “vida” aos agentes • Library • Classes para auxiliar na implementação da simulação • GraphicalTools • Permitem a administração e o monitoramento da simulação
Visão Geral do JADE • Utilitários de desenvolvimento • RemoteMonitoringAgent • DummyAgent • SnifferAgent • DirectoryFacilitator GUI
Visão Geral do JADE • Library AgentPlatfrom Agent Agent Management System DirectoryFacilitator MessageTransportSystem
Criando Agentes • Todos os agentes devem herdar da classe jade.core.Agent publicclassBookBuyerAgentextendsAgent { ... }
Criando Agentes • setup() e takeDown() e getAID() publicclassBookBuyerAgentextendsAgent { protectedvoidsetup() { System.out.println(getAID().getName() + " is ready"); } protectedvoidtakeDown() { 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 osparâ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: • voidaction() • booleandone()
Ciclo de Vida de um Agente takeDown() Sim O agente foi morto? Não Pegue o próximo comportamento Setup() c.action() c.done()? Não Sim Sim Remova c do pool de comportamentos
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-ACL ACLMessagemsg = newACLMessage(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 DirectoryFacilitator guarda estes dados DirectoryFacilitator AgentA: ServiceX, ServiceY AgentB: 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...
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/JADEProgramming-Tutorial-for-beginners.pdf