Agentes de Software Introdução Projeto de Sistemas de Software Agenda • Introdução • O que são Agentes? • Agente versus Objeto • Sistemas Multiagentes • Exemplos de Aplicações • ES de Sistemas Multiagentes • Plataforma Jade © 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 © 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 © LES/PUC-Rio 4 O que são Agentes? • Agentes e o Ambiente Sensores Processamento autônomo Efetuadores © LES/PUC-Rio Ambiente Agente 5 Características de Agentes ES • Básicas – Autonomia • Capacidade de agir sem intervenção externa – Reatividade • Capacidade de perceber o ambiente e responder às mudanças que ocorrem nele – Pró-atividade • Atuam não somente em resposta ao ambiente – são orientados a objetivos – Interatividade • Se comunicam com outros agentes e com o ambiente – Adaptação • São capazes de modificar, em algum grau, o seu comportamento devido à mudanças do ambiente e de outros agentes © LES/PUC-Rio 6 Características de Agentes ES • Adicionais – Aprendizado • São capazes de modificar o seu comportamento baseados em sua experiência (não é necessariamente relacionado às mudanças no ambiente) – Racionalidade • São capazes de selecionar suas ações baseados em seus objetivos – Mobilidade • São capazes de se mover de um ambiente para outro © LES/PUC-Rio 7 Agente vs. Objeto • Similaridade – Entidades computacionais – Encapsulam estado – Realizam ações – Se comunicam via troca de mensagens © LES/PUC-Rio 8 Agente vs. Objeto • Diferenças – Autonomia • Objetos são passivos – Objetos são obedientes • Agentes: Go and No – Objetos não encapsulam ativação de comportamento – Um objeto provê mínimo suporte para estruturas coletivas (ex. hierarquia e relacionamentos) • Enquanto agentes dão suporte para estruturas coletivas: organizações © LES/PUC-Rio 9 Sistemas Multi-Agentes • Um agente, em geral, não é encontrado completamente sozinho em uma aplicação, mas formando conjunto com outros agentes. “Sistema Multi-Agente (MAS)” © LES/PUC-Rio 10 O que são Sistemas Multiagentes? • No ponto de vista de IA – Um sistema multiagentes é uma sociedade de agentes (agentes IA) individuais, que interagem por meio de troca de conhecimento e de negociação para alcançar um objetivo local ou global • No ponto de vista de ES – Um sistema multiagentes é um sistema de software composto por diversos locos de controle (agentes de software) encapsulados e independentes, que interagem no contexto específico de uma aplicação © LES/PUC-Rio 11 Engenharia de Software de Sistemas Multiagentes Introdução Evoluções na Engenharia de Software • A ES é uma disciplina que se preocupa com todos os aspectos do desenvolvimento de software • Engenharia de Software OO – Linguagens Orientadas a Objetos. – Novos métodos para design de sistemas. • Software está cada vez mais complexo: os sistemas de software deverão estar – Em todo o lugar – Sempre conectados (disponíveis) – Sempre ativos para executar requisições de usuários © LES/PUC-Rio 13 ES de Sistemas Multiagentes: Motivação • Sistemas Complexos © LES/PUC-Rio 14 Tendências • Sistemas distribuídos • Sistemas extensíveis • Crescimento da Internet • Utilização de ontologias – Web Semântica • Sistemas abertos © LES/PUC-Rio 15 Benefícios da abstração de Agentes • Entidade Pró-Ativa • Fraco acoplamento – Comunicação através de mensagens • Flexibilidade de customização – individual de agentes – protocolos de comunicação – algoritmos de aprendizado © LES/PUC-Rio 16 O paradigma de SMAs • Oferece: – Um modelo de decomposição – Uma abstração para o desenvolvimento de software baseado no domínio do problema – Um modelo para desenvolvimento de sistemas como uma composição de unidades organizacionais – Um modelo de descentralização para reduzir o acoplamento © LES/PUC-Rio 17 Uma pergunta… • Será que o paradigma e técnicas atuais de ES serão suficientes para atacar o problema da produção eficiente da próxima geração de sistemas de software? © LES/PUC-Rio 18 Evolução dos Paradigmas de ES Tempo • Linguagens Assembler • Abstração Funcional • Programação Estruturada • Orientação a Objetos • Componentes • ... • Agentes de Software © LES/PUC-Rio Abstrações determinadas pela arquitetura da máquina Abstrações determinadas pelo domínio do problema 19 O Estado da Arte • Engenharia de software para sistemas multiagentes está em estado inicial – Muitas propostas e pouco consenso • Desenvolvimento ad-hoc ou desenvolvimento proprietário • Falta de avaliação do impacto do uso do paradigma multiagente • Experimentação – Estudos de Caso • Necessidade de um desenvolvimento de uma ES para o paradigma © LES/PUC-Rio 20 Pesquisa até então... • Desenvolvimento de ES para sistemas multiagentes – Linguagens de modelagem – Metodologias de desenvolvimento – Arquiteturas de desenvolvimento – Padrões de projeto – Plataformas e Frameworks – Métodos formais – Melhores práticas – Processos de desenvolvimento • Necessário amadurecimento... © LES/PUC-Rio 21 Exemplos TAC (Trading Agent Competition) Classic © LES/PUC-Rio 23 Exemplo - Sistema de compra de produtos • Cenário 1: Cliente compra um produto – Cliente escolhe um produto e avisa ao vendedor que quer comprá-lo. – O vendedor pega o produto e efetua a venda. Ag ente Us u疵 i o Ag ente Vend ed or Ag ente Fonte d e Da d os 1: Confirma compra DVD LG 2: Informa a venda 3: Envia confirma 鈬o 4: Confirma a venda © LES/PUC-Rio 24 Exemplo - Sistema de compra de produtos • Cenário 2: – O funcionário responsável pelo histórico de vendas da loja, faz uma classificação dos clientes em três categorias: Ouro, prata e bronze. – O vendedor recebe esta classificação e envia ofertas para os clientes, baseado em alguma estratégia de venda. Us u疵 i o Ag ente Us u疵 i o Ag ente Ve nd ed or Ag ente Fonte d e Da d os 1: Informa a categoria dos clientes 2: Envia ofe rta bas ead o na es tra t馮ia 3: Avisa o u su疵io © LES/PUC-Rio 25 Diagrama de Classes Mei oDeC omunica ca o +adicionarMensagem(Mensagem:msg):void 1 0..* interface Mens a g e m Ag ente C ommun ica ca o +receberMensagem(msg:Mensagem):void +enviarMenssagem(msg:Mensagem):void conteudo:String destino:String tipo:String Ag enteUs ua rio Ag enteVend ed orAg enteFonteDeDa d os E ma il C el ula r 1 E s tra teg i a Vend a G ul os a S・quer lucra r <<Fa軋de>> Ba ncoDe Da d os C a ti v a nte P ond era d a Faz de tudo para ganhar o cliente © LES/PUC-Rio Cede se for um bom cliente 26 Exemplo: Sequência implementação Cenário 1 a g enteUs ua ri o AgenteUsuario mei oDeC omunica c a o MeioDeComunicacao a g enteVend ed AgenteVendedor Us ua rio 1: Comprar DVD 1.1: cria mens a g e mDeC omp ra Mensagem 1.2: setTipo("comprar"):void 1.3: setConteudo("produto=DVD"):void 1.4: setDestino("AgenteVendedor"):void 1.5: enviarMenssagem(mensagemDeCompra):void 1.5.1: adicionarMensagem(mensagemDeCompra):void 1.5.1.1: receberMensagem(mensagemDeCompra):void © LES/PUC-Rio 27 Exemplo 2: Agenda Virtual © LES/PUC-Rio 28 Agendamento de Compromissos 1/3 HS : Usuário : homeUsuario.jsp : cmdFormAgendamento : Servlet : UsuarioFachada exibirFormAgendamento( ) doGet( ) execute( ) listarContatos( ) listarCo exibirFo © LES/PUC-Rio 29 Agendamento de Compromissos 2/3 HS : Usuário : formAgendamento.jsp : Servlet : cmdAgendar : UsuarioFachada : AgenteUsuario solicitarAgendamento( ) doPost( ) [Env ia mensagem do tipo S_EVENTO para AgenteSecretaria] execute( ) agendar( ) enviarMsg( ) receb exibirFeedBa © LES/PUC-Rio 30 Agendamento de Compromissos 2.1/3 : AgenteUsuario : AgenteSecretaria : Usuario : Evento lerInbox( ) tratarMs g( ) [Se f or um grupo de contato, v erif icar para cada integrante do grupo] verificarConflitos ( ) verificarEventos( ) getData( ) [Se houv e conf lito, executar 3/3] [Se não houv e conf lito] [*para cada evento] adicionarEvento( ) adicionarEvento( ) © LES/PUC-Rio 31 Agendamento de Compromissos 3/3 : AgenteUsuario : AgenteSecretaria [Envia m ensagem do tipo S_NEGADA para AgenteUsuario] enviarMsg( ) receberMsg( ) lerInbox( ) [Se chegou mensagem nova] tratarMsg( ) © LES/PUC-Rio [Se mensagem do tipo S_NEGADA] 32 Exemplo de Código © LES/PUC-Rio 33 Exemplo 3: Agente reativos – Inteligência social emergente • Colônia de formigas procurando por comida • Cada formiga é um agente • Se comunicam através do ambiente • Toda vez que elas acham comida liberam um hormônio chamado feromônio no ambiente • As outras seguem o feromônio • E a sociedade converge para o local da comida • URL: http://website.lineone.net/~john.montgomery/demos/ants. html © LES/PUC-Rio 34 Outros Exemplos • Agentes para sistemas de métricas – Coleta, Avaliação, Apresentação para o Usuário • Agentes para gerência de ordens de serviço – Organização, Escalonamento e Negociação de ordens de serviço • Agentes para gerência de compromissos – Agendamento, Estratégia de Negociação, Lembretes • Agentes para gerenciamento de tráfego – Informação de melhores caminhos © LES/PUC-Rio 35 Pesquisa em andamento no LES • Arquiteturas, frameworks e ferramentas para regular SMA • Governança, normas e reputação • Diagnóstico e Recomendação de execuções • Dependability em Sistemas Multiagentes Abertos • Agentes inteligentes, ontologias, simulação e ambientes para SMA regulados por normas • Ubiqüidade e Context-aware • Sistemas Multiagentes para Medicina – Útero virtual – Células-tronco • Auto-adaptação e auto-organização • Leski http://wiki.les.inf.puc-rio.br/index.php/Sistemas_Multiagentes © LES/PUC-Rio 36 Jade Java Agent Development Framework http://jade.tilab.com/ Versão atual: 3.5 O que é Jade? • Jade é um middleware para o desenvolvimento de sistemas multi-agentes • 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 © LES/PUC-Rio 38 Contêiner e Plataforma • Contêiner – Instância de um ambiente Jade – É onde os agentes executam – Ao iniciar o Jade, um MainContainer é criado • Plataforma – Conjunto de contêineres ativos © LES/PUC-Rio 39 Contêineres e Plataformas © LES/PUC-Rio 40 A Plataforma • O Jade segue o modelo da FIPA (Foundation for Intelligent Physical Agents) © LES/PUC-Rio 41 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 © LES/PUC-Rio 42 A 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 © LES/PUC-Rio 43 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 comportamtentos • A classe Agent oferece um scheduler (não acessível ao programador) que gerencia automaticamente o agendamento dos comportamentos © LES/PUC-Rio 44 O Ciclo de Vida de um Agente © LES/PUC-Rio 45 Ciclo de Vida de um Agente • 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 © LES/PUC-Rio 46 Ciclo de Vida de um Agente • 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 © LES/PUC-Rio 47 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 © LES/PUC-Rio 48 Um Exemplo 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 © LES/PUC-Rio 49 Um Exemplo © LES/PUC-Rio 50 Destruindo um Agente Jade • Mesmo que não esteja fazendo coisa alguma, o agente continua executando • Para terminar um agente, deve-se executar o método doDelete() que chama o método takeDown() • Serve para remover todas as referências ao agente da plataforma © LES/PUC-Rio 51 Um Exemplo 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()); doDelete(); } protected void takeDown() { // Imprimindo uma mensagem de saida System.out.println("Agente " + getAID().getName() + " terminando."); } } © LES/PUC-Rio 52 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 © LES/PUC-Rio 53 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 © LES/PUC-Rio 54 O Esquema de um Comportamento public class UmComportamento extends Behaviour { public void action() { while (true) { // Código do Comportamento } } public boolean done() { return true; } } © LES/PUC-Rio 55 Detalhes sobre 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 © LES/PUC-Rio 56 A Execução de um Agente © LES/PUC-Rio 57 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 © LES/PUC-Rio 58 A Hierarquia de Comportamentos © LES/PUC-Rio 59 Esquemas de Comportamentos Simples // OneShotBehaviour public class MyOneShotBehaviour extends OneShotBehaviour { public void action() { // Executar a operação X } } // CyclicBehaviour public class MyCyclicBehaviour extends CyclicBehaviour { public void action() { // Executar a operação Y } } © LES/PUC-Rio 62 Esquema Genérico de Comportamento 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; } } © LES/PUC-Rio 63 Comportamentos Especiais • WakerBehaviour – Comportamento que espera um determinado período de tempo (em ms) para efetivamente executar a tarefa • TickerBehaviour – Comportamento que executa uma tarefa periodicamente em intervalos de tempo constantes (em ms). Este comportamento nunca acaba © LES/PUC-Rio 64 WakerBehaviour public class MyAgent extends Agent { protected void setup() { System.out.println("Adicionando waker behaviour"); addBehaviour(new WakerBehaviour(this, 10000) { protected void handleElapsedTimeout() { // Executa a operação X } } ); } } A operação X é executada 10 segundo depois de imprimir "Adicionando waker behaviour" © LES/PUC-Rio 65 TickerBehaviour public class MyAgent extends Agent { protected void setup() { addBehaviour(new TickerBehaviour(this, 10000) { protected void onTick() { // Executar a operação Y } } ); } } A operação Y é executada periodicamente a cada 10 segundos © LES/PUC-Rio 66 A Comunicação entre Agentes • A troca de mensagens é assíncrona e usa a FIPA ACL (Agent Communication Language) © LES/PUC-Rio 67 A Linguagem ACL • Campos principais – Sender: o agente que envia a mensagem – Receivers: lista de agentes destino da mensagem – Performative: ato de fala que indica o que o agente que envia a mensagem espera com ela – Content: o real conteúdo da mensagem – Language: sintaxe usada para expressar o conteúdo – Ontology: denota a semântica dos itens do conteúdo – Outros campos de controle de convesação como: conversation-id, reply-with, in-reply-to, reply-by © LES/PUC-Rio 68 A Linguagem ACL - Exemplo Mensagem ACL 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 ) © LES/PUC-Rio Conteúdo da mensagem 69 A Linguagem ACL – Performativas • INFORM “A porta está aberta” • QUERY “A porta está aberta?” • CFP “Alguém quer abrir a porta?” • 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” © LES/PUC-Rio 70 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?” © LES/PUC-Rio 71 Enviando Mensagens • Deve-se criar e montar um objeto ACLMessage e chamar o método send() do agente 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); © LES/PUC-Rio 72 Recebendo Mensagens • Para se 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 ACLMessage msg = receive(); if (msg != null) { // Processar a mensagem } © LES/PUC-Rio 73 Bloqueando um Agente à espera de uma Mensagem • O scheduler de ações do Jade não pára a execução de uma ação caso não haja mensagens para um agente • Para parar a execução de uma ação à espera de uma mensagem, deve-se usar o método block() public void action() { ACLMessage msg = myAgent.receive(); if (msg != null) { // Mensagem recebida - processá-la ... } else block(); } © LES/PUC-Rio 74 Selecionando um Tipo de Mensagem da Fila • Pode-se selecionar um tipo de mensagem da fila usando um MessageTemplate public void action() { MessageTemplate mt; mt = MessageTemplate.MatchPerformative(ACLMessage.CFP); ACLMessage msg = myAgent.receive(mt); if (msg != null) { // Mensagem do tipo CFP recebida - processá-la ... } else block(); } © LES/PUC-Rio 75 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 © LES/PUC-Rio 76 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) 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(); } ... } © LES/PUC-Rio 77 Removendo um Serviço do DF • Chamar o método deregister() do DF (usualmente no método takeDown() do agente) 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"); } © LES/PUC-Rio 78 Procurando por Serviços no DF • Criar um objeto DFAgentDescription e chamar o método search() do DF 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.getName(); } catch (FIPAException fe) { fe.printStackTrace(); } ... } ); ... } © LES/PUC-Rio 79 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 © LES/PUC-Rio 80 FIM Perguntas?