Paper 3 - (LES) da PUC-Rio
Transcrição
Paper 3 - (LES) da PUC-Rio
José Alberto Rodrigues Pereira Sardinha PUC-Rio - Certificação Digital Nº 0115614/CA MAS-School e ASYNC: Um Método e um Framework para Construção de Agentes Inteligentes Tese de Doutorado Tese apresentada como requisito parcial para obtenção do título de Doutor pelo Programa de PósGraduação em Informática da PUC-Rio. Orientadores: Ruy Luiz Milidiú Carlos José Pereira de Lucena Rio de Janeiro, 18 de março de 2005 2 José Alberto Rodrigues Pereira Sardinha MAS-School e ASYNC: Um Método e um Framework para Construção de Agentes Inteligentes PUC-Rio - Certificação Digital Nº 0115614/CA Tese apresentada como requisito parcial para obtenção do título de Doutor pelo Programa de Pós-Graduação em Informática da PUC-Rio. Aprovada pela Comissão Examinadora abaixo assinada. Prof. Ruy Luiz Milidiú Orientador Departamento de Informática - PUC-Rio Prof. Carlos José Pereira de Lucena Co-Orientador Departamento de Informática - PUC-Rio Prof. Jaime Simão Sichman Depto. Eng. Computação e Sistemas Digitais, Escola Politécnica - USP Prof. Ricardo Choren Noya Depto. Engenharia de Computação - IME Prof. Bruno Feijó Departamento de Informática - PUC-Rio Prof. Hugo Fuks Departamento de Informática - PUC-Rio Prof. José Eugenio Leal Coordenador(a) Setorial do Centro Técnico Científico - PUC-Rio Rio de Janeiro, 18 de março de 2005 3 Todos os direitos reservados. É proibida a reprodução total ou parcial do trabalho sem autorização da universidade, do autor e do orientador. José Alberto Rodrigues Pereira Sardinha PUC-Rio - Certificação Digital Nº 0115614/CA Ficha Catalográfica Sardinha, José Alberto Rodrigues Pereira MAS-School e ASYNC: um método e um framework para construção de agentes inteligentes / José Alberto Rodrigues Pereira Sardinha; orientadores: Ruy Luiz Milidiú, Carlos José Pereira de Lucena. – Rio de Janeiro : PUCRio, Departamento de Informática, 2005. 152 f. ; 30 cm Tese (doutorado) – Pontifícia Universidade Católica do Rio de Janeiro, Departamento de Informática. Inclui referências bibliográficas 1. Informática – Teses. 2. Sistemas multi-agente. 3. Inteligência artificial. 4. Machine learning. 5. Engenharia de software. I. Milidiú, Ruy Luiz. II. Lucena, Carlos José Pereira de. III. Pontifícia Universidade Católica do Rio de Janeiro. Departamento de Informática. IV. Título. CDD: 004 PUC-Rio - Certificação Digital Nº 0115614/CA 4 À Luciana e ao meu Pai 5 Agradecimentos Ao amigo e professor Ruy Milidiú, por toda a confiança, por todo o apoio, por todas as oportunidades, e pelos ensinamentos. Ao amigo e professor Carlos Lucena, por toda a confiança, por todo o apoio e pela oportunidade de me incluir em um grupo de pesquisa tão extraordinário. Aos alunos Patrick Paranhos e Pedro Cunha, futuros engenheiros e grandes pesquisadores. Essa tese tem muitas contribuições de vocês. Agradeço a vocês PUC-Rio - Certificação Digital Nº 0115614/CA pelo empenho, dedicação, e trabalho. Ao aluno Marco Molinaro, recém chegado ao nosso grupo de pesquisa, mas que já se mostra também um grande pesquisador. Obrigado pelas contribuições. Aos meus grandes amigos do LES e LEARN: Alessandro, Viviane Silva, Choren, Guga, Daflon, Matheus, Fred Liporace, Fred, Laber, Arthur, Raul, Viviane Braconi, Lorenza, Taciana, Luiz Fernando, Patrick, Pedro, Marco, Helena, João, Chicão, Otávio, Daniel, e todos os outros que porventura eu esteja esquecendo. Obrigado pelas contribuições e apoio. À Vera Menezes e Lena Ururahy, pelo apoio e carinho. À minha família e principalmente ao meu pai, professor José Carlos Sardinha, e à sua mulher, professora Regina Lucia Sardinha, por estarem sempre ao meu lado nos momentos mais difíceis, sempre me incentivando. À Luciana Salles, minha esposa, por todo amor, carinho, apoio e presença durante esses anos. Você esteve sempre do meu lado me incentivando. Ao CNPq, pelo apoio financeiro. 6 Resumo Sardinha, José Alberto Rodrigues Pereira. MAS-School e ASYNC: Um Método e um Framework para Construção de Agentes Inteligentes. Rio de Janeiro, 2005. 152p. Tese de Doutorado - Departamento de Informática, Pontifícia Universidade Católica do Rio de Janeiro. Agentes de Software é uma tecnologia que permite criar simuladores e sistemas inteligentes que tomam decisões automaticamente. A primeira contribuição dessa tese é o MAS-School, um método para modelar e implementar agentes de software inteligentes desde as primeiras fases de desenvolvimento. Esse método também apresenta várias orientações de como incluir aprendizado na fase de design e implementação. O método apresenta no final uma estratégia PUC-Rio - Certificação Digital Nº 0115614/CA incremental de desenvolvimento para permitir a avaliação do desempenho das técnicas de machine learning. A segunda contribuição dessa tese é o framework ASYNC. O ASYNC é composto por um conjunto de ferramentas de engenharia de software para auxiliar a construção de sistemas baseados em agentes assíncronos, cooperativos e inteligentes. Esta tese apresenta quatro estudos de casos complexos desenvolvidos com agentes inteligentes para exemplificar o uso do método e framework. A primeira aplicação apresenta um sistema baseado em agentes para criar promoções em um mercado varejista utilizando o conceito de agregação de produtos. A segunda aplicação apresenta um mercado virtual para compra e venda de bens. A terceira aplicação é um sistema multi-agente distribuído para um complexo cenário de procurement em leilões simultâneos e interdependentes. Essa aplicação participou do Trading Agent Competition em 2004 e obteve a terceira colocação. A quarta aplicação é um sistema multi-agente para um Supply Chain Management. Palavras-chave Sistemas Multi-Agente, Engenharia de Software. Inteligência Artificial, Machine Learning, 7 Abstract Sardinha, José Alberto Rodrigues Pereira. MAS-School e ASYNC: A Method and a Framework for Building Intelligent Agents. Rio de Janeiro, 2005. 152p. Doctoral Thesis - Departamento de Informática, Pontifícia Universidade Católica do Rio de Janeiro. The agent technology is used to develop systems that perform several complex tasks. This thesis presents the MAS-School method for modeling and implementing intelligent agent-based systems. The method presents a systematic approach to support a disciplined introduction of machine learning techniques in multi-agent systems from an early stage of design. The proposed approach PUC-Rio - Certificação Digital Nº 0115614/CA encompasses guidelines to both the design and implementation phases of an agent-based system. It is based on an incremental development strategy that largely relies on simulation and testing techniques. This thesis also presents the ASYNC framework that is composed of software engineering tools for building agent based system for asynchronous, cooperative and intelligent agents. This thesis presents four complex applications that used the proposed method and framework in the design and implementation phase. The first case study presents an application that discovers the most appealing offerings for consumers in a retail market. The second case study presents a virtual marketplace for buying and selling goods with automatic negotiation. The third case study is a multi-agent system for a complex procurement scenario with interdependent and simultaneous auctions. This system achieved the third place in the 2004 TAC Classic competition. The fourth case study is a multi-agent system for a PC manufacturer scenario based on sourcing of components, manufacturing of PC's and sales to customers. Keywords Multi-Agent Systems, Artificial Intelligence, Machine Learning, Software Engineering. 8 PUC-Rio - Certificação Digital Nº 0115614/CA Sumário 1 Introdução 15 1.1. Sistemas Multi-Agente 16 1.2. A Engenharia de Software para Agentes Inteligentes 17 1.3. Aprendizado para Agentes Inteligentes 18 1.4. A Solução Proposta 20 1.5. Avaliação Empírica 25 1.6. Organização da Tese 26 2 A Construção de Sistemas com Agentes Inteligentes 28 2.1. ANote – Uma linguagem de Modelagem Simples e Poderosa 28 2.2. Frameworks Orientados a Objetos 32 2.3. Padrões de Projeto (Design Patterns) 33 2.4. Algoritmos para Agentes Inteligentes 35 2.4.1. Inteligência Artificial 35 2.4.2. Machine Learning 36 2.4.3. Predição em Séries Temporais 40 2.4.4. Otimização Combinatória 41 2.4.5. Análise de Agrupamento 42 3 ASYNC – Um Framework para Construção de Agentes Inteligentes 45 3.1. Estudo de Caso - A Aplicação Bundles.com 45 3.1.1. Simulação e Monitoramento 51 3.1.2. Resultados da Evolução do Sistema 52 3.2. ASYNC – Um Framework Orientado a Objetos para Construção de Agentes Distribuídos e Assíncronos 53 3.2.1. Como Instanciar uma Aplicação Baseada em Agentes com o Framework Orientado a Objetos do ASYNC 56 3.3. Instanciando o ASYNC para a Aplicação Bundles.com 58 3.4. ASYNC-D – A Ferramenta de Distribuição dos Agentes em CPUs 9 Distintas de um Rede 60 3.5. Aplicação Babilônia 62 4 MAS-School - Um Método para Incluir Aprendizado em Sistemas MultiAgente 64 4.1. Incluindo Aprendizado em Sistemas Multi-Agente 65 4.1.1. Objetivo Sistêmico & Seleção da Medida de Performance 66 4.1.2. Seleção do Agente & Definição do Objetivo do Aprendizado no Agente 68 4.1.3. Design do Aprendizado no Agente 68 4.1.4. Implementação Incremental & Avaliação de Performance 70 PUC-Rio - Certificação Digital Nº 0115614/CA 4.2. Agent Learning Pattern – Um Design para Incluir Aprendizado em Agentes 73 4.2.1. Intenção 73 4.2.2. Contexto 73 4.2.3. Problema 74 4.2.4. Forças 74 4.2.5. Solução 74 4.2.6. Estrutura 76 4.2.7. Exemplo 77 4.2.8. Dinâmica 77 4.2.9. Implementação 78 4.2.10. Conseqüências 81 4.2.11. Usos Conhecidos 81 4.2.12. Padrões Relacionados 82 5 A Aplicação LearnAgents 84 5.1. O TAC Classic 85 5.2. Edições Anteriores do TAC 85 5.3. A arquitetura do LearnAgents 88 5.4. O TAC Classic 2004 e Resultados 96 5.5. Os Algoritmos utilizados nos Agentes do LearnAgents 98 5.5.1. Preditor 98 5.5.2. Alocador 99 10 5.5.3. Ordenador 102 5.5.4. Negociador de Hotel 103 PUC-Rio - Certificação Digital Nº 0115614/CA 5.6. Utilizando o MAS-School no Processo de Desenvolvimento do LearnAgents 108 5.7. Utilizando o ASYNC na Implementação do LearnAgents 114 6 A Aplicação LearnAgentsSCM 118 6.1. O TAC Supply Chain Management 119 6.2. Evolução do TAC SCM 120 6.3. Arquitetura LearnAgentsSCM 122 6.4. A Engenharia de Algoritmos dos Agentes do LearnAgentsSCM 132 6.4.1. Gerente de Compras 132 6.4.2. Programador da Produção e Programador da Entrega 133 6.4.3. Gerente de Marketing 135 6.5. Utilizando o MAS-School no Processo de Desenvolvimento do LearnAgentsSCM 136 7 Conclusões 140 8 Referências 146 11 Lista de figuras Figura 1: A decomposição dos objetivos relacionados com o objetivo do Problema PUC-Rio - Certificação Digital Nº 0115614/CA Principal. 20 Figura 2: A arquitetura do Sistema Baseado em Agentes. 21 Figura 3: Cenário do Agente I. 22 Figura 4: Diagrama de Interação do Agente I e Agente II. 22 Figura 5: O diagrama de classes do Agente I. 23 Figura 6: A arquitetura de implementação do Sistema Multi-Agente. 24 Figura 7: A visão de objetivo do ANote. 29 Figura 8: A visão do agente do ANote. 29 Figura 9: A visão do cenário do ANote. 30 Figura 10: A visão de planejamento do ANote. 30 Figura 11: A visão de interação do ANote. 31 Figura 12: A visão de organização do ANote. 32 Figura 13: A árvore Minimax. 36 Figura 14: O Neurônio Artificial. 38 Figura 15: A decomposição dos objetivos. 46 Figura 16: apresenta a arquitetura do Bundles.com. 47 Figura 17: Diagrama de Cenários do Analista de Mercado. 47 Figura 18: Diagrama de Cenários do Comprador. 49 Figura 19: Os máximos locais e globais da função de fitness. 50 Figura 20: Diagrama de Cenários do Comprador. 50 Figura 21: Interface da Monitoração On-line. 52 Figura 22: Energia obtida pelos Agentes por instante de tempo. 53 Figura 23: O diagrama de Classes do Framework Orientado a Objetos ASYNC. 54 Figura 24: A instanciação do Agente Vendedor na aplicação Bundles.com. 58 Figura 25: Diagrama de cenário do Vendedor. 59 Figura 26: Os agentes do ASYNC-D. 61 Figura 27: A Console de Configuração do ASYNC-D. 62 Figura 28: As classes do Agente Comprador. 63 Figura 29: O método para incluir Aprendizado em um Sistema Multi-Agente. 66 12 Figura 30: A decomposição dos objetivos relacionados com o comércio de bens. 67 Figura 31: O diagrama de Classes (UML) do Preditor de Preços. 69 Figura 32: O processo incremental de desenvolvimento. 72 Figura 33: Um diagrama de Classes de um típico Agente. 75 Figura 34: O diagrama de Classes do Agent Learning Pattern. 76 Figura 35: O diagrama de Seqüência do Agent Learning Pattern. 78 Figura 36: O diagrama de Classes do agente Preditor. 78 Figura 37: Ilustração do TAC Classic. 85 Figura 38: A arquitetura do LearnAgents. 89 Figura 39: A decomposição dos objetivos relacionados com o comércio de bens. PUC-Rio - Certificação Digital Nº 0115614/CA 90 Figura 40: Arquitetura do LearnAgents. 91 Figura 41: Diagrama de cenário dos Sensores. 92 Figura 42: Diagrama de cenário dos Preditores. 92 Figura 43: Diagrama de cenário dos Alocadores. 93 Figura 44: Diagrama de cenário do Ordenador. 94 Figura 45: Diagrama de cenário dos Negociadores. 94 Figura 46: Interface do Monitor. 95 Figura 47: Diagrama do Interação do LearnAgents. 95 Figura 48: Resultado do TAC de 2004. 97 Figura 49: Resultado do TAC de 2004. 99 Figura 50: A árvore Minimax. 104 Figura 51: A árvore Minimax (nível Maximizar) no Negociador de Hotel. 105 Figura 52: A árvore Minimax (nível Minimizar). 105 Figura 53: Gráfico dos lances enviados para leilão pelo Negociador de Hotel. 108 Figura 54: O diagrama de Classes (UML) do Preditor de Preços. 109 Figura 55: O Gráfico da Evolução do Benchmark do LearnAgents. 113 Figura 56: A instanciação do Agente Ordenador e Formato da Mensagem na aplicação. LearnAgents. 114 Figura 57: Diagrama de cenário do Ordenador. 115 Figura 58: O Jogo TAC SCM. 119 Figura 59: A Arquitetura do LearnAgentsSCM. 123 13 Figura 60: A decomposição dos objetivos relacionados com a produção, compra de matéria prima, e comercialização de bens. 124 Figura 61: O Diagrama de Agentes do LearnAgentsSCM. 125 Figura 62: Interface do Monitor. 126 Figura 63: Cenário da Seleção dos Pedidos por Cotações. 127 Figura 64: Cenário da Decisão dos Lances. 127 Figura 65: Cenário da Programação da Produção. 128 Figura 66: Cenário da Programação da Entrega e Ordens a Cancelar. 128 Figura 67: Cenário da Decisão de Compra dos Componentes. 129 Figura 68: Cenário da Negociação dos Componentes com os Fornecedores. 129 Figura 69: Diagrama de Interação do processo de vendas. 130 PUC-Rio - Certificação Digital Nº 0115614/CA Figura 70: Diagrama de Interação do Processo de Compra de Matéria Prima. 130 Figura 71: Diagrama de Interação do Processo de Produção. 131 Figura 72: Diagrama de Interação do Processo de Entrega. 131 Figura 73: Nível de Estoque por tempo. 132 Figura 74: Decisão de Compra dos Componentes. 132 Figura 75: Gráfico da Evolução do Benchmark. 139 14 Lista de tabelas Tabela 1: A mapeamento entre subproblemas e tipos de agentes. 21 Tabela 2: Mapeamento dos Conceitos de Agentes para as Classes OO. 22 Tabela 3: A mapeamento entre subproblemas e tipos de agentes. 46 Tabela 4: Exemplos de centróides encontrados com o algoritmo Isodata. 48 Tabela 5: Tabela com os padrões de consumo dos nove centróides. 48 Tabela 6: Mapeamento dos Conceitos de Agentes para as Classes da Aplicação PUC-Rio - Certificação Digital Nº 0115614/CA instanciada. 57 Tabela 7: A mapeamento entre subproblemas e tipos de agentes. 68 Tabela 8: Resultado do TAC de 2000. 86 Tabela 9: Resultado do TAC de 2001. 87 Tabela 10: Resultado do TAC de 2002. 88 Tabela 11: Resultado do TAC de 2003. 88 Tabela 12: A mapeamento entre subproblemas e tipos de agentes. 91 Tabela 13: Resultado do TAC de 2004. 97 Tabela 14: Performance do Negociador de Hotel nas finais do TAC Classic de 2004. 107 Tabela 15: Benchmark das Versões do LearnAgents. 111 Tabela 16: Resultado do TAC de 2004. 113 Tabela 17: Resultado da Final do TAC SCM de 2003. 120 Tabela 18: Resultado da Final do TAC SCM de 2004. 121 Tabela 19: A mapeamento entre subproblemas e tipos de agentes. 125 Tabela 20: Resultados da Evolução do Benchmark. 138 15 1 Introdução “Intelligent Agents and Artificial Intelligence: Well, it has to do with smart programs, so let’s get on and write some.” Stuart Russell and Peter Norvig PUC-Rio - Certificação Digital Nº 0115614/CA "Em cinco anos, todas as empresas serão empresas da Internet ou simplesmente não serão empresas", presidente do conselho de administração da Intel Andy Grove (Revista Exame, n.16, 11/08/99, p 126). A revolução digital mudou complemente a gestão dos negócios, que no passado se baseava primordialmente em aquisição de bens físicos e átomos, e agora está se baseando em bits e idéias. As palavras chaves desta nova administração são informação, conhecimento e inteligência ao invés de prédios, fábricas, ou bens materiais. Surgem a partir dessa revolução inúmeras oportunidades na área da tecnologia da informação. O comércio eletrônico é um exemplo de tema muito importante no mundo dos negócios relacionados com a Internet. De acordo com Peter Drucker (Drucker, 2000), o comércio eletrônico é para a Revolução da Informação o que a ferrovia foi para a Revolução Industrial. As comunidades de Inteligência Artificial, Business Intelligence, Comércio Eletrônico, e Sistemas Multi-Agente estão contribuindo com o desenvolvimento desta área, e boa parte das tecnologias oferecidas já está sendo usada pelo mundo corporativo (IBM Business Intelligence, 2005; Computer Associates CleverPath, 2005; Dash Optimization, 2005; Living Systems & Whitestein Technologies, 2005). O objetivo principal destas contribuições é automatizar processos e maximizar a lucratividade das transações em meios eletrônicos. 16 1.1. Sistemas Multi-Agente A tecnologia de agentes (Ferber, 1999; Wooldridge, 2000) permite criar simuladores e sistemas inteligentes que tomam decisões automaticamente. Muitos acreditam que a principal proposta desta tecnologia é bem semelhante a da inteligência artificial: programas capazes de substituir o ser humano em tarefas que exigem conhecimento, experiência e racionalidade. Esses programas podem ser utilizados para simulações ou em situações reais. A base deste enfoque está em considerar os agentes como entidades inteligentes e isoladas. Porém, uma nova teoria que utiliza os agentes de software acredita que a inteligência não pode ser separada do contexto social (Ferber, 1999). Desta forma, começa a surgir um novo campo de interesse que estuda PUC-Rio - Certificação Digital Nº 0115614/CA programas construídos com vários agentes – os Sistemas Multi-Agente. Esses agentes dotados de autonomia podem executar tarefas simples ou complexas, só que agora inseridos dentro de uma organização e um meio ambiente. O importante nessa análise não é observar os objetivos de cada agente, e sim o objetivo global da sociedade formada. O agente utiliza algumas características encontradas nas sociedades para alcançar esse objetivo. A primeira delas é Interação (Ferber, 1999). A interação ocorre quando dois ou mais agentes são submetidos a um relacionamento dinâmico através de um conjunto de ações recíprocas. A segunda é a Cooperação (Ferber, 1999), que é vista dentro de um sistema multi-agente como um método para atingir o objetivo global. Além disso, temos também as Organizações (Ferber, 1999), que são criadas para estruturar a cooperação e interação entre os agentes. Uma organização pode ser vista como um conjunto de relações entre agentes que produz uma unidade, com qualidades não encontradas nos agentes individualmente. O desenvolvimento de um sistema multi-agente de larga escala (Lucena et al., 2003; Garcia et al., 2003) não é uma tarefa simples. Sistemas com muitos agentes em ambientes heterogêneos necessitam de soluções de engenharia de software para permitir reuso e um desenvolvimento eficiente. Uma técnica interessante para modelar um problema computacionalmente difícil com o paradigma de agentes é dividir esse mesmo problema em subproblemas mais simples (Sardinha et al., 2004a). Assim, cada agente se torna 17 responsável por um ou mais desses subproblemas. Esses agentes ainda podem resolver esses subproblemas de forma assíncrona e em diferentes CPUs. Conseqüentemente, podemos listar algumas vantagens que surgem a partir dessa técnica de modelagem: Escalabilidade – Problemas complexos são resolvidos de forma mais simples, e não há limite para o número de agentes no sistema; Versatilidade – Como cada agente ataca um subproblema, podemos desenvolver agentes com técnicas diferentes de inteligência e combinar as soluções com simplicidade; Flexibilidade – É simples evoluir o sistema para incluir novos agentes, e PUC-Rio - Certificação Digital Nº 0115614/CA assim, incluir novas técnicas de inteligência. 1.2. A Engenharia de Software para Agentes Inteligentes Muitas metodologias e linguagens de modelagem para agentes já foram propostas para construir sistemas multi-agente. Existem também muitas plataformas e frameworks de desenvolvimento para implementar os sistemas baseados em agentes. Porém, pouquíssimos trabalhos propõem um mapeamento entre modelos de design baseado em agentes e código. Esta tese propõe um mapeamento claro entre conceitos de agentes e código, e ainda apresenta várias aplicações complexas para demonstrar a robustez do método. Metodologias como Gaia (Wooldridge et al., 2000; Zambonelli et al., 2003) e MaSE (Deloach, 1999), não fornecem um guia de como implementar os modelos propostos. Conseqüentemente, a geração de código não é um processo trivial. Gaia é uma metodologia orientada a agentes para as fases de análise e design. Os autores de Gaia afirmam que a metodologia não trata diretamente dos detalhes de implementação. Em MaSE, os autores afirmam que o foco principal da metodologia é auxiliar as fases de requisitos, análise, design, e implementação. Porém, a metodologia não descreve como os modelos devem ser implementados em qualquer plataforma. Em (Do et al., 2003; Castro et al, 2001), os autores propõem um mapeamento de conceitos i*, usados na metodologia Tropos (Giunchiglia et al., 2002; Bresciani et al., 2004) para modelar um agente BDI (Beliefs, Desires, and Intentions), para um ambiente de desenvolvimento chamado Jack (Howden et al., 18 2001). Cada conceito i* é mapeado para um BDI, e consecutivamente para uma abstração Jack. Apesar dos autores fornecerem um mapeamento, nenhum exemplo de aplicação é apresentado. Conseqüentemente, o mapeamento de conceitos i* para abstrações Jack não possui qualquer prova concreta. Os detalhes de como implementar os planos não é claro, o que evidencia uma pesquisa ainda em uma fase inicial. A metodologia Prometheus (Padgham et al., 2002a) também propõe um suporte do “inicio-ao-fim” entre especificação e implementação. Os autores propõem o uso do ambiente Jack para implementar os modelos de Prometheus. Em (Padgham et al., 2002b), o Jack Development Environment (JDE) é apresentado como uma ferramenta para modelar detalhes de implementação dos PUC-Rio - Certificação Digital Nº 0115614/CA modelos Prometheus e implementar sistemas baseados em agentes usando Jack. Porém, o mapeamento entre os artefatos detalhados de design e abstrações de implementação não é apresentado. Além disso, um exemplo não é apresentado no ambiente Jack. Em (Huget, 2002), os autores demonstram a geração de código a partir de diagramas de seqüência AUML. O foco dos autores é exemplificar o mapeamento de interações de agentes para código Java. Entretanto, esse mapeamento não é baseado em nenhuma arquitetura ou framework de agentes. Essas tecnologias fornecem abstrações reutilizáveis para programadores implementarem sistemas baseados em agentes. Ao fazer uma extensão ou customização a esses frameworks, o processo de implementação se torna mais simples e mais rápido. Nos frameworks de implementação há muito código já escrito e compilado, e o reuso é grande. 1.3.Aprendizado para Agentes Inteligentes O processo de modelagem de um sistema multi-agente inteligente de larga escala não é uma tarefa simples. Principalmente quando o sistema deve atuar em ambientes onde há mudanças constantes nos cenários externos. Neste caso, o sistema deve possuir agentes dotados de aprendizado e inteligência. Os conceitos de aprendizado devem ser modelados já nas primeiras fases de desenvolvimento. Em sistemas complexos e abertos, agentes precisam de aprendizado para tomar 19 decisões e se adaptar a mudanças para poder atingir os seus objetivos e o objetivo global do sistema. A modelagem de sistemas baseada em agentes inteligentes com aprendizado sempre apresenta questões semelhantes, dentre as quais destacamos: (i) Como avaliar o objetivo do sistema como um todo? (ii) Como definir e avaliar o objetivo individual de cada agente? (iii) Como modelar o conhecimento de cada agente? (iv) Como projetar o mecanismo de aquisição de conhecimento para cada agente? (v) Como combinar múltiplas técnicas de aprendizado e distribuir essas técnicas para cada agente no sistema? PUC-Rio - Certificação Digital Nº 0115614/CA (vi) Como associar abstrações de agentes com abstrações de machine learning? (vii) Como especificar abstrações de machine learning nas primeiras fases de design e permitir uma transição para a fase de implementação? Infelizmente, os engenheiros de software ainda utilizam a sua experiência e intuição para resolver as questões acima. Muita pesquisa tem sido feita para criar metodologias e frameworks de implementação para sistemas multi-agente. Porém, nenhum desses trabalhos apresenta um guia para incluir técnicas de aprendizado já nas fases iniciais do desenvolvimento. Os frameworks (Howden et al., 2001; Telecom Itália-Jade, 2003) de implementação disponibilizam muitas APIs para desenvolver sistemas multiagente, mas não orientam a estruturação do design do aprendizado de uma maneira sistemática. Além disso, as várias metodologias orientadas a agentes (Zambonelli et al., 2003; Deloach, 1999; Bresciani et al., 2004; Padgham et al., 2002) são focadas em um nível muito alto de abstração, e não indicam como tratar aprendizado desde a fase de design até a implementação. Um tema de pesquisa importante na área de aprendizado em sistemas multiagente é denominado MAS Learning (Sem et al., 2000; Kudenko, 2003). O foco principal dos trabalhos é desenvolver algoritmos de machine learning distribuídos utilizando técnicas como Reinforcement Learning (Mitchell, 1997). Porém, os trabalhos desta área não apresentam um design ou metodologia, geral o suficiente 20 para qualquer algoritmo ou domínio, que permite incluir essas técnicas de machine learning em sistemas baseados em agentes. 1.4. A Solução Proposta Esta tese apresenta o método MAS-School (Sardinha et al., 2004b; Sardinha et al., 2005b) para modelar e implementar agentes de software inteligentes desde as primeiras fases de desenvolvimento. Esse método também apresenta várias orientações de como incluir aprendizado na fase de design e implementação. O método apresenta no final uma estratégia incremental e iterativa de desenvolvimento para permitir a avaliação das técnicas de machine learning. A linguagem de modelagem ANote (Choren, 2002; Choren et al., 2004a; PUC-Rio - Certificação Digital Nº 0115614/CA Choren et al., 2004b) é utilizada para modelar os sistemas multi-agente desta tese, pois fornece todos os diagramas necessários para as várias fases de modelagem. Todos os nossos projetos de software utilizam a técnica orientada a objetivos para a fase de requisitos. Esta fase utiliza o processo recursivo de decomposição de um objetivo do problema principal em vários objetivos de subproblemas. Essa técnica é interessante, pois permite dividir um problema computacionalmente difícil em subproblemas mais simples. O diagrama 1 exemplifica a decomposição. Figura 1: A decomposição dos objetivos relacionados com o objetivo do Problema Principal. A abstração de objetivos é central neste método. Em uma segunda etapa, esse objetivo permite a definição de uma medida de performance para os agentes que necessitam de aprendizado. Conseqüentemente, o processo de decomposição dos objetivos em sub-objetivos é fundamental para o método proposto. É importante frisar que essa modelagem de hierarquia de objetivos é uma atividade comum nas metodologias orientada a agentes. Para esse método, os objetivos 21 funcionam como uma abstração para unificar conceitos de machine learning com conceitos básicos de sistemas multi-agente. A segunda fase do processo de modelagem é criar os tipos de agentes que sejam capazes de conduzir os objetivos desses subproblemas encontrados na fase de requisitos. Essa criação de tipos de agentes começa com um processo de relacionamento de todos os objetivos de nível mais baixo com os tipos de agentes criados. A tabela 1 exemplifica um mapeamento entre esses objetivos e tipos de agentes. A figura 2 apresenta os vários tipos de agentes e seus relacionamentos. PUC-Rio - Certificação Digital Nº 0115614/CA Esta figura permite uma visão estática do projeto do nosso sistema multi-agente. Objetivo Agente Objetivo do Subproblema 1 Agente I Objetivo do Subproblema 2 Agente II Tabela 1: A mapeamento entre subproblemas e tipos de agentes. Figura 2: A arquitetura do Sistema Baseado em Agentes. Após a criação dos vários tipos de agentes, cada agente deve possuir uma especificação de cenários. Esses cenários possuem informações sobre o contexto de como cada agente deverá atingir seus objetivos. Esses objetivos possuem ações que o agente deve seguir para alcançar os objetivos dos subproblemas, e conseqüentemente o objetivo do problema principal. O diagrama 3 apresenta o digrama de cenário do Agente I. 22 Figura 3: Cenário do Agente I. Um diagrama interessante que deriva dos diagramas de cenário é o diagrama de interação. Esse diagrama deixa explícita a comunicação entre os agentes, e PUC-Rio - Certificação Digital Nº 0115614/CA permite uma visão dinâmica do sistema. O diagrama 4 apresenta a interação entre o Agent I e Agente II Figura 4: Diagrama de Interação do Agente I e Agente II. Conceitos de Agentes Classes do ASYNC instanciadas O ambiente e os recursos (i) Classe Principal para o ambiente; (ii) Classes para os recursos. Agente (i) Uma classe concreta que herda de Agent, e implementa AgentInterface; (ii) Uma classe concreta que herda de InteractionProtocols. Ações internas do Agente Métodos incluídos na classe concreta de Agent. Protocolos de Interação Métodos incluídos na classe concreta de InteractionProtocols. Formato das Mensagens nos (i) protocolos de interação Classe concreta que implementa AgentMessage, se a troca de mensagens é síncrona; (ii) Classe concreta AgentBlackBoardInfo, que se a implementa troca de mensagens é assíncrona. Tabela 2: Mapeamento dos Conceitos de Agentes para as Classes OO. 23 O capítulo 3 apresenta um framework chamado ASYNC (Sardinha et al., 2003a), e um mapeamento das abstrações de agentes para abstrações OO (Sardinha et al., 2005c). A tabela 2 resume esse mapeamento, porém o detalhe de instanciação do framework será apresentado mais adiante nesta tese. Esse framework é fundamental para o método proposto, pois: (i) Permite um mapeamento claro entre abstrações de agentes e PUC-Rio - Certificação Digital Nº 0115614/CA código OO; (ii) Permite re-uso de código; (iii) Diminui o tempo de desenvolvimento; (iv) Diminui a complexidade de implementar agentes de software. Em conseqüência do uso do framework proposto, cada agente no sistema deve possuir duas classes concretas. A figura 5 exemplifica essas classes. As ações internas do agente, que não dependem da interação com outros agentes no sistema, são mapeados como métodos da classe Agente I. Os protocolos de interação, que definem como o agente deve se comunicar e interagir com outros agentes no sistema, são mapeados como métodos da classe Agent I IP. Figura 5: O diagrama de classes do Agente I. Esse framework também possui uma camada de comunicação síncrona através de troca de mensagens, e uma comunicação assíncrona através do uso de um tuple space reflexivo e distribuído (Silva et al., 2001). Essa camada de comunicação fornece serviços básicos (ler, escrever, e retirar), e pode ser usado para implementar um blackboard associativo (Corkill et al., 1987). O uso dessa infra-estrutura de comunicação é fundamental para a nossa arquitetura de implementação. Os agentes devem executar as suas ações de forma assíncrona, e 24 compartilhar resultados através de uma base de conhecimento corporativa dentro do tuple space. Essa estratégia é utilizada também pelo A-Teams (Talukdar et al., 1997), um sistema que utiliza memória distribuída para resolver problemas de PUC-Rio - Certificação Digital Nº 0115614/CA forma descentralizada. A figura 6 ilustra a arquitetura de implementação. Figura 6: A arquitetura de implementação do Sistema Multi-Agente. A arquitetura proposta permite uma alta escalabilidade para o sistema, pois não há limite para o número de agentes. Os resultados de ações dos agentes podem ser compartilhados nessa base de conhecimento corporativa, e acessado por qualquer outro agente no sistema, mesmo que este esteja fisicamente em outra CPU. A arquitetura também fornece uma grande versatilidade, pois cada agente ataca um objetivo do subproblema com técnicas diferentes de inteligência e aprendizado. A combinação dos resultados dos subproblemas é feita com simplicidade através dessa base de conhecimento corporativa. O sistema é simples de evoluir, pois novos agentes com técnicas de inteligência podem ser inseridos a qualquer momento. Isso fornece grande flexibilidade ao engenheiro do sistema. Porém, ao invés de implementar o sistema multi-agente com todos os agentes inteligentes em uma única fase, o nosso método propõe uma primeira implementação com apenas agentes reativos (Ferber, 1999) sem nenhuma técnica de machine learning implementada. Essa primeira versão é importante para testar a comunicação entre os agentes e a interação com o ambiente externo. A próxima etapa do método permite incluir disciplinadamente as técnicas de machine learning em sistemas multi-agente. Esse método também permite em sua fase de implementação, a integração de diferentes algoritmos de machine learning e a avaliação da performance do sistema. O método é apresentado no capítulo 6 e possui quatro fases distintas: 25 (i) Objetivo Sistêmico & Seleção da Medida de Performance, onde o objetivo do problema principal é associado a uma medida de performance para o sistema. Essa medida de performance permite mensurar se o objetivo sistêmico está sendo alcançado; (ii) Seleção do Agente & Definição do Objetivo do Aprendizado no Agente, onde agentes com planos complexos são selecionados, e objetivos são atribuídos para o algoritmo de aprendizado; (iii) Design do Aprendizado no Agente, onde o refactoring do design do agente é definido; e (iv) Implementação Incremental & Avaliação de Performance, onde uma implementação incremental é proposta com treinamento, teste PUC-Rio - Certificação Digital Nº 0115614/CA e avaliação. O processo incremental e iterativo de implementação da fase 4 permite verificar o quanto o objetivo do problema principal do sistema esta sendo alcançado através da medida de performance selecionada na fase 1. Conseqüentemente, o engenheiro de software pode projetar técnicas de machine learning que maximizem essa medida de performance. 1.5. Avaliação Empírica Esta tese apresenta várias aplicações desenvolvidas com agentes inteligentes. O método e framework proposto foram concebidos através de um desenvolvimento bottom-up. A primeira aplicação (Sardinha, 2001; Milidiú et al., 2001) apresenta um sistema baseado em agentes para criar promoções em um mercado varejista utilizando o conceito de agregação de produtos. A aplicação apresenta agentes que utilizam técnicas de clustering e algoritmos evolutivos para determinar “cestas” de produtos altamente lucrativos. A segunda aplicação (Ribeiro, 2001; Sardinha et al., 2003a) apresenta um mercado virtual para compra e venda de bens. Os agentes no sistema também implementam uma negociação automática entre compradores e vendedores. Além disso, o sistema implementa um mecanismo de certificação dos vendedores, compradores e bens para garantir a segurança das transações. As próximas duas aplicações implementadas utilizam integralmente o processo de generalização que concebeu o framework e o método propostos nessa 26 tese. As aplicações também foram extremamente importantes para garantir a robustez do processo desenvolvido, e testar a escalabilidade do método. A terceira aplicação desenvolvida é o LearnAgents (Sardinha et al., 2004c; Sardinha et al., 2005a), um sistema multi-agente distribuído para um complexo cenário de procurement em leilões simultâneos e interdependentes. Os agentes cooperam para atingir um único objetivo que é maximizar a diferença entre a utilidade marginal dos pacotes de bens e os custos de obtenção dos bens nos leilões. Na arquitetura proposta, cada agente ataca um subproblema do objetivo global, e utilizam várias técnicas de inteligência e aprendizado para resolver esses subproblemas. Além disso, o Trading Agent Competition (TAC) foi escolhido como PUC-Rio - Certificação Digital Nº 0115614/CA ambiente para testar a arquitetura. Esse ambiente apresenta características de um mercado competitivo e permite avaliar a performance do LearnAgents em relação a outros sistemas para comércio eletrônico. O LearnAgents conseguiu o terceiro lugar na competição de 2004, e permitiu confirmar a robustez do método e framework desta tese. A quarta aplicação é um sistema multi-agente para um Supply Chain Management. O ambiente do TAC também foi utilizado para avaliar a performance desse sistema. Nesse ambiente, os sistemas participantes competem por clientes e por peças de um número limitado de fornecedores. Os participantes também são limitados pela capacidade da fábrica, e tem que gerenciar todos os processos de uma cadeia de suprimentos. 1.6.Organização da Tese O Capítulo 2 apresenta as principais tecnologias de engenharia de software e um resumo dos algoritmos utilizados para construir os sistemas multi-agente desta tese. Essas tecnologias são fundamentais para o desenvolvimento de sistemas multi-agente de larga escala. O capítulo 3 apresenta o framework orientado a objetos ASYNC para facilitar e agilizar a implementação de agentes inteligentes em ambientes distribuídos. Este capítulo utiliza o estudo de caso Bundles.com, uma aplicação para determinar “cestas” de produtos altamente lucrativos, para exemplificar a utilização do framework. 27 O capítulo 4 apresenta o método MAS-School para modelar e implementar agentes de software inteligentes desde as primeiras fases de desenvolvimento. O capítulo 5 apresenta o LearnAgents, um sistema multi-agente distribuído para um complexo cenário de procurement em leilões simultâneos e interdependentes. O capítulo 6 apresenta o LearnAgentsSCM, um sistema multi-agente distribuído para um Supply Chain Management. O capítulo 7 apresenta as conclusões e trabalhos PUC-Rio - Certificação Digital Nº 0115614/CA futuros. 28 2 A Construção de Sistemas com Agentes Inteligentes Este capítulo apresenta as principais ferramentas de Engenharia de Software e algoritmos utilizados nessa tese. A primeira seção apresenta uma linguagem de modelagem orientada a agentes chamada ANote. Essa ferramenta é indispensável para qualquer projeto de software de sistema multi-agente de larga escala. As próximas duas seções apresentam ferramentas importantes que permitem reuso de código e design. Essas ferramentas diminuem o tempo de desenvolvimento e PUC-Rio - Certificação Digital Nº 0115614/CA reduzem a complexidade de implementar sistemas multi-agente. A última seção deste capítulo apresenta um resumo de vários algoritmos utilizados nessa tese. 2.1. ANote – Uma linguagem de Modelagem Simples e Poderosa ANote (Choren, 2002; Choren et al., 2004a; Choren et al., 2004b) é uma linguagem de modelagem que oferece um padrão para descrever conceitos relacionados ao processo de modelagem orientado a agentes. A linguagem possui um meta-modelo conceitual que define, em um nível mais alto, conceitos de interação, de ambiente, e de sociedade tais como objetivos, protocolos de interação, recursos do ambiente e organizações. Além disso, a linguagem também define conceitos básicos para cada agente individualmente tais como ações, comunicação e planos. Esses conceitos definem uma variedade de aspectos ou visões, que podem se complementar ou sobrepor na especificação do sistema. A linguagem ANote define sete visões baseadas em seu meta-modelo conceitual: objetivo, agente, cenário, planejamento, interação, ontologia e organização. Cada visão gera um artefato ou diagrama, e representa uma especificação parcial do sistema. Assim, o designer do sistema pode se concentrar em um conjunto pequeno de propriedades a cada momento, e considerar apenas as propriedades importantes para cada contexto. A visão de objetivo do ANote fornece uma identificação inicial de uma árvore de objetivos para definir as funcionalidades do sistema. Nesta visão, 29 objetivos complexos podem ser decompostos funcionalmente em outros objetivos e fluxos, e isso fornece uma descrição das funcionalidades em termos de uma árvore hierárquica de objetivos. A figura 7 apresenta uma ilustração da visão de objetivo. Figura 7: A visão de objetivo do ANote. PUC-Rio - Certificação Digital Nº 0115614/CA A visão do agente especifica as classes dos agentes na aplicação e seus relacionamentos. Nesta visão não há detalhes sobre o comportamento dos agentes, pois especifica apenas a estrutura do sistema. As classes de agentes especificam os papéis que serão executados para alcançar os objetivos definidos na visão de objetivo. Essas classes podem constituir também uma ou mais organizações. Quando dois agentes precisam interagir no sistema, uma associação é criada para representar um relacionamento estrutural. A figura 8 apresenta uma ilustração da visão do agente. Figura 8: A visão do agente do ANote. A visão do cenário especifica o comportamento de um cenário do agente. Esse cenário é especificado textualmente, e apresentam planos de como o agente deve atingir os seus objetivos. Esses cenários são úteis por dois motivos: (i) ilustrar como objetivos podem ser atingidos ou não; e (ii) mostrar as circunstâncias em que o agente pode se adaptar, aprender, ou mostrar um comportamento autônomo. Os cenários são gerados por um grupo de ações normais e emergentes, que surgem de comportamentos adaptativos ou em 30 contextos excepcionais. Essas são partes de um cenário que precisam ser especificados: agente principal, pré-requisitos, plano principal e plano variante. A figura 9 apresenta uma ilustração da visão do cenário. PUC-Rio - Certificação Digital Nº 0115614/CA Figura 9: A visão do cenário do ANote. A visão de planejamento apresenta as ações de planos descritas no cenário. Essa visão utiliza uma representação de estados com ações e transições para apresentar as ações internas e sua seqüência. As visões de cenários podem ser mapeadas diretamente para estas visões de planejamento, e vice versa. Além disso, uma notação de adaptação do agente é apresentada com transições adaptativas para ações variantes ou comportamentos emergentes. Essas transições adaptativas permitem ao designer ilustrar quando e em que circunstâncias um agente deve modificar o seu comportamento. A figura 10 apresenta os componentes da visão de planejamento. Figura 10: A visão de planejamento do ANote. 31 A visão de interação é utilizada para representar um conjunto de mensagens trocadas pelos agentes durante a execução de ações de planos. As interações são representadas nesta visão como diagramas de conversação que descrevem o discurso entre os agentes, por exemplo, o protocolo de mensagens e os estados da PUC-Rio - Certificação Digital Nº 0115614/CA interação. A figura 11 apresenta os componentes da visão de interação. Figura 11: A visão de interação do ANote. Um sistema multi-agente não é composto apenas por agentes, pois possui também componentes que compõem o ambiente onde os agentes atuam. A visão de ontologia é responsável por especificar os recursos do ambiente e a base de conhecimento do agente. Em ANote, esses componentes que não representam agentes são modelados como objetos. Conseqüentemente, um diagrama de classes UML, podendo ser detalhado com OCL, é utilizado para representar o ambiente do sistema. A visão de organização modela a sociedade de agentes como uma unidade que oferece serviços. Esses serviços possuem um conjunto de objetivos, e podem ser acessados por uma interface através de protocolos de mensagens. As organizações podem participar de uma relação de dependência para mostrar como elas são organizadas no modelo cliente-servidor. Por exemplo, ilustrar como os agentes de uma organização requisitam os serviços de agentes pertencentes a outra organização. 32 Figura 12: A visão de organização do ANote. 2.2. Frameworks Orientados a Objetos Frameworks orientados a objetos (Fayad et al., 1999) é uma tecnologia de software que permite a construção rápida e fácil de um software. A demanda por PUC-Rio - Certificação Digital Nº 0115614/CA este tipo de tecnologia é cada vez mais constante. Por exemplo, uma ferramenta de e-commerce necessita de uma tecnologia que permita mudanças constantes no software para que possa se adequar às constantes alterações nas regras de comércio entre as empresas. A tecnologia dos frameworks orientados a objetos permite essas mudanças rápidas de desenvolvimento para que o software possa se adequar às alterações necessárias. Frameworks orientados a objetos geram aplicações instanciadas com muita rapidez, acompanhando assim a constante necessidade de gerar serviços e produtos inovadores. As suas principais características são: (i) Reutilização - A possibilidade de reutilizar código nas várias aplicações instanciadas pelo frameworks orientados a objetos é que permite diminuir o tempo de desenvolvimento do software. Utilizando uma modelagem orientada a objetos reutilizável (Fayad et al., 1999), frameworks permitem o re-uso das classes, subsistemas ou até o sistema para a geração de novas aplicações instanciadas. (ii) Flexibilidade - Frameworks orientados a objetos são flexíveis suficientes para construir variações e extensões no software. Isso permite desenvolver uma gama de aplicações que cobrem um domínio bem amplo. Frameworks orientados a objetos possuem um núcleo de software, com trechos de código já escritos, e vários pontos de flexibilização (Fayad et al., 1999), que necessitam de desenvolvimentos futuros. Nesses pontos de flexibilização são 33 implementadas as variações e extensões necessárias para a criação da aplicação final. Para o desenvolvimento do núcleo é preciso que se faça, antes de qualquer coisa, uma análise de requisitos das várias aplicações pertencentes ao domínio. Nessa análise de requisitos são identificados os pontos em comum das aplicações e as variações. No desenvolvimento dos frameworks orientados a objetos são implementados os vários pontos em comum, e indicados os locais onde implementar os vários pontos de flexibilização. 2.3. Padrões de Projeto (Design Patterns) "Um padrão descreve um problema que ocorre inúmeras vezes em PUC-Rio - Certificação Digital Nº 0115614/CA determinado contexto, e descreve ainda a solução para esse problema, de modo que essa solução possa ser utilizada sistematicamente em distintas situações" (Alexander et al, 1977). Conseqüentemente, os design patterns são muito importantes para o processo de desenvolvimento de software, especialmente nas áreas de manutenção e reuso de código. Os design patterns são definidos como soluções para problemas recorrentes. Christopher Alexander apresentou em seu trabalho (Alexander et al, 1977; Alexander, 1979) os primeiros design patterns. Ele escreveu sobre a sua experiência em engenharia civil para resolver problemas de projetos que apareciam de forma recorrente em construções e cidades. Esse processo de documentação de soluções para problemas recorrentes começou na área de desenvolvimento de software a cerca de 15 anos atrás. Os princípios de Alexander estão presentes na criação das primeiras documentações de design patterns. Os documentos funcionavam como um guia para desenvolver software, e seu público alvo era programadores novatos que queriam adquirir conhecimento com os engenheiros de software mais experientes. Um dos trabalhos mais práticos nessa área resultou no livro do gang of four (Gamma et al., 1995) em 1995 por Eric Gamma, Richard Helm, Ralph Johnson e John Vlissides. O livro descreve 23 padrões que surgiram a partir da experiência dos autores no desenvolvimento de software. 34 Os principais objetivos dos padrões de projetos são (Gamma et al., 1995): (i) Capturar a experiência e o conhecimento de um especialista em projeto de software; (ii) Especificar abstrações com um nível acima de classes, objetos ou componentes; (iii) Definir um vocabulário comum para que os problemas e soluções possam ser discutidos; (iv) Definir uma arquitetura de software com fácil documentação e manutenção; (v) Determinar propriedade que auxiliem projetos de arquitetura; (vi) Auxiliar o desenvolvimento de arquiteturas complexas. PUC-Rio - Certificação Digital Nº 0115614/CA A descrição dos design patterns utiliza alguns formatos comuns, tais como Alexandrian (Alexander, 1979), GoF (Gamma et al., 1995), e POSA (Buschmann et al., 1996). O padrão apresentado no capítulo 4 utiliza um formato que combina elementos do GoF e POSA. Os elementos mais importantes são: (i) Nome e Intenção – definem de forma sucinta a essência do padrão; A escolha do nome é extremamente importante, pois é incorporado ao vocabulário dos engenheiros de software; (ii) Contexto – descreve as situações onde o padrão deve ser aplicado, e fornece evidências de sua generalidade; (iii) Problema – descreve as dificuldades de design normalmente encontradas por engenheiros de software; (iv) Forças - descrevem de forma sucinta os principais objetivos; (v) Solução – descreve como resolver o problema de design já definido. Essa solução define elementos ou participantes que criam um design em termos de abstrações de um paradigma de programação. Essa solução deve atingir todos os objetivos de design definidos, e resolver os problemas para todas as aplicações do contexto apresentado; 35 2.4. Algoritmos para Agentes Inteligentes Esta seção apresenta de forma sucinta alguns algoritmos de Inteligência Artificial, Machine Learning, Predição em Séries Temporais, Otimização Combinatória, e Análise de Agrupamento utilizadas nesta tese. Esses algoritmos são úteis para implementar agentes inteligentes que resolvem problemas complexos e aprendem a se adaptar a novas experiências. A seção 2.4.1 apresenta algumas definições de Inteligência Artificial, e descreve o método de busca Minimax com a técnica de poda Alpha-Beta. A seção 2.4.2 apresenta uma subárea da Inteligência Artificial chamada Machine Learning, e apresenta duas técnicas desta área: Redes Neurais e Algoritmos Genéticos. A seção 2.4.3 apresenta algumas técnicas de Predição em Séries PUC-Rio - Certificação Digital Nº 0115614/CA Temporais: a Média Móvel e a Exponencial Suavizada. A seção 2.4.4 apresenta a Otimização Combinatória, e a técnica de formulação de Programação Inteira. A seção 2.4.5 apresenta a Análise de Agrupamento e um algoritmo chamado Isodata. 2.4.1.Inteligência Artificial Um agente racional é uma entidade que faz a coisa correta (Russell et al., 1995). Porém, o que é fazer a coisa correta? Os autores afirmam que é equivalente a definir o “como” e “quando” esse agente atinge o sucesso. Conseqüentemente, o termo medida de performance é utilizado para definir esse grau de sucesso e responder o: (i) “como” – um critério para determinar o quanto o agente é bem sucedido, e o (ii) “quando” – o momento certo para fazer essa avaliação. Winston (Winston, 1992) define Inteligência Artificial (IA) como “o estudo das computações que permitem uma entidade sentir, pensar e agir”. A área possui dois objetivos principais para o autor: (i) visão de engenharia – a IA tem o objetivo de resolver problemas reais utilizando um ferramental de idéias sobre representação do conhecimento, a utilização do conhecimento, e integração de sistemas; e (ii) visão científica – a IA é utilizada para determinar quais ideais sobre representação do conhecimento, a utilização do conhecimento, e integração de sistemas, melhor explicam os vários tipos de inteligência. 36 2.4.1.1.Busca Minimax O Minimax (Russell et al., 1995) é uma técnica de busca para determinar a estratégia ótima em um cenário de jogo com dois jogadores. O objetivo dessa estratégia ótima é decidir a melhor jogada para um dado estado do jogo. Há dois jogadores no Minimax: o MAX e o MIN. Uma busca em profundidade é feita a partir de uma árvore onde a raíz é a posição corrente do jogo. As folhas dessa árvore são avaliadas pela ótica do jogador MAX, e os valores dos nós internos são atribuídos de baixo para cima com essas avaliações. As folhas do nível minimizar são preenchidas com o menor valor de todos os seus nós filhos, e o nível de maximizar são preenchidos com o maior valor de todos os nós filhos. Essa técnica é utilizada combinada com uma técnica de poda chamada Alpha-Beta (Russell et PUC-Rio - Certificação Digital Nº 0115614/CA al., 1995). Figura 13: A árvore Minimax. 2.4.2.Machine Learning Machine Learning é uma subárea da Inteligência Artificial que está relacionada com os programas que aprendem com experiência (Russell et al., 1995). As técnicas de Machine Learning são cruciais para fornecer estratégias conhecidas aos agentes em ambiente imprevisíveis e heterogêneos como a Internet. A área de Machine Learning estuda as questões de como construir programas de computadores que melhoram automaticamente com a experiência 37 (Mitchell, 1997). Essas técnicas podem ser classificadas em relação ao processo de aprendizado que visa melhorar automaticamente a sua performance: (i) Aprendizado Supervisionado – O algoritmo de aprendizado é treinado com um conjunto de entradas conhecidas e saídas corretas correspondentes. A técnica de aprendizado adapta o conhecimento para que o erro entre a saída atual e a saída correta seja o menor possível. Esse tipo de aprendizado se assemelha ao aprendizado de um aluno com um professor amigo que fornece exemplos e orientações. (ii) Aprendizado Não Supervisionado – O algoritmo de aprendizado é treinado apenas com as entradas conhecidas, mas sem as saídas corretas correspondentes. O algoritmo procura por padrões interessantes, PUC-Rio - Certificação Digital Nº 0115614/CA regularidades ou agrupamentos nessas entradas conhecidas. Esse tipo de aprendizado se assemelha ao aprendizado de um aluno que procura identificar regularidades e generalizações a partir apenas de observações empíricas. (iii) Aprendizado Semi-Supervisionado - O algoritmo de aprendizado é treinado com um conjunto de dados rotulados (entradas e saídas corretas conhecidas) e outra parte não rotulada (apenas entradas conhecidas). O conjunto não rotulado é utilizado para incrementar a performance de modelos de classificação tradicionais, baseados no processo de aprendizado supervisionado que utilizam apenas os dados rotulados. (iv) Aprendizado por Reforço - O algoritmo de aprendizado é treinado sem nenhum conjunto de treinamento. O algoritmo deve adquirir o conhecimento através de ações feitas em um ambiente. Esse ambiente simplesmente fornece recompensas e penalidades, ou reforços, por ações boas ou ruins executadas pelo algoritmo. Conseqüentemente, o algoritmo deve adaptar o seu conhecimento para sugerir apenas ações boas. Esse tipo de aprendizado se assemelha ao aprendizado de um aluno com um crítico, que fornece apenas mensagens do tipo “muito bom” ou “péssima alternativa”. 38 2.4.2.1. Redes Neurais As Redes Neurais (Mitchell, 1997) são sistemas inspirados nos neurônios biológicos e o poder de processamento paralelo do cérebro com vários neurônios. Uma rede neural artificial é composta por várias unidades de processamento chamadas neurônios artificiais. Assim como o sistema nervoso é composto por bilhões de células nervosas, a rede neural artificial também é formada por unidades que simulam o funcionamento de um neurônio. Estes módulos devem receber e retransmitir PUC-Rio - Certificação Digital Nº 0115614/CA informações tal como um neurônio biológico. Figura 14: O Neurônio Artificial. Um tipo de rede neural muito popular é baseado na unidade chamada perceptron (Rosenblatt, 1959). O perceptron (Mitchell, 1997) recebe um vetor de entrada com números reais, calcula a combinação linear dessas entradas, e gera uma saída igual a 1 se o valor é maior do que um mínimo estabelecido. Caso contrário, o valor é -1. Precisamente, dadas as entradas x1 até xn , a saída o(x1, ..., xn) é calculada da seguinte forma: o( x1 ,..., x n ) = 1, se w0 + w1 x1 + w2 x 2 + ... + wn x n > 0 − 1, caso o contrário Onde cada wi é uma constante de valor real, ou peso, que determina a contribuição da entrada xi na saída do perceptron. Note que a quantidade –w0 é um valor mínimo que a combinação w1x1 + ... + wnxn precisar atingir para que o perceptron gere a saída 1. O aprendizado no perceptron é um processo de escolha de valores para os pesos w0,...,wn. Esse processo ocorre com a adaptação dos pesos a partir de um 39 conjunto de entradas conhecidas e saídas corretas correspondentes. Uma maneira de aprender todos esses pesos é começar com valores aleatórios, e depois iterativamente aplicar o perceptron para cada exemplo do conjunto de treinamento, modificando os seus pesos toda vez que a saída gerada diferir da saída esperada. A Regra do Perceptron (Rosenblatt, 1959) é um algoritmo para atualizar os pesos do perceptron a cada passo no processo de aprendizado: wi = wi + . (t – o).xi Onde wi é i-ésimo peso do perceptron, xi é a i-ésima entrada do perceptron, t é a saída esperada para o exemplo de treinamento, o é a saída gerada pelo perceptron, e é uma constante positiva chamada taxa de aprendizado. Essa taxa PUC-Rio - Certificação Digital Nº 0115614/CA tem o objetivo de regular o grau de mudança dos pesos a cada passo, e normalmente é um valor pequeno como, por exemplo, 0.1. 2.4.2.2.Algoritmos Genéticos Os algoritmos genéticos (Winston, 1992) utilizam um procedimento de busca inspirado na evolução natural. Os passos utilizados dentro dos algoritmos usam rotinas análogas, de uma certa forma, ao cruzamento de indivíduos, cruzamento de cromossomos, mutação de genes, e seleção natural. Um ponto importante a ressaltar na seleção natural é a baixa eficiência apresentada ao utilizar mecanismos simples de seleção. Para obter resultados melhores, o mecanismo precisa levar em consideração a diversidade entre os indivíduos e a capacidade individual. Nos algoritmos genéticos, a pouca diversidade apresenta um resultado interessante: uma busca apenas de um ótimo local. Porém, o objetivo da busca não é esse, mas sim encontrar um ótimo global. Para encontrar esse ótimo global, a diversidade se torna um fator fundamental. Assim como na evolução natural, os algoritmos genéticos sacrificam parte da sua população em ótimos locais para que outros indivíduos consigam atingir o ótimo global. Um cromossomo nesses algoritmos representa um ponto no espaço de busca, e o objetivo é criar novos cromossomos a partir dos existentes que estejam mais próximos do ótimo global. É importante notar que cada cromossomo: 40 (i) possui uma lista de elementos chamados de genes; (ii) representa um ponto no espaço de busca com um valor associado que representa o quão forte (fitness) esse indivíduo é; (iii) um novo cromossomo pode ser criado utilizando o conceito de cruzamento de outros dois cromossomos; (iv) um novo cromossomo também pode ser criado utilizando o conceito de mutação, onde esse novo cromossomo possui um gen modificado. PUC-Rio - Certificação Digital Nº 0115614/CA O algoritmo abaixo imita a evolução natural (Winston, 1992). (i) crie uma população inicial de um cromossomo; (ii) faça a mutação de um ou mais genes utilizando um ou mais cromossomos existentes em sua população, produzindo assim um novo cromossomo a cada nova mutação; (iii) faça o cruzamento de um ou mais cromossomos; (iv) adicione os cromossomos novos gerados a partir da mutação e do cruzamento à população atual; (v) crie uma nova geração mantendo os melhores cromossomos de sua população, junto com alguns outros cromossomos escolhidos aleatoriamente de sua população atual. Nessa escolha aleatória, aumente a probabilidade de escolha para os cromossomos que tiverem um "fitness" maior; (vi) volte ao passo dois até que um cromossomo de sua nova geração tenha atingido o objetivo (maior "fitness"). 2.4.3.Predição em Séries Temporais A predição em séries temporais, ou técnicas de Forecasting (Bowerman et al, 1993; Chopra et al., 2004), são muito utilizadas para calcular valores futuros de demanda ou preços baseados em dados históricos. Por exemplo, os métodos de forecasting de demanda são a base do planejamento estratégico em uma cadeia de suprimento. O objetivo das técnicas de forecasting, na pratica, é apoiar as decisões, tais como (i) quantos produtos devem ser produzidos esse mês? (ii) qual 41 o tamanho do lote de compra de uma determinada matéria prima? (iii) quando efetuar esse pedido de compra de matéria prima? Uma das técnicas de forecasting em séries temporais mais simples se chama Média Móvel, e pode ser definida pela seguinte fórmula: onde: é a série histórica (N termos) é a seqüência de n preços previstos (janela de PUC-Rio - Certificação Digital Nº 0115614/CA tamanho n) Uma outra técnica de forecasting em séries temporais se chama Exponencial Suavizada, e pode ser definida pela seguinte fórmula: si = α .ai −1 + (1 − α ).si −1 onde: é a série histórica (N termos) {s i }in=1 é a seqüência de n preços previstos é a constante de suavização Observe que pela sua definição recursiva, o si pode re-escrito como: s i = α .ai −1 + α .(1 − α ).ai − 2 + α .(1 − α ) 2 .ai −3 + ... Essa fórmula mostra o efeito do desconto no valor da informação introduzida por , que é usualmente escolhido no intervalo 0 < < 1. 2.4.4. Otimização Combinatória Um Solver, ou otimizador, (Solver.com, 2005; Wolsey, 1998) é uma ferramenta de software que ajuda a encontrar a melhor maneira de alocar recursos. 42 Esse recursos podem ser matéria prima, homem – hora, ou qualquer coisa com um estoque limitado. A solução ótima pode ser essa alocação que gere o maior lucro, o menor custo, ou encontre a melhor qualidade possível. Para utilizar um solver, um modelo precisa ser criado para especificar: (i) Os recursos a serem utilizados, ou variáveis de decisão; (ii) Os limites de recursos que podem ser utilizados, ou restrições; (iii) A medida de otimização, ou o objetivo. A formulação de programação inteira é uma linguagem matemática para criar esses modelos de otimização. Seja: PUC-Rio - Certificação Digital Nº 0115614/CA max{ cx : Ax b, x 0 } um programa linear. Onde A é uma matriz de m por n elementos, c é um vetor linha de dimensão n, b é um vetor coluna de dimensão m, e x é um vetor coluna de dimensão n com variáveis de decisão. Na programação inteira as componentes de x são todas variáveis inteiras. Conseqüentemente: (i) A Função Objetivo é definida por: max cx (ii) Variáveis de decisão são definidas por: x (iii) 0, e x possui apenas valores inteiros. Restrições são definidas por: Ax b A tradução de um problema para esta formulação nem sempre é uma tarefa simples. Definir variáveis e restrições para esse modelo de otimização quase sempre requer um trabalho de engenharia de algoritmos, pois o problema de decisão da programação inteira é NP-completo (Wolsey, 1998). 2.4.5. Análise de Agrupamento O principal objetivo dos algoritmos de Agrupamento (Duda et al., 1973; Lebart et al., 1997) é agrupar dados que possuem padrões semelhantes. Esses grupos também são conhecidos por clusters ou partições. O problema de 43 agrupamento pode ser considerado também como um método de particionamento de um espaço. O ideal é que esse particionamento organize os dados de tal maneira que se possa tomar decisões corretas. Caso isso não seja possível, o objetivo é obter uma probabilidade de erro bem pequena. Os algoritmos de agrupamento se tornam muito interessantes para a área de Inteligência de Mercado que está preocupada também em encontrar grupos de consumidores com padrões de consumo ou hábitos semelhantes. Esses padrões encontrados permitem criar produtos e serviços personalizados para esses grupos, aumentando assim o foco da empresa e a satisfação dos clientes. 2.4.5.1. Algoritmo Isodata PUC-Rio - Certificação Digital Nº 0115614/CA O Isodata (Duda et al., 1973; Lebart et al., 1997) é um algoritmo de agrupamento muito conhecido pela sua simplicidade e rapidez de processamento. A entrada desse algoritmo é o conjunto I de n indivíduos a serem particionados, onde cada indivíduo possui p atributos. Esse conjunto representa os dados a serem agrupados. Suponha que o espaço Rp possui uma distância d entre os n pontosindivíduo (por exemplo, a distância euclidiana). Além disso, um limite máximo de q classes é estabelecido para o resultado do algoritmo. O algoritmo (Lebart et al., 1997) ilustra as etapas que determinam as classes: Etapa 0: Determine q centros provisórios das classes (por exemplo, de maneira pseudo-aleatória). Os centros são: {C10 ,..., C k0 ,..., C q0 } Calcule uma primeira partição P0 do conjunto I em q classes: {I 10 ,..., I k0 ,..., I q0 } 0 Um individuo i pertence a uma classe I k se ele é mais próximo a C k0 do que a qualquer outro centro. Etapa 1: Determine os q novos centros das classes: {C11 ,..., C k1 ,..., C q1 } Calculando os centros de gravidade a partir das partições: 44 {I 10 ,..., I k0 ,..., I q0 } Esses novos centros permitem o cálculo de uma nova partição P1 de I, utilizando a mesma regra empregada para determinar P0. A nova partição P1 é formada pelas classes: {I 11 ,..., I k1 ,..., I q1 } Etapa m: Determine os q novos centros das classes: {C1m ,..., C km ,..., C qm } Calculando os centros de gravidades a partir das partições: {I 1m−1 ,..., I km−1 ,..., I qm−1 } Esses novos centros permitem o cálculo de uma nova partição Pm de PUC-Rio - Certificação Digital Nº 0115614/CA I, utilizando a mesma regra empregada para determinar P0. A nova partição Pm é formada pelas classes: {I 1m ,..., I km ,..., I qm } Aos poucos o processo converge e o algoritmo pode terminar o seu processamento quando duas iterações sucessivas apresentarem as mesmas partições. Uma maneira para determinar se as partições são idênticas é utilizando a medida da variância intra-classes. Muitas vezes, o algoritmo é implementado para não esperar a sua convergência completa. Mas para isso, uma margem de erro é definida para que seja possível determinar o ponto de parada. Essa margem de erro permite calcular quanto que uma partição pode diferir da partição sucessiva. O resultado das partições é representado pelos centros ou centróides. Um centróide pode ser considerado um indivíduo que melhor representa as características de sua partição. 45 3 ASYNC – Um Framework para Construção de Agentes Inteligentes Este capítulo apresenta o Agent’s SYNergistic Cooperation (ASYNC) framework. O ASYNC (Sardinha et al., 2003a) é um framework orientado a objetos que permite construir agentes de software em ambientes distribuídos. O framework proposto foi concebido através de um desenvolvimento bottom-up. Três aplicações baseadas em agentes foram desenvolvidas para identificar o código re-utilizável: (i) Uma ferramenta (Sardinha, 2001; Milidiú et al., 2001) que PUC-Rio - Certificação Digital Nº 0115614/CA utiliza agentes reativos e evolutivos para identificar interdependência de produtos para promoção em um mercado varejista; (ii) Uma ferramenta (Bevilacqua et al., 2001) baseada em agentes para criar grupos de consumo, e (iii) Uma ferramenta (Ribeiro, 2001) de negociação entre agentes. Através desse desenvolvimento, os pontos em comuns foram identificados e o domínio especificado. Conseqüentemente, o domínio desse framework orientado a objetos engloba todas as aplicações baseadas em agentes assíncronos e distribuídos. A seção 3.1 apresenta o estudo de caso Bundles.com (Sardinha, 2001; Milidiú et al., 2001). A seção 3.2 apresenta o framework orientado a objetos ASYNC, a seção 3.3 descreve o processo de instanciação do framework, e a seção 3.3 apresenta uma ferramenta para executar os agentes criados com o ASYNC. Uma aplicação chamada Babilônia (Ribeiro, 2001) é apresentada de maneira resumida na seção 3.4. Esta aplicação foi implementada pela aluna de mestrado Paula Clark e documentada em sua dissertação. Além de apresentar um exemplo de re-utilização de código do ASYNC por uma outra pessoa, essa aplicação foi muito importante no processo de generalização e design final do framework. 3.1. Estudo de Caso - A Aplicação Bundles.com A primeira aplicação que utilizou o ASYNC permite a criar promoções utilizando o conceito de agregação de produtos. A aplicação se chama Bundles.com (Sardinha, 2001; Milidiu et al, 2001). A tarefa de criar pacotes não é 46 trivial, pois muitas vezes o que parece ter apelo de marketing pode não gerar a receita esperada. Esse projeto de software utiliza a técnica orientada a objetivos para a fase de requisitos. Esta fase utiliza o processo recursivo de decomposição de um objetivo do problema principal em vários objetivos de subproblemas mais simples. PUC-Rio - Certificação Digital Nº 0115614/CA Figura 15: A decomposição dos objetivos. O objetivo maior do sistema é encontrar pacotes de produtos que maximizem a margem de lucro. Porém, dois objetivos foram identificados para encontrar essas ofertas: (i) Encontrar segmentos de mercado através de uma base de dados e algum algoritmo de clustering, e (ii) Simular um mercado competitivo para encontra as ofertas mais rentáveis. A segunda fase do processo de modelagem é criar os tipos de agentes que sejam capazes de conduzir os objetivos da figura 15. Essa criação começa com processo de relacionamento de todos os objetivos de nível mais baixo e tipos de agentes. A tabela 3 apresenta um mapeamento entre esses objetivos e tipos de agentes. A figura 16 apresenta os vários tipos de agentes e seus relacionamentos. Esta figura permite uma visão estática do projeto do nosso sistema multi-agente. Objetivo Agente Obter Histórico de Consumo Analista de Mercado Encontrar Estereótipos de Analista de Mercado Consumidores Vender Produtos e Maximizar Vendedor Receita Comprar Produtos para Maximizar Comprador a Satisfação Tabela 3: A mapeamento entre subproblemas e tipos de agentes. 47 Figura 16: apresenta a arquitetura do Bundles.com. O agente Analista de Mercado identifica os segmentos de mercado com padrões de consumo semelhantes utilizando um algoritmo de clustering chamado PUC-Rio - Certificação Digital Nº 0115614/CA Isodata (Duda et al., 1973; Lebart et al., 1997). O resultado desse algoritmo são centróides que representam estereótipos de consumidores. Conseqüentemente, todos os consumidores de um mesmo segmento devem diferir muito pouco desse estereótipo. O agente executa esse algoritmo um número N de vezes, e seleciona apenas os estereótipos que aparecem em todas as rodadas. A figura 17 apresenta o diagrama de cenário do agente Analista de Mercado. Este diagrama possui informações sobre o contexto de como o agente deverá atingir seus objetivos. Figura 17: Diagrama de Cenários do Analista de Mercado. A tabela 4 ilustra um resultado encontrado após as várias rodadas do algoritmo Isodata. As colunas dessa tabela representam os nove estereótipos encontrados a partir de uma base de dados com vários consumidores e suas transações de compras. As linhas representam a quantidade de produtos que esses consumidores estereótipos gostam de comprar para um dado período de tempo. 48 Através dos centróides é possível descobrir também algumas informações relevantes a respeito dos padrões de consumo dos vários consumidores dentro dos segmentos. A tabela 5 resume esse tipo de análise feito pelo agente. Os padrões de consumo são identificados através da relação dos segmentos com as classes de PUC-Rio - Certificação Digital Nº 0115614/CA produtos. Classe I Classe II Classe III Classe IV Classe V Classe VI Classe VII Classe VIII Classe IX Classe X Classe XI Classe XII Classe XIII Classe XIV 1 0 0 0 0 0 0 0 4 0 0 96 0 0 0 2 90 0 3 0 0 0 0 5 0 0 2 0 0 0 3 0 0 0 0 0 0 0 4 90 2 4 0 0 0 Segmentos 5 6 0 0 0 0 70 5 0 0 0 0 10 0 0 0 10 20 0 0 10 70 0 0 0 5 0 0 0 0 4 0 0 1 0 0 0 0 93 0 2 5 0 0 0 7 10 0 5 0 0 0 0 10 0 5 0 70 0 0 8 10 2 3 0 7 13 0 11 3 3 7 36 0 0 Tabela 4: Exemplos de centróides encontrados com o algoritmo Isodata. Segmento Padrão de Consumo 1 Apenas produtos da classe XI. 2 Apenas produtos da classe I. 3 Apenas produtos da classe IX. 4 Apenas produtos da a classe VIII. 5 Produtos da classe III. 6 Produtos da classe X. 7 Produtos da classe XII. 8 Produtos da classe XII. 9 Produtos da classe XI. Tabela 5: Tabela com os padrões de consumo dos nove centróides. O agente Comprador e agente Vendedor simulam um mercado competitivo para encontrar ofertas de produtos com alta lucratividade. O resultado dessa 9 10 0 10 0 0 2 0 20 3 5 50 0 0 0 49 simulação permite descobrir mais três informações relevantes: o segmento alvo de uma oferta, a receita gerada, e o preço dos produtos. Os Compradores recebem os resultados do Analista de Mercado para simular o comportamento de consumo. Esses agentes iniciam o processo de simulação com uma receita para comprar pacotes de bens, e utilizam a tabela 4 para selecionar os pacotes de bens que lhe interessam. A figura 18 apresenta o PUC-Rio - Certificação Digital Nº 0115614/CA diagrama de cenários do Comprador. Figura 18: Diagrama de Cenários do Comprador. Os agentes Vendedores foram modelados com características evolutivas (Winston, 1992) para descobrir pacotes que maximizem a preferência desses consumidores e a lucratividade. A construção de boas ofertas para um agente Vendedor envolve um problema de otimização combinatória. Conseqüentemente, a função de fitness desse agente pode ser medida pela receita que se consegue obter com a venda das ofertas menos o custo das mercadorias. O resultado da simulação não deve encontrar apenas a melhor oferta, mas o conjunto das melhores ofertas. Conseqüentemente, o algoritmo de otimização escolhido precisa ser capaz de obter o ótimo global, e também os vários ótimos locais existentes. Este foi um dos motivos principais para a escolha de um algoritmo evolutivo para o agente Vendedor. A figura 19 exemplifica uma função de fitness com o seu ótimo global e seus vários ótimos locais. 50 Figura 19: Os máximos locais e globais da função de fitness. A simulação desse mercado competitivo possui vários agentes vendedores PUC-Rio - Certificação Digital Nº 0115614/CA que competem entre si. O objetivo de cada um é vender o maior número possível de ofertas para um número limitado de consumidores. Além disso, estes consumidores são limitados em recursos financeiros. A figura 20 apresenta o diagrama de cenários do agente Vendedor. Figura 20: Diagrama de Cenários do Comprador. A simulação começa com agentes vendedores sem receita, porém com ofertas. Os agentes consumidores possuem dinheiro em uma conta corrente, e estão dispostos a consumir essas ofertas para maximizarem a sua satisfação. Além disso, o agente vendedor precisa acumular receita ou “energia” para sobreviver no sistema. 51 O agente que não consegue acumular receita após um determinado período simplesmente morre tal como uma seleção natural. O agente passa pelos seguintes estados em cada geração: (i) Estado 1 (Reprodução) - Reproduz com outros agentes; (ii) Estado 2 (Mutação) - Escolhe se vai criar um descendente mutante; (iii) Estado 3 (Tenta obter Energia) - Tenta vender a oferta para os consumidores. A receita gerada pela venda representa a energia obtida em uma geração; (iv) Estado 4 (Decide se consegue sobreviver) – O próprio agente verifica se é possível sobreviver para a próxima geração, dado PUC-Rio - Certificação Digital Nº 0115614/CA um parâmetro do sistema que representa o mínimo de energia para a sobrevivência no ambiente. O agente pode não sobreviver também caso ele tenha atingido o número máximo de gerações permitidas no sistema. Esse parâmetro de entrada existe para poder estabelecer um número fixo de gerações em que o agente tenta obter a meta de energia; (v) Estado 5 (Decide se atingiu a meta de energia) - Decide se obteve a meta de energia estabelecida. Essa meta é um parâmetro de entrada no sistema; (vi) Estado 6 (Vida Eterna) - Quando o agente consegue atingir a meta de energia, ele apenas permanece no sistema para que outros agentes possam utilizá-lo para fins de reprodução; (vii) Estado 7 (Morte do Agente) – O agente sai do sistema, e devolve a receita obtida aos segmentos. 3.1.1.Simulação e Monitoramento Uma interface de monitoração on-line do sistema foi desenvolvida para monitorar a evolução do sistema multi-agente. Esta interface permite a configuração inicial dos parâmetros do sistema. Essa parametrização se torna disponível para os agentes através de um espaço de memória compartilhada. As informações on-line são recolhidas também através dessa memória compartilhada. A interface de monitoração é apresentada na figura 21. PUC-Rio - Certificação Digital Nº 0115614/CA 52 Figura 21: Interface da Monitoração On-line. 3.1.2.Resultados da Evolução do Sistema As ofertas iniciais para os agentes vendedores são escolhidas de forma aleatória. Os agentes vendedores passam então por todos os estados descritos na figura 20 para tentar sobreviver no sistema. O gráfico da figura 22 apresenta um resultado típico da energia (receita) obtida pelos agentes vendedores nos vários instantes de tempo. As fases ilustram bem a evolução do sistema: Fase 1 - Nessa fase há uma abundância de recursos, pois os agentes Compradores ainda não compraram nada e possuem muito dinheiro em conta corrente. Devido ao seu comportamento guloso, a heurística criada permite que os segmentos aceitem qualquer oferta interessante, mesmo não sendo a melhor. Fase 2 - Após a fase de abundância vem um período de escassez. Na primeira fase, os Compradores compraram muitas ofertas e suas respectivas contas correntes diminuíram muito. É nesta fase que os Vendedores precisam evoluir para conseguirem vender os seus produtos. 53 Fase 3 - Após um período de evolução, os Vendedores conseguem novamente vender a sua cesta de produtos para os Compradores. Conseqüentemente, os Compradores esgotam quase todo o dinheiro disponível nas contas correntes. A figura 22 apresenta um gráfico da evolução do sistema, onde o eixo horizontal representa o tempo, e o eixo PUC-Rio - Certificação Digital Nº 0115614/CA vertical representa o total de receita obtido por todos os Vendedores. Figura 22: Energia obtida pelos Agentes por instante de tempo. 3.2. ASYNC – Um Framework Orientado a Objetos para Construção de Agentes Distribuídos e Assíncronos O framework orientado a objetos ASYNC foi utilizado na construção de todas as aplicações de sistemas baseados em agentes apresentados nesta tese. O design desse framework orientado a objetos separa duas abstrações importantes em agentes: ações internas e protocolos de interação. As ações internas são tarefas executadas pelo agente que não dependem da interação com outros agentes. Os protocolos de interação definem como o agente deve se comunicar e interagir com outros agentes no sistema. Um plano do agente pode ser composto de ações internas e protocolos de interação. O framework orientado a objetos também fornece uma infra-estrutura de comunicação para agentes em um ambiente distribuído. O framework é composto por: (i) Duas classes abstratas, Agent e InteractionProtocols; (ii) Duas classes concretas e finais, ProcessMessageThread 54 e AgentCommunicationLayer; e, (iii) Três interfaces, AgentMessage, PUC-Rio - Certificação Digital Nº 0115614/CA AgentBlackBoardInfo e AgentInterface. Figura 23: O diagrama de Classes do Framework Orientado a Objetos ASYNC. A classe abstrata Agent fornece as funcionalidades básicas do agente: (i) init() - iniciar o agente e obter seus recursos do ambiente, (ii) terminate() – liberar os recursos do ambiente, (iii) stop() – parar a execução do agente, (iv) process() execução das ações do agente, e (iv) trace() – impressão de mensagens na console. O atributo name desta classe guarda o nome do agente, e deve ser único no sistema por questões de implementação. A interface AgentInterface é responsável por transformar a subclasse de Agent em uma thread. Essa subclasse deve implementar o método run(), que é responsável pela lógica da execução das ações internas do agente ou iniciar um protocolo de interação. A classe abstrata InteractionProtocols define as várias maneiras como o agente deve interagir com outros agentes no sistema. Todo código relacionado com interação deve ser colocado na subclasse de InteractionProtocols. Essa 55 subclasse deve implementar o método processMsg(), e definir a implementação do tratamento de toda mensagem recebida por este agente. A classe concreta e final ProcessMessageThread é responsável por processar as mensagens recebidas pelo agente e executar o método processMsg() da subclasse de InteractionProtocols. A interface AgentMessage deve ser implementada pela classe que especifica o formato da mensagem. Por exemplo, essa classe pode especificar o formato FIPA ACL, KQML, etc. A interface AgentBlackBoardInfo deve ser implementada pela classe que especifica o formato das informações no espaço de tuplas do sistema. A classe concreta e final AgentCommunicationLayer implementa toda a PUC-Rio - Certificação Digital Nº 0115614/CA camada de comunicação do agente. Esta classe fornece uma infra-estrutura para o agente enviar mensagens síncronas ou implementar uma arquitetura de blackboard utilizando o espaço de tuplas distribuído. Essa classe foi implementada como uma camada sobre o software IBM TSpaces (http://www.almaden.ibm.com /cs/TSpaces/). O software IBM TSpaces é uma arquitetura reflexiva de espaços de tuplas em ambientes distribuídos, e fornece operações básicas no espaço para leitura, escrita, etc. Uma descrição resumida de cada método da classe AgentCommunicationLayer é apresentada abaixo: (i) addAgentBroadcastListener() – Método para incluir um agente na lista de broadcast; (ii) blockingReadBBInfo() – Esse método é utilizado para ler uma mensagem do espaço de tuplas. Se o agente executar esse método e a mensagem não estiver presente no espaço de tuplas, a execução do método é bloqueada até que essa mensagem esteja presente ou até um timeout expirar; (iii) blockingTakeBBInfo() - Esse método é utilizado para ler e remover uma mensagem do espaço de tuplas. Se o agente executar esse método e a mensagem não estiver presente no espaço de tuplas, a execução do método é bloqueada até que essa mensagem esteja presente ou até um timeout expirar; (iv) deleteAllBB() – Método utilizada para apagar todo o espaço de tuplas; (v) readBBInfo() – Método utilizado para ler uma mensagem do espaço de tuplas. Se a mensagem não estiver presente, o método retorna null; 56 (vi) removeAgentBroadcastListener() – Método que remove o agente da lista de broadcast; (vii) removeBBInfo() – Método para remover uma informação do espaço de tuplas. Se a mensagem não estiver presente, o método retorna null; (viii) scanBBInfo() – Método para fazer uma pesquisa nas mensagens presentes no espaço de tuplas; (ix) sendBBInfo() – Método para enviar uma mensagem para o espaço de tuplas; (x) sendBroadcast() – Método para enviar uma mensagem para todos os agentes cadastrados na lista de broadcast; (xi) sendMsg() – Método para enviar uma mensagem para um único PUC-Rio - Certificação Digital Nº 0115614/CA agente; (xii) stopCommunicationLayer() – Método para finalizar a camada de comunicação. O design de um framework orientado a objetos pode ser dividido em duas partes (Fontoura et al., 1998): (i) um subsistema kernel ou frozen spot com o código comum a todas as aplicações instanciadas; e (ii) um subsistema hot spot que define as diferentes características das aplicações instanciadas. Os hot spots do ASYNC são as classes Agent, InteractionProtocol, AgentMessage, AgentBlackboardInfo e AgentInterface. Os frozen spots do ASYNC são as classes AgentCommunicationLayer e ProcessMessageThread. 3.2.1.Como Instanciar uma Aplicação Baseada em Agentes com o Framework Orientado a Objetos do ASYNC A primeira fase do desenvolvimento de um sistema baseado em agentes é a construção do ambiente e seus recursos. O ambiente é implementado como uma classe principal do sistema para armazena todas as referencias para: (i) todos os agentes, e (ii) os recursos do sistema. A tabela 6 resume o processo de instanciação do framework orientado a objetos ASYNC. 57 Conceitos de Agentes Classes do ASYNC instanciadas O ambiente e os recursos (i) Classe Principal para o ambiente; (ii) Classes para os recursos. Agente (i) Uma classe concreta que herda de Agent, e implementa AgentInterface; (ii) Uma classe concreta que herda de InteractionProtocols. Ações internas do Agente Métodos incluídos na classe concreta de Agent. Protocolos de Interação Método incluídos na classe concreta PUC-Rio - Certificação Digital Nº 0115614/CA de InteractionProtocols. Formato das Mensagens (i) Classe concreta que implementa nos protocolos de interação AgentMessage, se a troca de mensagens é síncrona; (ii) Classe concreta que implementa AgentBlackBoardInfo, se a troca de mensagens é assíncrona. Tabela 6: Mapeamento dos Conceitos de Agentes para as Classes da Aplicação instanciada. Cada agente no sistema deve possuir duas classes concretas. A primeira classe a ser implementada deve herdar da classe Agent e implementar a interface AgentInterface. Essa classe concreta deve conter métodos que representam as ações internas dos agentes. Os métodos initialize(), run(), terminate(), e trace() devem ser implementados nesta classe concreta. Esse mesmo agente do sistema deve ter outra classe concreta. Essa classe deve herdar da classe InteractionProtocols, e deve conter métodos para implementar os protocolos de interação. O método processMsg() deve ser implementado para processar todas as mensagens recebidas pelo agente. A referência para o objeto AgentCommunicationLayer é utilizada para que o agente possa utilizar a camada de comunicação. 58 3.3.Instanciando o ASYNC para a Aplicação Bundles.com A figura 24 apresenta o diagrama de classes do agente Vendedor na aplicação Bundles.com instanciado com o ASYNC. As classes SellerAgent e SellerAgentIP possuem o código do agente, e esta seção apresenta os detalhes PUC-Rio - Certificação Digital Nº 0115614/CA desta implementação. Figura 24: A instanciação do Agente Vendedor na aplicação Bundles.com. As ações internas do Vendedor foram modeladas no diagrama de cenários do ANote da figura 25. Essas ações do agente não dependem da interação com outros agentes no sistema. As ações “Reprodução”, “Mutação”, “Verifica se tem Receita suficiente para sobreviver”, e “Verifica se atingiu meta de Receita” não dependem da interação com outros agentes. Conseqüentemente, os métodos reproduction(), mutation(), verifyRevenue(), e verifyGoal() da classe SellerAgent modelam as ações descritas acima. O código Java a seguir apresenta o mapeamento das abstrações em ANote para o framework ASYNC. 59 PUC-Rio - Certificação Digital Nº 0115614/CA Figura 25: Diagrama de cenário do Vendedor. 1. public class SellerAgent extends Agent implements AgentInterface { 2. 3. public SellerAgent(String _name, InteractionProtocols _iP) { 4. super(_name, _iP); 5. } 6. 7. public void initialize() { 8. ... 9. } 10. 11. public void terminate() { 12. ... 13. } 14. 15. public void trace(String msg, int level) { 16. ... 17. } 18. 19. public void run() { 20. SellerAgentIP sellerIP; 21. sellerIP = (SellerAgentIP)getInteractionProtocols(); 22. while(true) { 23. reproduction(); 24. mutation(); 25. sellerIP.sendProposalBuyer(); 26. waitForProposalResponse(); 27. verifyRevenue(); 28. verifyGoal(); 29. } 30. } 31. 32. public void reproduction() { 33. ... 34. } 35. 36. public void mutation() { 37. ... 38. } 39. 40. public void verifyRevenue() { 60 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. } ... } public void verifyGoal() { ... } public void waitForProposalResponse() { ... } Os protocolos de interação do Vendedor também são modelados pelo diagrama de cenários da figura 25. Os protocolos de interação definem como o agente deve se comunicar e interagir com outros agentes no sistema. As ações “Envia Proposta para Comprador sobre Oferta” e “Recebe Resposta da Proposta e PUC-Rio - Certificação Digital Nº 0115614/CA Receita” exigem Conseqüentemente, uma essas interação ações com devem outros ser agentes colocadas no sistema. nos métodos sendProposalBuyer() e receiveProposalResponse(AgentMessage msg). O método sendProposalBuyer() utiliza o método sendMsg() da camada de comunicação para enviar as mensagens para os agentes Compradores. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. public class SellerAgentIP extends InteractionProtocols { public void processMsg(AgentMessage msg) { receiveProposalResponse((FipaACLMessage)msg); } public void sendProposalBuyer() { FipaACLMessage msg = new FipaACLMessage(); getAgCommLayer().sendMsg("BuyerAgent",msg); } public void receiveProposalResponse(FipaACLMessage msg) { ... } } 3.4. ASYNC-D – A Ferramenta de Distribuição dos Agentes em CPUs Distintas de um Rede A ferramenta ASYNC-D auxilia o processo de execução dos agentes em um ambiente distribuído. A ferramenta possui dois agentes de software reativos chamados Diretor de Distribuição e Coordenador de Distribuição. Esses agentes são responsáveis por coordenar a execução dos outros agentes no sistema. A figura 26 apresenta os agentes da ferramenta ASYNC-D. 61 O agente Diretor da Distribuição é responsável por selecionar quais agentes devem ser executados em cada CPU. Após essa decisão, o Diretor envia uma mensagem para o Coordenador de Distribuição com a lista de agentes que devem ser executados. Conseqüentemente, toda CPU deve possuir um agente Coordenador de Distribuição rodando, e eles são responsáveis por executar e “matar” os agentes de sua responsabilidade. O Diretor pode enviar uma mensagem para os Coordenadores requisitando a “morte” de algum agente também. Essa ferramenta funciona apenas com agentes de software instanciados PUC-Rio - Certificação Digital Nº 0115614/CA pelo ASYNC. Figura 26: Os agentes do ASYNC-D. A console de configuração da figura 27 é utilizada para definir a decisão do Diretor de Distribuição. A console permite selecionar os agentes que devem ser executados por cada Coordenador. Essa configuração é utilizada pelo Diretor para 62 enviar as mensagens para o Coordenador de Distribuição com a lista de agentes PUC-Rio - Certificação Digital Nº 0115614/CA que devem ser executados. Figura 27: A Console de Configuração do ASYNC-D. 3.5.Aplicação Babilônia Esta seção apresenta a aplicação desenvolvida pela aluna de mestrado Paula Clark em sua dissertação (Ribeiro, 2001). A modelagem da aplicação foi feita com Gaia (Wooldridge et al., 2000; Zambonelli et al, 2003), e na dissertação foi proposta um mapeamento entre os modelos de Gaia e o framework ASYNC. A aplicação Babilônia é um mercado virtual para compra e venda de bens. Os agentes no sistema também implementam uma negociação automática entre compradores e vendedores. Além disso, o sistema implementa um mecanismo de certificação dos vendedores, compradores e bens para garantir a segurança das transações. O sistema multi-agente foi modelado utilizando uma arquitetura organizacional de Gaia com os respectivos papeis de agentes: Comprador, Vendedor, e Certificador. A comprador é responsável por cadastrar as características dos bens desejados, tais como marca e modelo. Todo bem ofertado por um Vendedor que casar com esse cadastro é enviado para o Comprador. O Comprador então decide se começa ou não o processo de negociação. Na negociação alguns parâmetros são utilizados por este Comprador: preço inicial de compra, preço máximo pago pelo bem, o incremento de preço utilizado no processo de negociação. 63 O Vendedor também possui alguns parâmetros para o processo de negociação: preço inicial da oferta, preço mínimo que a oferta vale, e o decremento de preço utilizado no processo de negociação. O Vendedor deve indagar o agente Certificador se o processo de negociação necessita de alguma certificação. O Certificador é responsável por certificar os Vendedores, os Compradores e os bens envolvidos no processo de negociação. Esse agente faz uma busca em vários bancos de dados e informações de proteção ao crédito fora dos sistema para garantir a segurança do processo. O processo de negociação entre os agentes é totalmente automático, e para implementar o sistema foi utilizado o framework ASYNC. A figura 28 apresenta PUC-Rio - Certificação Digital Nº 0115614/CA as classes do agente Comprador. A classe AgentBuyer especializa a classe Agent e implementa a interface AgentInterface, e a classe AgentBuyerIP herda da classe InteractionProtocols. Esse estudo de caso permitiu um grande re-uso de código, uma diminuição no tempo de desenvolvimento menor, e uma menor complexidade para implementar agentes de software. Figura 28: As classes do Agente Comprador. 64 4 MAS-School - Um Método para Incluir Aprendizado em Sistemas Multi-Agente A tecnologia de agentes é utilizada em muitos simuladores e sistemas inteligentes para auxiliar as pessoas em várias tarefas complexas. Aplicações para o Comércio Eletrônico, Extração de Informação, e Business Intelligence também estão utilizando esta tecnologia para resolver problemas complexos de forma assíncrona e em ambientes distribuídos. Neste contexto, os algoritmos de Machine Learning ou Aprendizado de Máquina são cruciais para fornecer estratégias PUC-Rio - Certificação Digital Nº 0115614/CA conhecidas para construir agentes em ambiente abertos e heterogêneos como a Internet. Porém, incluir essas técnicas de inteligência em sistemas multi-agente de larga escala não é uma tarefa simples. O design e implementação de tais sistemas inteligentes sempre apresentam questões semelhantes, dentre as quais: (viii) Como avaliar o objetivo do sistema como um todo? (ix) Como definir e avaliar o objetivo individual de cada agente? (x) Como modelar o conhecimento de cada agente? (xi) Como projetar o mecanismo de aquisição de conhecimento para cada agente? (xii) Como combinar múltiplas técnicas de aprendizado e distribuir essas técnicas para cada agente no sistema? (xiii) Como associar abstrações de agentes com abstrações de machine learning? (xiv) Como especificar abstrações de machine learning nas primeiras fases de design e permitir uma transição para a fase de implementação? Infelizmente, os engenheiros de software ainda utilizam a sua experiência e intuição para resolver as questões acima. Muita pesquisa tem sido feita para criar metodologias e frameworks de implementação para sistemas multi-agente. Porém, nenhum desses trabalhos apresenta um guia para incluir técnicas de aprendizado já na fase inicial de design. Os frameworks (Howden et al., 2001; Telecom Itália- 65 Jade, 2003) de implementação disponibilizam APIs para desenvolver sistemas multi-agente, mas não orientam a estruturação do design do aprendizado de uma maneira sistemática. Além disso, muitas metodologias (Zambonelli et al., 2003; Deloach, 1999; Bresciani et al., 2004; Padgham et al., 2002) de desenvolvimento orientadas a agentes são focados em um nível muito alto de abstração, e não indicam como tratar aprendizado desde a fase de design até a implementação. Este capítulo apresenta o método MAS-School (Sardinha et al., 2004b; Sardinha et al., 2005b) para incluir técnicas de machine learning desde as primeiras fases de design. Esse método apresenta várias orientações de como incluir aprendizado na fase de design e implementação. O método apresenta no final uma estratégia incremental de desenvolvimento para permitir a avaliação das PUC-Rio - Certificação Digital Nº 0115614/CA técnicas de machine learning. 4.1. Incluindo Aprendizado em Sistemas Multi-Agente Mitchell (Mitchell, 1997) define machine learning como : “Diz-se que um programa de computador aprende a partir de uma experiência E em relação a uma classe de tarefas T e medida de performance P, se a sua performance nas tarefas T, medida por P, melhora com a experiência E”. Conseqüentemente, as técnicas de aprendizado são normalmente utilizadas para melhorar a performance de um sistema. O principal objetivo do método aqui proposto é incluir disciplinadamente as técnicas de machine learning em sistemas multi-agente. Esse método também permite, em sua fase de implementação, a integração de diferentes algoritmos de machine learning e a avaliação da performance do sistema. O método possui quatro fases distintas: (i) Objetivo Sistêmico & Seleção da Medida de Performance, onde um objetivo e uma medida de performance são selecionados para o sistema; (ii) Seleção do Agente & Definição do Objetivo do Aprendizado no Agente, onde agentes são selecionados, e objetivos são atribuídos para o algoritmo de aprendizado; 66 (iii) Design do Aprendizado no Agente, onde o design de código é definido; e (iv) Implementação Incremental & Avaliação de Performance, onde uma implementação incremental é proposta com treinamento, teste e avaliação. A figura 29 apresenta as quatro fases do método. A seguir apresentamos em PUC-Rio - Certificação Digital Nº 0115614/CA detalhe cada fase do método. Figura 29: O método para incluir Aprendizado em um Sistema Multi-Agente. 4.1.1. Objetivo Sistêmico & Seleção da Medida de Performance O Engenheiro de Software deve definir nesta fase dois elementos centrais que estão relacionados com aprendizado: (i) Objetivo Sistêmico, SG, e (ii) Medida de Performance Sistêmica, SP, que mede o ganho de performance do sistema. O Objetivo Sistêmico é o objetivo de mais alto nível do sistema, e é definido nas 67 primeiras fases de modelagem de um sistema. A Medida de Performance Sistêmica é o mecanismo para avaliar se o objetivo está sendo atingido. Conseqüentemente, a Medida de Performance deriva diretamente do Objetivo Sistêmico. Por exemplo, na técnica orientada a objetivos onde se utiliza o processo recursivo de decomposição de um objetivo do problema principal em vários objetivos de subproblemas, o Objetivo Sistêmico, SG, é igual ao Objetivo do Problema Principal conforme ilustra a figura 30. A Medida de Performance Sistêmica, SP, é normalmente uma variável numérica que permite avaliar se o objetivo sistêmico está sendo atingido. Por exemplo, se o sistema multi-agente é responsável por gerenciar uma fábrica, a Medida de Performance Sistêmica, SP, PUC-Rio - Certificação Digital Nº 0115614/CA pode ser o lucro gerado pela fábrica. Figura 30: A decomposição dos objetivos relacionados com o comércio de bens. A abstração de objetivos é central neste método, pois permite a definição de uma medida de performance para cada agente na seção 4.1.2, e a definição do design das técnicas de machine learning na seção 4.1.3. Conseqüentemente, o processo de decomposição dos objetivos em sub-objetivos é fundamental para este processo. É importante frisar que essa modelagem de hierarquia de objetivos é uma atividade comum nas metodologias orientadas a agentes. Entretanto, o principal objetivo é detectar e modelar objetivos específicos de aprendizado. Os objetivos funcionam como uma abstração para unificar conceitos de aprendizado com conceitos básicos de sistemas multi-agente. No processo de modelagem, os tipos de agentes são criados para conduzir os objetivos da figura 30. A tabela 7 apresenta um exemplo de mapeamento entre esses objetivos e tipos de agentes. Na próxima fase do método, alguns desses agentes são selecionados para utilizar técnicas de machine learning. 68 Objetivo Agente Objetivo do Subproblema 1 Agente I Objetivo do Subproblema 2 Agente II Tabela 7: A mapeamento entre subproblemas e tipos de agentes. 4.1.2. Seleção do Agente & Definição do Objetivo do Aprendizado no Agente Essa fase seleciona os agentes definidos na tabela 7 que possuem planos com alta probabilidade de melhorar a Medida de Performance Sistêmica, SP. PUC-Rio - Certificação Digital Nº 0115614/CA Conseqüentemente, esses planos precisam utilizar técnicas de machine learning para melhorar a performance do sistema. O objetivo é estabelecer um Problema de Aprendizado do Agente bem definido. Conseqüentemente, três características são definidas: (i) Objetivo do Aprendizado, G; (ii) Medida de Performance, P, que mede a melhora da performance no agente individualmente; e, (iii) uma Experiência de Treinamento, E, que define o processo de aquisição do conhecimento no agente com o aprendizado. Por exemplo, o Agente I da tabela 7 pode ser um preditor de preços de leilões de hotéis, e quanto melhor for a sua predição melhor será o desempenho do sistema como um todo. Assim, esse agente deve ser selecionado para utilizar uma técnica de machine learning. O Problema de Aprendizado do Agente para o Preditor (Agente I) pode ser definido por: (i) G: Prever os preços de leilões de hotéis; (ii) P: O erro entre o preço previsto e o preço real; e (iii) E: Utilizar um histórico de preços dos leilões. 4.1.3. Design do Aprendizado no Agente Um bom design do agente permite a inclusão ou reuso de várias técnicas de machine learning e uma boa manutenção de código. O processo de maximizar a performance do agente, normalmente, precisa de vários algoritmos diferentes para 69 que se possa escolher o de melhor performance. A figura 31 apresenta o digrama de Classes (UML) do Preditor. Esse design utiliza um padrão de projeto orientado a objetos para incluir machine learning em agentes de software (Sardinha et al., 2004d). O design permite o teste e avaliação de vários algoritmos diferentes. O PUC-Rio - Certificação Digital Nº 0115614/CA padrão de projeto será apresentado em detalhes na seção 4.2. Figura 31: O diagrama de Classes (UML) do Preditor de Preços. As classes PricePredictorAgent e PricePredictorAgentIP possuem o código dos serviços básicos do agent, tais como: tratamento de eventos, tratamento de mensagens, etc. 70 A classe KnowledgeRepresentattion é um classe abstrata da estrutura de dados do conhecimento do agente. O monitoramento da performance do agente é codificado como uma classe abstrata chamada PerformanceMeasure. O algoritmo de machine learning é uma classe abstrata chamada LearningAlgorithm. O gerador de exemplos definido pela “experiência de treinamento” é modelado como uma classe abstrata chamada TrainingExperience. As classes concretas ExponentialSmoothing, ErrorEvaluation, LMSLearning, e BuildTrainingExamples são classes que respectivamente implementam as classes abstratas KnowledgeRepresentation, PerformanceMeasure, LearningAlgorithm, e TrainingExperience. Vários eventos podem disparar o processo de aprendizado (Mitchell, 1997), PUC-Rio - Certificação Digital Nº 0115614/CA tais como: execução de uma ação interna do agente, uma exceção levantada, a troca de mensagens entre agentes, e eventos gerados pelo ambiente externo. As classes concretas PricePredictorAgent e PricePredictorAgentIP utilizam a classe LearningProperty para disparar esse processo de aprendizado. 4.1.4. Implementação Incremental & Avaliação de Performance As decisões mais importantes na fase de implementação de uma técnica de machine learning, nos agentes selecionados na seção 4.1.2, são: (i) a representação do conhecimento; (ii) o algoritmo de aprendizado; (iii) o conjunto de treinamento utilizado pelo algoritmo de aprendizado. A primeira decisão determina exatamente o tipo de conhecimento aprendido. Esse conhecimento pode ser modelado como uma função F que recebe um estado S e determina uma ação A, ou F: S A. Porém, aprender esse conhecimento é muitas vezes uma tarefa muito difícil. Normalmente, a complexidade desse conhecimento é reduzida para aprender apenas uma representação aproximada do conhecimento, a aproximação da função F. Essa representação do conhecimento aproximada pode ser uma função linear com pesos, uma coleção de regras, uma rede neural, ou uma função polinomial quadrática. Essa decisão tem prós e contras, pois uma representação do conhecimento aproximado “expressiva”, muito próxima da função F, requer um conjunto de treinamento grande na fase de treinamento. 71 O conhecimento do Preditor de Preços foi modelado como uma função chamada NextPrice. Essa função recebe preços correntes A e gera uma preço futuro N (NextPrice: A N ). A representação aproximada da função NextPrice utiliza uma função para calcular o preço futuro: PredictedPrice(n+1) = *Price(n) + (1 - )*PredictedPrice(n), onde é um numero entre 0 e 1; e n é o n-ésimo instante. Esta formula é codificada na classe ExponentialSmoothing da figura 31. O algoritmo de aprendizado Least Mean Squares (LMS) é utilizado para adaptar o : (n) = (n-1) + ß*(Price(n-1)-PredictedPrice(n-1)), onde ß é a taxa de aprendizado. Esse algoritmo é codificado na classe LMSLearning da figura 31. Um conjunto de treinamento é preciso para que o agente aprenda, e a seleção de um processo para criar esse conjunto é uma decisão muito importante. PUC-Rio - Certificação Digital Nº 0115614/CA O conjunto de treinamento pode ser obtido através de uma experiência direta ou indireta. Na experiência direta, o engenheiro deve cuidadosamente selecionar o melhor conjunto de treinamento que leve ao bom desempenho do conhecimento aproximado. Na experiência indireta, o conhecimento aproximado deve sugerir ações que levem a estados conhecidos que melhorem a performance do agente. Porém, esse conhecimento aproximado deve também sugerir estados desconhecidos para que novas experiências sejam adquiridas. No longo prazo, a exploração é muito importante para agentes que utilizam a experiência indireta. A classe BuildTrainingExamples da figura 31 codifica a consulta ao banco de dados com preços de leilões que o agente já participou. A classe ErrorEvaluation da figura 31 implementa a avaliação da performance definida na seção 4.1.2. 4.1.4.1. Desenvolvimento Incremental, Teste e Integração de Agentes Inteligentes Ao invés de desenvolver o sistema multi-agente com todos os agentes inteligentes em uma única fase, esta seção apresenta uma proposta incremental para facilitar a integração e análise da performance dos agentes de software na fase de implementação. A primeira versão do sistema multi-agente deve possuir apenas de agentes simples ou reativos (Ferber, 1999) sem nenhuma técnica de machine learning implementada. Essa primeira versão é importante para testar a comunicação entre os agentes e a interação com o ambiente externo. A figura 32 apresenta o processo de integração dos agentes selecionados na seção 4.1.2. O 72 processo deve ser usado para melhorar a Medida de Performance Sistêmica definida na seção 4.1.1. O desenvolvimento incremental começa com a remoção do código de um dos agentes selecionados na seção 4.1.2. O código do agente deve ser implementado usando o design estabelecido na seção 4.1.3, e a fase de treinamento deve vir logo em seguida, especialmente se foi escolhido a experiência direta para o processo de criação do conjunto de treinamento. Antes de reintegrar o agente no sistema, um teste individual é feito para testar a melhora de performance usando a Medida de Performance definida na seção 4.1.2. Este teste deve ser elaborado pelo engenheiro de sistema, e normalmente são desenvolvidos pequenos módulos de software para gerar casos de testes. Erros de PUC-Rio - Certificação Digital Nº 0115614/CA codificação dos agentes “inteligentes” são encontrados nesta etapa. Figura 32: O processo incremental de desenvolvimento. A reintegração do agente no sistema é feita depois que os casos de testes confirmam que o algoritmo de machine learning está funcionando. Esses casos de testes não são capazes de garantir a melhora na Medida de Performance Sistêmica definida na seção 4.1.1. Conseqüentemente, um teste de performance deve ser feito com o sistema multi-agente e novo agente inteligente. É preciso ter um simulador do ambiente para esta fase, e uma nova versão é dada para o sistema caso a Medida de Performance Sistêmica indicar que houve uma melhora na performance. Quando essa melhora de performance não é obtida, o engenheiro do sistema deve tomar uma dessas duas opções: (i) Modificar o código ou o conjunto 73 de treinamento e efetuar todos os testes novamente, ou (ii) Remodelar o design do agente conforme a figura 29 da seção 4.1. Às vezes, os testes demonstram um ganho de performance no sistema, mas o novo agente inteligente começa a utilizar muitos recursos computacionais do sistema tais como CPU e memória. O sistema começa a apresentar lentidão no processamento, e em muitos casos pode atrasar processos que necessitam de agilidade. Recomenda-se a distribuição desse novo agente em uma outra CPU da rede. Após confirmar a melhora na Medida de Performance Sistêmica, uma nova versão é atribuída ao sistema. A remoção do código de outro agente selecionado PUC-Rio - Certificação Digital Nº 0115614/CA na seção 4.1.2 é feita para que se possa repetir o processo de testes e avaliação. 4.2. Agent Learning Pattern – Um Design para Incluir Aprendizado em Agentes Os conceitos de aprendizado devem ser modelados já na fase de design de um agente de software. Em sistemas complexos e abertos, agentes precisam de aprendizado para tomar decisões e se adaptar a mudanças para poder atingir os seus objetivos. Esta seção apresenta um design orientado a objetos utilizando a linguagem padrão de design patterns para guiar a inclusão de algoritmos de machine learning. 4.2.1.Intenção O principal objetivo do Agent Learning Pattern é incluir algoritmos de machine learning em agentes com um design orientado a objetos. O design separa conceitos importantes de aprendizado em agentes, tais como: representação do conhecimento, algoritmo de machine learning, avaliador de performance, e gerador de exemplos para o aprendizado. 4.2.2.Contexto Em ambientes complexos e abertos como a Internet, o sistema baseado em agentes deve ser capaz de se adaptar a situações desconhecidas e atingir o objetivo sistêmico. Técnicas de aprendizado são cruciais para sistemas multi-agente em 74 tais ambientes, pois são algoritmos que fornecem estratégias conhecidas para a implementação de agentes adaptáveis. Mitchell (Mitchell, 1997) define machine learning como: “Diz-se que um programa de computador aprende a partir de uma experiência E em relação a uma classe de tarefas T e medida de performance P, se a sua performance nas tarefas T, medido por P, melhora com a experiência E”. Conseqüentemente, esses são os principais aspectos de design de aprendizado em agentes: (i) uma representação do conhecimento adquirido pelo processo de aprendizado; (ii) o algoritmo de aprendizado; (iii) um gerador de exemplos para criar a experiência para o aprendizado; e (iv) o avaliador de performance para medir o processo de PUC-Rio - Certificação Digital Nº 0115614/CA aprendizado. 4.2.3.Problema O design de machine learning em arquiteturas orientada a objetos não é direto quando se precisa de um código reutilizável e de fácil manutenção. Como projetar um agente que utiliza vários algoritmos de machine learning? Como projetar diferentes geradores de exemplos para a técnica de aprendizado? Como projetar um monitor para avaliar a performance do processo de aprendizado? 4.2.4.Forças • O design deve poder modelar qualquer técnica de machine learning • Os aspectos de design de aprendizado devem ser mapeados com simplicidade para o design orientado a objetos • O design deve melhorar o reuso e manutenção do código • Algumas técnicas de aprendizado podem precisar em seu design de classes complementares • Agentes de software devem ser capazes de utilizar o conhecimento adquirido para se adaptar as constantes mudanças em ambientes complexos e abertos. 4.2.5.Solução Agentes de Software implementados em frameworks orientados a objetos (Telecom Italia-Jade, 2003; Sardinha et al., 2003a) normalmente utilizam herança 75 para implementar a abstração de agentes. A classe concreta Agent é um design OO típico de agente, e deve herdar de uma superclasse do framework orientado a objetos. Essa classe concreta deve implementar as funções básicas de um agente, tais como: coletar informação do ambiente, tratar eventos, processar mensagens, etc. A classe chamada KnowledgeRepresentation implementa a estrutura de dados do conhecimento do agente. A Figura 33 ilustra um diagrama de classes de um PUC-Rio - Certificação Digital Nº 0115614/CA agente típico. Figura 33: Um diagrama de Classes de um típico Agente. A figura 34 mostra como incluir um algoritmo de machine learning, um monitor de performance, e um gerador de exemplos. O monitor de performance é codificado em uma classe chamada PerformanceMeasure, e é utilizado no processo de aprendizado para garantir que o agente está atingindo o seu objetivo de treinamento. O algoritmo de aprendizado é implementado na classe LearningAlgorithm. Essa classe é responsável por modificar a classe KnowledgeRepresentation após o processo de aprendizado. O gerador de exemplos para o TrainingExperience. algoritmo de aprendizado é codificado na classe 76 PUC-Rio - Certificação Digital Nº 0115614/CA 4.2.6.Estrutura Figura 34: O diagrama de Classes do Agent Learning Pattern. O design pattern possui quarto participantes principais e dois participantes clientes: Participantes Principais: LearningProperty Define a classe que guarda as referencias para todas as outras classes relacionadas com o aprendizado. PerformanceMeasure O algoritmo que implementa regras para avaliar a performance do aprendizado. Um gerador de experimentos pode ser implementado nesta classe. LearningAlgorithm O algoritmo de machine learning. TrainingExperience O algoritmo que implementa o gerador de exemplos para o algoritmo de aprendizado 77 Participantes Clientes: Agent Define a classe que implementa os serviços básicos de um agente, tais como: coletar informação do ambiente, tratar de eventos, processar mensagens, etc. KnowledgeRepresentation A representação do conhecimento do agente. 4.2.7.Exemplo O agente Preditor do exemplo da seção 4.1.2 utiliza o Agent Learning Pattern para incluir a técnica de predição de preços. As técnicas Media Móvel PUC-Rio - Certificação Digital Nº 0115614/CA (Bowerman et al, 1993), Exponencial Suavizada (Bowerman et al, 1993), e PLS (Milidiu et al., 2005) foram implementadas como subclasses de LearningAlgorithm. A vantagem desse design é poder reutilizar todos as outras classes mesmo mudando o algoritmo de aprendizado. O teste de vários algoritmos de aprendizado é um processo comum para poder escolher a técnica com a melhor performance. 4.2.8.Dinâmica A figura 35 apresenta a estrutura básica da dinâmica do Agent Learning Pattern. Vários eventos podem disparar o processo de aprendizado (Mitchell, 1997), incluindo a execução interna de uma ação, um levantamento de uma exceção, a troca de mensagens, ou através de informações coletadas no ambiente. A classe concreta Agent deve acessar o LearningProperty sempre que o agente quiser disparar o processo de aprendizado. Por exemplo, o agente Preditor tem o principal objetivo de prever preços futuros baseado na seqüência de preços passadas. O método buildTrainingExperience() implementa o código que gera essa seqüência de preços. Estes preços são então utilizados como exemplos de treinamento para o algoritmo de aprendizado. O algoritmo de machine learning é codificado no método train(), mas é chamado pelo método execute(). Esse mesmo método também executa o método calculatePerformance() que é responsável por calcular 78 o erro de predição após o processo de aprendizado. Se o erro da predição for aceitável, o método adaptKnowledge() altera os atributos do conhecimento do PUC-Rio - Certificação Digital Nº 0115614/CA agente. Figura 35: O diagrama de Seqüência do Agent Learning Pattern. 4.2.9.Implementação A figura 36 apresenta o diagrama de classes do Preditor utilizando o ASYNC e o Agent Learning Pattern. As classes PricePredictorAgent e PricePredictorAgentIP são classes especializada do framework ASYNC, e implementam os serviços básicos do agente. Figura 36: O diagrama de Classes do agente Preditor. 79 A classe ExponentialSmoothing implementa o conhecimento do agente, e por isso tem o KnowledgeRepresentation como superclasse. O algoritmo de treinamento é codificado na classe LMSLearning e a sua superclasse é o LearningAlgorithm. O conjunto de treinamento para o algoritmo LMS (Mitchell, 1997) é gerado pela classe BuildTrainingExamples. A classe TrainingExperience é superclasse de BuildTrainingExamples. A classe ErrorEvaluation, que herda de PerformanceMeasure, implementa a avaliação de performance do algoritmo de aprendizado. Abaixo apresentamos alguns trechos de código Java para facilitar o entendimento do design pattern. A classe LearningProperty é referenciado pela classe PricePredictorAgent para acessar todos os componentes de aprendizado PUC-Rio - Certificação Digital Nº 0115614/CA neste design. O método startTrainingProcess() (linha 9) executa o processo de geração do conjunto de treinamento (linha 10) e o algoritmo de machine learning (linha 11). A classe armazena em seus atributos as referencias para todas as outras classes relacionadas com o processo de aprendizado (linhas 3 até 6). 1. public class LearningProperty { 2. private String task; 3. private TrainingExperience trainingExperience; 4. private LearningAlgorithm learningAlgorithm; 5. private KnowledgeRepresentation knowledgeRepresentation; 6. private PerformanceMeasure performanceMeasure; 7. // Getters and Setters 8. … 9. public void startTrainingProcess(){ 10. trainingExperience.buildTrainingExperience(); 11. learningAlgorithm.execute(trainingExperience); 12. } 13. } O conhecimento desse agente foi modelado com uma função que implementa a técnica Exponencial Suavizada (Bowerman et al., 1993). A classe ExponentialSmoothing é uma especialização de KnowledgeRepresentation, e implementa a função abaixo no método predictNextPrice() (linha 5): PredictedAskPrice(n) = *AskPrice(n-1) + (1 - )*PredictedAskPrice(n-1) onde é um numero entre 0 e 1, e, n é o n-ésimo jogo. 80 1. public class ExponentialSmoothing extends KnowledgeRepresentation { 2. private double lastPrediction; 3. private double alpha; 4. private double price; 5. public double predictNextPrice(){ 6. double nextPrice = price*alpha + (1-alpha)*lastPrediction; 7. lastPrediction = nextPrice; 8. return(nextPrice); 9. } 10. public void updateParameter(double alpha){ 11. this.alpha=alpha; 12. } 13. public void updatePrice(double price){ 14. this.price=price; 16. } 17. } A classe BuildTrainingExamples é uma especialização de PUC-Rio - Certificação Digital Nº 0115614/CA TrainingExperience, e implementa o processo de geração do conjunto de treinamento. O método buildTrainingExperience() (linha 3) implementa uma consulta no banco de dado com os preços de partidas antigas. Essa seqüência de preços é armazenada no vetor askPriceHstory (linha 2). 1. public class BuildTrainingExamples extends TrainingExperience { 2. public Vector askPriceHistory; 3. public void buildTrainingExperience() { 4. // JDBC code 5. … 6. } 7. } O agente Preditor utiliza o algoritmo Least Mean Squares (LMS) (Mitchell, 1997) para adaptar o valor de alfa ( ) na classe ExponentialSmoothing. A classe que implementa esse algoritmo é o LMSLearningAlgorithm, e possui o LearningAlgorithm como superclasse. O método train() (linha 11) codifica o algoritmo LMS. 1. public class LMSLearning extends LearningAlgorithm { 2. private BuildTrainingExamples bte; 3. private ExponentialSmoothing es; 4. private double alpha; 5. private double lastAlpha; 6. private double beta; 7. private double predictedPrice; 8. private double lastAskPrice; 9. es.updateParameter(20); 10. alpha=20; 11. public void train() { 12. for(int i=0;i<bte.askPriceHistory.size();i++){ 13. lastAskPrice= 14. ((Double)bte.askPriceHistory.elementAt(i)).doubleValue(); 81 15. 16. 17. 18. 19. } 20. } A es.updatePrice(lastAskPrice); predictedPrice = es.predictNextPrice(); lastAlpha=alpha; alpha=lastAplha+(beta*(lastAskPrice-predictedPrice)); classe ErrorEvaluation é uma especialização da classe PerformanceMeasure, e a classe LeaningProperty utiliza esta classe para calcular o erro entre o preço previsto e o preço realizado. O método calculateError() (linha PUC-Rio - Certificação Digital Nº 0115614/CA 5) implementa esse cálculo. 1. public class ErrorEvaluation extends PerformanceMeasure { 2. private double predictedPrice; 3. private double askPrice; 4. private double error; 5. public void calculateError() { 6. error = Math.abs(predictedPrice-askPrice)/askPrice; 7. } 8. … 9. } 4.2.10.Conseqüências Generalidade e Uniformidade. O Learning design pattern fornece uma solução uniforme e geral para qualquer técnica de machine learning. Reuso. O padrão apresenta um design modular para incluir aprendizado em agentes de software que pode ser reutilizado e refinado para diferentes contextos e aplicações. Uma melhor Separação de Concerns. O padrão é totalmente separado de outros concerns de agentes, tais como interação e autonomia. Implementação Direta. O padrão implementa abstrações de aprendizado diretamente para classes orientados a objetos. 4.2.11.Usos Conhecidos Um design para incluir algoritmos de machine learning é apresentado no capítulo 1 (seção 1.2.5) do livro Machine Learning (Mitchell, 1997). Quatro módulos são apresentados nesse design: (i) Sistema de Performance – Módulo para resolver uma dada tarefa de performance. Esse módulo recebe a instancia de 82 um novo problema como entrada e produz um trace da solução; (ii) O Crítico – Esse módulo recebe como entrada um histórico ou trace da solução e gera exemplos de treinamento; (iii) O Generalizador – Esse módulo recebe como entrada exemplos de treinamento e produz uma hipótese; (iv) Gerador de Experimentos – Esse módulo recebe como entrada uma hipótese corrente e gera novos problemas para o Sistema de Performance explorar. No design do ASYNC Agent Learning Pattern, o módulo O Crítico é codificado na classe TrainingExperience. O módulo O Generalizador é codificado na classe LearningAlgorithm, e este módulo é responsável por armazenar a hipótese corrente na Experimentos classe e KnowledgeRepresentation. Sistema de Performance O são módulo Gerador codificados na de classe PUC-Rio - Certificação Digital Nº 0115614/CA PerformanceMeasure. O Agent Learning Pattern foi utilizado em cinco implementações: (i) A aplicação Bundles.com (Sardinha, 2001); (b) A aplicação Learn Agent Player (Sardinha et al., 2003b); (c) A aplicação LearnAgents (Sardinha et al., 2004c; Sardinha et al., 2005a); (d) Um sistema multi-agente para gerenciar submissões de artigos e o processo de seleção em workshops e conferências (Garcia, 2004a); e, A aplicação LearnAgentsSCM do capítulo 4. 4.2.12.Padrões Relacionados Learning Aspect. (Garcia et al., 2004b) Uma mesma versão do Learning Pattern pode ser implementada como um aspecto (Kiczales et al., 1997) e melhorar a separação de concerns (Garcia, 2004). Um aspecto pode substituir a classe LearningProperty, conectar pontos de execução (eventos) em diferentes classes do agente, e identificar quando o processo de aprendizado deve ser acionado. Algumas vantagens adicionais podem ser encontradas: (i) Transparência – O uso de aspectos torna o código mais elegante e poderoso para incluir aprendizado em agentes de software de uma forma mais transparente (Garcia et al., 2004b); A descrição de que classes precisam ser alteradas pelo aprendizado está presente no aspecto e as classes monitoradas não precisam ser modificadas; (ii) Facilidade de evolução – Conforme o sistema multi-agente evolui, novas classes de agentes precisam ser monitoradas e alteradas pelo processo de 83 aprendizado; Os programadores do sistema precisam apenas adicionar novos PUC-Rio - Certificação Digital Nº 0115614/CA pointcuts ao aspecto para implementar novas funcionalidades. 84 5 A Aplicação LearnAgents Este capítulo apresenta um sistema multi-agente para um complexo cenário de procurement, onde os agentes compram e vendem bens em leilões simultâneos para montar pacotes de viagens para seus clientes. O sistema é utilizado em ambientes competitivos onde os participantes competem por um número limitado de bens. O LearnAgents (Sardinha et al., 2004c; Sardinha et al., 2005a) é um sistema PUC-Rio - Certificação Digital Nº 0115614/CA multi-agente para o comércio automatizado em mercados eletrônicos com leilões simultâneos e assíncronos. O sistema é utilizado em ambientes competitivos onde os participantes competem por um número limitado de bens. A sua arquitetura define agentes que resolvem subproblemas do comércio eletrônico de bens, e apresenta uma técnica para combinar todas essas soluções. Os subproblemas típicos são predição de preços, planejamento de lances, alocação de bens, negociação, entre outros. O LearnAgents utilizou o ambiente do Trading Agent Competition (TAC) para testar o sistema desenvolvido, pois esse ambiente simula um ambiente competitivo e permite mensurar a performance do sistema contra um benchmark internacional. O Trading Agent Competition é uma competição anual para incentivar a pesquisa e o desenvolvimento de sistemas para comércio automatizado em mercados eletrônicos. O TAC está em sua quinta edição e atrai trabalhos das principais instituições de pesquisa americanas, européias, e asiáticas, tais como as universidades de Harvard, Cornell, Brown, e Michigan. O TAC Classic (Wellman et al., 2001) é uma competição onde os participantes são donos de uma agência de viagem, e operam em um cenário complexo de procurement, ou compra de bens, em leilões simultâneos. Os participantes são agentes de software, e na competição não pode haver intervenção humana em hipótese alguma. 85 5.1.O TAC Classic Os competidores no TAC Classic operam dentro de um mercado varejista. Todos os agentes compram e vendem bens em leilões simultâneos para montar pacotes de viagens para seus clientes. Esses bens podem ser passagens aéreas, hospedagens em hotéis, e ingressos para museus, parques, ou luta livre. No inicio de cada partida, cada agente recebe uma carteira de oito clientes com as suas respectivas preferências. A pontuação de cada agente é calculada pela diferença da utilidade dos pacotes montados e os custos dos bens adquiridos nos leilões, PUC-Rio - Certificação Digital Nº 0115614/CA refletindo o lucro total obtido pelo agente. Figura 37: Ilustração do TAC Classic. A figura 37 apresenta o ambiente do TAC Classic. Cada partida permite que oito agentes negociem bens para seus clientes. Os agentes devem atender as preferências de oito clientes, e os bens são comprados em vinte e oito leilões simultâneos. As interdependências são claras nesse jogo, pois um cliente só pode viajar se tiver uma passagem de ida e outra de volta. Além disso, cada cliente precisa de diárias num hotel durante a sua estadia. 5.2. Edições Anteriores do TAC A primeira versão do ambiente do jogo utilizado no TAC foi projetada em 2000 por um grupo do Laboratório de Inteligência Artificial da Universidade de Michigan (Wellman et al., 2001). As versões dos anos seguintes passaram por 86 mudanças significativas para que o ambiente simulasse um mercado competitivo, até que em 2003, o ambiente do TAC foi re-projetado pelo Laboratório de Sistemas Inteligentes no Instituto Sueco de Ciência da Computação (SICS) e poucas mudanças foram feitas desde então. A primeira edição do TAC foi sediada na cidade de Boston, Massachusetts, EUA, em Julho de 2000 dentro da IV International Conference on Multiagent System (ICMAS-00). Devido às regras, a estratégia predominante nos agentes esperava comprar os bens no final da partida e utilizava lances altos com valores iguais ao valor marginal do bem. Por esta razão, uma preocupação central dos agentes que participaram nesta competição estava na resolução do problema de alocação dos bens adquiridos de acordo com as preferências dos clientes. Este PUC-Rio - Certificação Digital Nº 0115614/CA problema de otimização é NP-Completo (Greenwald, 2003), e foi incorporado às funcionalidades do TAC no segundo ano. A tabela 8 resume os resultados obtidos da TAC’00. A pontuação é uma média dos resultados das várias partidas na rodada final. A estratégia utilizada pelo o ATTac (Stone et al., 2001; Strone et al., 2002), vencedor desta edição, é baseada em um modelo de programação inteira. Posição 1 2 3 4 5 6 7 8 Agente ATTac RoxyBot aster umbctac1 ALTA m_rajatish RiskPro T1 Pontuação Média 3398.26 3283.24 3068.34 3050.99 2198.01 1872.71 1569.91 1167.40 Tabela 8: Resultado do TAC de 2000. A segunda versão do TAC, em outubro de 2001, teve a sua realização dentro da Third ACM Conference on Electronic Commerce (EC’01), em Tampa, Flórida. As regras foram modificadas para que os agentes pudessem se beneficiar da compra de bens no início do jogo. A tabela 9 apresenta o resultado final da competição. O vencedor LivingAgents (Klaus, 2001) utiliza um sistema multi agente com várias heurísticas simples, e se aproveita da mudança nas regras para tomar a maioria das decisões bem no início de cada jogo. Esta estratégia permite uma economia considerável na compra das passagens aéreas. Além disso, o LivingAgents utiliza uma média dos preços de fechamento dos leilões dos hotéis 87 para calcular preços futuros, e assim poder calcular os lucros da melhor alocação por cliente. Posição 1 2 3 4 5 6 7 8 Agente livingagents ATTac Whitebear Urlaub01 Retsina SouthamptonTAC CaiserSose TacsMan Pontuação Média 3670.0 3621.6 3513.2 3421.2 3351.8 3253.5 3074.1 2859.3 Tabela 9: Resultado do TAC de 2001. PUC-Rio - Certificação Digital Nº 0115614/CA As finais da terceira edição do TAC foram realizadas em julho de 2002 na cidade de Edmonton no Canadá. A competição foi co-localizada com o Eighteenth National Conference on Artificial Intelligence (AAAI-02). As regras do TAC’01 para o TAC’02 permaneceram as mesmas, o que já demonstrava um certo grau de amadurecimento da competição. Além disso, a comunidade de pesquisa também demonstrava uma expansão, pois mais participantes foram inscritos neste ano. A tabela 10 apresenta os resultados do TAC’02. O agente Whitebear (Vetsikas et al., 2003) foi o vencedor desta edição, e apresentou uma técnica gulosa para o cálculo de alocação de bens junto com uma estratégia de lances “parciais”, onde os lances são considerados independentes um dos outros. Esse agente calcula primeiro os bens a serem comprados usando um algoritmo guloso, e demonstra empiricamente que as alocações encontradas estão sempre próximas da alocação ótima. Depois, o agente decide o valor do lance para cada bem utilizando uma estratégia de lances adaptativa que não ultrapassa o valor marginal do bem. 88 Posição 1 2 3 4 5 6 7 8 Agente Whitebear SouthamptonTAC Thalis UMBCTAC Walverine Livingagents kavayaH Cuhk Pontuação Média 3412.78 3385.46 3246.27 3235.56 3209.52 3180.89 3099.44 3068.77 Tabela 10: Resultado do TAC de 2002. A quarta edição do TAC foi realizada dentro da Eighteenth International Joint Conference on Artificial Intelligence (IJCAI-03) em agosto de 2003. A PUC-Rio - Certificação Digital Nº 0115614/CA tabela 11 apresenta os resultados desta edição. Neste mesmo ano, uma nova modalidade da competição foi criada para atender o cenário de produção e venda de produtos. Essa modalidade se chama TAC Supply Chain Management. Os agentes competidores agora precisam programar a compra de matéria prima, a produção e a distribuição para poder atender a demanda dos clientes. Posição 1 2 3 4 5 6 7 8 9 Agente ATTac01 PackaTAC Whitebear Thalis UMBCTAC NNN Walverine RoxyBot Zepp Pontuação Média 3199.77 3162.59 3141.74 3132.61 3108.24 3070.94 3005.30 2799.02 1714.38 Tabela 11: Resultado do TAC de 2003. 5.3.A arquitetura do LearnAgents Parte do sucesso do LearnAgents advém do uso da tecnologia de agentes, pois propiciam um novo paradigma para a concepção de sistemas inteligentes para atuarem em complexos ambientes distribuídos, competitivos e abertos. Uma técnica interessante para modelar um problema computacionalmente difícil com o paradigma de agentes é dividir esse mesmo problema em subproblemas mais simples. Assim, cada agente se torna responsável por um ou mais desses 89 subproblemas. A figura 38 apresenta a arquitetura do LearnAgents, e esta seção descreve a modelagem do sistema multi-agente usando uma linguagem de modelagem chamada ANote (Choren, 2002). Essa arquitetura utiliza um design semelhante ao sistema multi-agente SIMPLE (Milidiu et al, 2003a; Milidiu et al, 2003b; Milidiu et al, 2003c), porém com mais agentes, algoritmos de machine PUC-Rio - Certificação Digital Nº 0115614/CA learning diferentes, e uma performance superior (Sardinha et al., 2004a). Figura 38: A arquitetura do LearnAgents. Todos os nossos projetos de software utilizam uma técnica orientada a objetivos para a fase de requisitos. Esta fase utiliza o processo recursivo de decomposição de um objetivo do problema principal em vários objetivos de subproblemas mais simples. No caso do LearnAgents, esse processo recursivo definiu todos os objetivos dos subproblemas relacionados com o comércio de bens em um mercado competitivo. O objetivo maior desse sistema era comprar pacotes de viagens para os clientes e obter o maior lucro possível. Como o mercado era competitivo, a negociação foi identificada como um dos objetivos evidentes para o processo de compra dos pacotes de viagens. Além disso, para obter o maior lucro possível é preciso possuir uma base de conhecimento do mercado para auxiliar o processo de negociação. A figura 39 mostra esse processo de decomposição dos objetivos. 90 Figura 39: A decomposição dos objetivos relacionados com o comércio de bens. A base de conhecimento deve possuir: (i) os preços correntes dos leilões objetivo Monitorar Informações do Mercado; (ii) as preferências dos clientes - PUC-Rio - Certificação Digital Nº 0115614/CA objetivo Classificar as Preferências dos Clientes; (iii) as predições dos preços dos leilões - objetivo Prever próximo Preços dos Leilões; e, (iii) alocações de bens para os clientes utilizando a informação armazenada nesta base - objetivo Calcular as melhores Alocações. O processo de negociação requer: (i) um cenário representado pelas alocações que permita negociações de bens com alta lucratividade e com o mínimo de risco - objetivo Classificar as melhores Alocações; (ii) a escolha do valor do lance para cada bem desejado - objetivo Criar Lances para Ordens; e, (iii) envio de lances para os leilões de bens - objetivo Enviar Lances para Leilões. A segunda fase do processo de modelagem é criar os tipos de agentes que sejam capazes de conduzir os objetivos da figura 39. Essa criação começa com processo de relacionamento de todos os objetivos de nível mais baixo e com tipos de agentes. A tabela 12 faz um mapeamento entre esses objetivos e tipos de agentes. A figura 40 apresenta os vários tipos de agentes e seus relacionamentos. Esta figura permite uma visão estática do projeto do nosso sistema multi-agente. 91 Goal Agent Monitor Market Information Hotel Sensor, Flight Sensor, Ticket Sensor Classify Customer Information Hotel Sensor Predict Next Prices of Auctions Price Predictor Calculate Best Allocations Allocation Master, Allocation Slave Classify Best Allocations Ordering Create Bidding Orders Ordering Send Bids in Auctions Hotel Negotiator, Flight Negotiator, Ticket Negotiator PUC-Rio - Certificação Digital Nº 0115614/CA Tabela 12: A mapeamento entre subproblemas e tipos de agentes. Figura 40: Arquitetura do LearnAgents. Após a criação dos vários tipos de agentes, cada agente deve possuir uma especificação de cenários. Esses cenários possuem informações sobre o contexto de como cada agente deverá atingir seus objetivos. Segue abaixo, uma descrição resumida dos agentes criados e seus cenários: Os Sensores dos Leilões (Hotel, Vôo, e Ticket) – Esses agentes são responsáveis por atualizar a base de conhecimento com os preços correntes dos leilões, e enviar mensagens para outros agentes sobre eventos importantes do ambiente externo. A figura 41 apresenta o digrama de cenário dos Sensores de leilões. 92 Figura 41: Diagrama de cenário dos Sensores. Preditores – Através de uma série histórica dos preços de vôos e hotéis, os Preditores são capazes de prever para que valor o preço do leilão deve caminhar. PUC-Rio - Certificação Digital Nº 0115614/CA A figura 42 apresenta o digrama de cenário dos Preditores. Figura 42: Diagrama de cenário dos Preditores. Alocador Mestre e Escravos – O principal objetivo dos Alocadores é calcular vários cenários diferentes. Esses agentes utilizam os preços previstos e correntes para montar cenários diferentes. Todas as decisões de bens a serem adquiridos são baseadas nesses cenários. A figura 43 apresenta o digrama de cenário dos Alocadores. PUC-Rio - Certificação Digital Nº 0115614/CA 93 Figura 43: Diagrama de cenário dos Alocadores. Ordenador – O Ordenador assume um papel de chefe dos negociadores, e utiliza os cenários calculados pelos Alocadores para tomar as suas decisões. De minuto em minuto, os Negociadores recebem ordens de compras com diretivas básicas: quantos bens devem ser comprados, e o valor máximo do lance que pode ser dado para um determinado bem. A figura 44 apresenta o digrama de cenário do Ordenador. 94 Figura 44: Diagrama de cenário do Ordenador. PUC-Rio - Certificação Digital Nº 0115614/CA Negociadores – Para cada leilão há um Negociador especializado na compra de um tipo bem. Os Negociadores só começam a operar nos leilões depois que recebem as ordens de compra do Ordenador. A cada minuto, as ordens podem ser alteradas se houver alguma mudança de estratégia. Os negociadores têm o objetivo de comprar os bens seguindo as diretivas determinadas pelo Ordenador, porém toda transação deve ser feita pelo menor preço possível. A figura 45 apresenta o digrama de cenário dos Negociadores. Figura 45: Diagrama de cenário dos Negociadores. Monitor – Esse agente é responsável por armazenar informações da base de conhecimento em um banco de dados. Esses dados são utilizados por uma ferramenta da CA (Computer Associates) chamada Forest and Trees para monitorar a performance de cada agente individualmente e o sistema multi-agente como um todo. Uma tela da ferramenta de monitoração pode ser vista na figura 46. PUC-Rio - Certificação Digital Nº 0115614/CA 95 Figura 46: Interface do Monitor. Um diagrama interessante que deriva dos diagramas de cenário é o diagrama de interação. Esse diagrama deixa explicito a comunicação entre os agentes, e permite uma visão dinâmica do sistema. Figura 47: Diagrama do Interação do LearnAgents. Na figura 47, o Sensor de Hotel recebe um evento do ambiente com novas cotações dos leilões de hotéis. O Sensor atualiza a base de conhecimento e envia uma mensagem para o Preditor informando que os preços foram atualizados. O Preditor calcula as novas previsões de preços dos leilões, e armazenas essas predições na base de conhecimento. 96 Os Alocadores calculam os diferentes cenários baseados nos preços correntes e previstos. Esses cenários são alocações de bens de turismo, e eles são calculados com um solver de programação inteira. O Alocador Mestre envia uma mensagem para o Ordenador após esse calculo dos cenários. O Ordenador recebe a mensagem e decide a quantidade necessária de bens para atender a demanda dos clientes. Além disso, o Ordenador calcula o valor máximo de um lance para cada bem a ser comprado. Os Negociadores recebem a mensagem do Ordenador com os pedidos de compra e o valor máximo do lance. Os Negociadores possuem o objetivo de comprar esses bens pelo menor preço possível, sem exceder um lance maior do que o máximo definido pelo Ordenador. PUC-Rio - Certificação Digital Nº 0115614/CA 5.4.O TAC Classic 2004 e Resultados O TAC Classic 2004 foi a primeira participação do LearnAgents na competição. O TAC foi escolhido como ambiente para testar a arquitetura, pois apresenta características de um mercado competitivo e permite avaliar a performance do LearnAgents em relação a outros sistemas para comércio eletrônico. Os participantes cadastram seus agentes de software no torneio pela Internet. Esses agentes de software passam então a disputar autonomamente as partidas via Internet, sem qualquer intervenção humana. A competição de 2004 reuniu os representantes das equipes em Nova York, dentro do Third International Joint Conference on Autonomous Agents and Multi Agent Systems. A competição foi disputada em três etapas. Na primeira delas, o Qualifying Rounds, com os agentes conectados via Internet durante duas semanas, 24 horas por dia, o LearnAgents ficou na quinta colocação dentre os 14 participantes. Na rodada seguinte, o Seeding Rounds, o agente ficou boa parte do tempo disputando a quarta posição. Porém, devido a uma queda na madrugada do link de comunicação com a Internet, ele foi penalizado e caiu para a sétima posição. Mesmo assim, o LearnAgents ainda conseguiu recuperar uma posição e encerrar essa rodada em sexto lugar. Na semifinal, o LearnAgents subiu então para a quarta posição. Para a final, foram selecionados apenas os 8 melhores competidores, que disputaram 35 partidas sucessivas. O LearnAgents consegui então confirmar sua robustez em 97 ambientes fortemente competitivos e assegurar a terceira posição. A frente do LearnAgents ficaram os agentes experientes Whitebear (Vetsikas et al., 2003) da Cornell University, seguido do Walverine (Cheng et al., 2003) da University of Michigan. Em sua quarta participação, o Whitebear consegui o bicampeonato, e o Walverine foi desenvolvido pelos criadores da competição. Os resultados da tabela 13 mostram um grande equilíbrio entre os finalistas, e isso comprova a existência de muitas soluções robustas para esse jogo de varejo altamente competitivo. Em todas 35 partidas disputadas o LearnAgents não obteve qualquer resultado negativo, como mostra o gráfico da figura 48. Isso evidencia a boa performance da nossa estratégia em ambientes competitivos de varejo, pois é capaz de garantir lucros significativos e automatizar todos os processos de PUC-Rio - Certificação Digital Nº 0115614/CA decisão. Posição 1 2 3 4 5 6 7 8 Agente Whitebear04 Walverine LearnAgents SICS02 NNN UMTac-04 Agent@CSE RoxyBot Pontuação Média 4122.11 3848.97 3736.62 3708.24 3665.97 3281.43 3262.51 2015.02 Tabela 13: Resultado do TAC de 2004. Figura 48: Resultado do TAC de 2004. 98 5.5.Os Algoritmos utilizados nos Agentes do LearnAgents Esta seção apresenta os principais algoritmos utilizados no Preditor, Alocadores, Ordenador, e Negociador de Hotel. O restante dos agentes utiliza uma lógica simples que é muito parecida com o código apresentado nos cenários da seção 5.3. 5.5.1.Preditor O agente Preditor utiliza uma técnica chamada Média Móvel (Bowerman et al. 1993) para calcular os preços dos leilões de hotéis. A técnica Exponencial Suavizada (Bowerman et al. 1993) também foi testada para calcular os preços dos PUC-Rio - Certificação Digital Nº 0115614/CA leilões de hotéis, mas apresentou um erro de predição maior. Conseqüentemente, a fórmula da Média Móvel utilizada para prever os preços de cada bem é dada por: onde: é a série histórica dos preços de cada bem (N termos) é a seqüência de n preços previstos (janela de tamanho n) O Preditor utiliza também uma técnica chamada Máxima Verossimilhança (Mitchell, 1997) para prever uma variável aleatória escondida x (de uma distribuição uniforme entre [-10,30]) escolhida para cada um dos oito leilões de vôo. O preço inicial de cada leilão de vôo é escolhido a partir de uma distribuição uniforme entre [250,400]. O processo que atualiza esse preço é um passeio aleatório, e é perturbado a cada 10 segundos por um valor escolhido de uma distribuição uniforme: [-10, x(t)] if x(t) > 0, [x(t), 10] if x(t) < 0, [-10, 10] if x(t) = 0, onde x(t) = 10 + (t / 9:00)*(x - 10) 99 Os preços dos leilões de vôos são atualizados a cada 10 segundos, porém o Sensor de Vôo recebe essas cotações a cada 30 segundos, após três atualizações. A variável aleatória x é prevista utilizando a máxima verossimilhança: arg max P (yt + yt-10 + yt-20 = s | x) O valor de yt é o incremento do preço no tempo t, e s é a diferença entre o preço atual da cotação e a última cotação recebida a 30 segundos atrás. A predição do preço futuro é calculada utilizando o valor esperado E(quote) utilizando a variável x e o processo descrito acima. A figura 49 apresenta a predição do leilão PUC-Rio - Certificação Digital Nº 0115614/CA de vôo de chegada do dia 3 no jogo 6091 (Final do TAC Classic de 2004). Figura 49: Resultado do TAC de 2004. 5.5.2.Alocador O Alocador utiliza um modelo de programação inteira para criar diferentes cenários. Esse modelo recebe como entrada as preferências dos clientes, os preços correntes, os preços previstos, e os bens já adquiridos. O solver não é executado apenas para encontrar a melhor alocação de bens, mas o maior número de boas alocações geradas em 25 segundos. 100 Cada alocação define o número de bens por cliente que devem ser compradas em cada leilão com a sua respectiva utilidade. A função objetivo é descrito pela equação abaixo: 8 Utility (client ) − client =1 8 Cost (client ) − OtherCosts − Homogeneit yFunc client =1 A utilidade do cliente é medida em dólares, e precisa ser um pacote de viagem viável e um pacote de entretenimento viável. A utilidade é medida pela equação: PUC-Rio - Certificação Digital Nº 0115614/CA Utility(client) = 1000 - travel_penalty + hotel_bonus + fun_bonus Um pacote de viagem é viável se cada cliente tiver uma passagem aérea para chegar e sair de TACTown, e diárias em hotéis entre o dia de chegada e o dia de saída. Além disso, o cliente não pode trocar de tipo de hotel na viagem, e só existem dois tipos de hotéis nesse jogo, o hotel BOM e o hotel RUIM. O agente pode ser penalizado pelo pacote de viagem se o pacote é viável, mas não atende exatamente a preferência do cliente. Esse cálculo da penalidade é dado pela fórmula: travel_penalty = 100*( |AA - PA| + |AD - PD|) onde, AA é o dia preferido do cliente para chegar em TACTown, PA é o dia preferido do cliente para deixar TACTown AD é a data que o cliente chega em TACTown, PD é a data que o cliente deixa TACTown. O bônus de hotel é dado para cada agente que conseguir enviar um cliente para TACTown e hospedá-lo no hotel BOM. O cálculo é feito pela seguinte fórmula: hotel_bonus = GHI * HP onde, 101 GHI é um indicador de hotel BOM (assume o valor 1 se diárias são do hotel BOM, ou assume o valor 0 se diárias são do hotel RUIM), HP é um premio recebido em utilidade. O bônus para os ingressos de entretenimento é dado para o agente que consegue comprar um ou mais ingressos num pacote de viagem viável. Um pacote de entretenimento para cada cliente é considerado viável se houver apenas um ingresso por dia, e o dia desses ingressos coincide com as datas da estadia. O cálculo é feito pela seguinte fórmula: fun_bonus = AWI*AW + API*AP + MUI * MU PUC-Rio - Certificação Digital Nº 0115614/CA onde, AWI, API, e MUI são indicadores de ingressos (valor {0,1}) para cada tipo (Alligator wrestling, Amusement park, Museum), e AW, AP and MU são prêmios em utilidade recebido para cada tipo de ingresso. O Cost(client) é a soma dos gastos por cliente com a compra das passagens de ida e volta, diárias em hotéis, e ingressos. O OtherCosts é a soma dos gastos de todos os bens não utilizados pelos clientes, perdas e penalidades. O HomogeneityFunc é uma função que inclui uma penalidade extra na função objetivo, e é dado pela seguinte equação: 4 Penalty ( hotelType , day ).ExtraRoom ( hotelType , day ) day =1 O Penalty(hotelType,day) é uma penalidade extra dada para cada diária excedente de um dado tipo (0 = Bad Hotel, 1 = Good Hotel) e dia (1 to 4) no caso de hotel(hotelType,day) > maxHotel(hotelType,day). O hotel(hotelType,day) é o numero de diárias de hotéis alocadas de um dado tipo e um dado dia, e maxHotel(hotelType,day) é um parâmetro que define um número máximo de hotéis que não serão penalizados. Conseqüentemente: ExtraRoom(hotelType,day)=0, se hotel(hotelType,day) < maxHotel(hotelType,day) 102 ou ExtraRoom(hotelType,day)=hotel(hotelType,day)-maxHotel(hotelType,day), se hotel(hotelType,day) > maxHotel(hotelType,day) O HomogeneityFunc modela o risco de acumular muitas diárias para um dado dia e tipo de hotel. Essa função penaliza as alocações que possuem muitas diárias de hotéis de um mesmo tipo e em um mesmo dia. O Alocador também é responsável por calcular o valor máximo do lance que pode ser dado para um determinado bem. O Ordenador decide os bens a serem comprados, e pede para o Alocador calcular esse valor máximo do lance para cada PUC-Rio - Certificação Digital Nº 0115614/CA bem escolhido. Esse valor máximo será utilizado pelos negociadores como um teto do lance na negociação. Seja G*(g) o resultado da função objetivo da alocação ótima assumindo que o bem g está dentro desta alocação. Para calcular o valor máximo do lance, o solver é executado com o preço de g igual a p’g = e gera o resultado G*(g)’. O valor máximo do lance para o bem g é dado pela equação G*(g) - G*(g)’. 5.5.3.Ordenador A alocação ótima e as alocações sub-ótimas são calculadas uma vez por minuto pelos agentes Alocadores. O Ordenador executa uma heurística baseada nessas alocações para definir os bens que devem ser comprados. Para cada cliente, uma alocação contém as seguintes informações: (i) um data de chegada AA, (ii) uma data de saída AD, (iii) um tipo de hotel hotelType, e (iv) um pacote de ingressos de entretenimento e(day). Seja G* a alocação ótima e G(n) as alocações sub-ótimas, onde n é o índice das alocações sub-ótimas geradas e n assume um valor entre 1 ... N. O Ordenador envia ordens de compra para os negociadores baseados nas seguintes regras: i. Enviar ordem de compra para passagem de ida no dia AA para o cliente baseado na alocação G*, se e somente se as duas condições abaixo são verdadeiras: a. a > p.N, onde a é o número de vezes que a passagem de ida no dia AA aparece em G(n), e p é uma taxa. 103 b. O preço previsto indica que o preço do leilão está subindo. ii. Enviar ordem de compra para passagem de volta no dia DD para o cliente baseado na alocação G*, se e somente se as duas condições abaixo são verdadeiras: a. b > p.N, onde b é o número de vezes que a passagem de volta no dia DD aparece em G(n), e p é uma taxa. b. O preço previsto indica que o preço do leilão está subindo. iii. Enviar ordem de compra para diária do tipo hotelType no dia day em G* para cada cliente. iv. Enviar ordem de compra para ingressos de entretenimento do tipo e(day) PUC-Rio - Certificação Digital Nº 0115614/CA em G* para cada cliente. Essa heurística utiliza G* e G(n) para definir os bens que devem ser comprados considerando a incerteza do mercado. Se uma passagem aérea em G* não está presente em pelo menos p por cento das alocações em G(n), então a decisão de compra é postergada para o próximo minuto quando os Alocadores recalculam as alocações novamente. 5.5.4.Negociador de Hotel O Negociador de Hotel utiliza a técnica Minimax (Russell et al., 1995) e aprendizado por reforço (Mitchell, 1997) para calcular lances de leilões de hotéis. O Minimax é uma técnica de busca para dois jogadores, utilizada pelo Negociador de Hotel para encontrar lances ótimos. O lance ótimo é aquele que permite a compra do bem desejado pelo menor preço possível. Há dois jogadores no Minimax: o MAX e o MIN. O Negociador de Hotel é modelado como o jogador MAX, e a resposta do mercado é modelada como o jogador MIN. Uma busca em profundidade é feita a partir de uma árvore onde a raíz é a posição corrente do jogo. As folhas dessa árvore são avaliadas pela ótica do jogador MAX, e os valores dos nós internos são atribuídos de baixo para cima com essas avaliações. As folhas de o nível minimizar são preenchidas com o menor valor de todos os seus nós filhos, e o nível de maximizar são preenchidos com o maior valor de todos os nós filhos. Essa técnica é utilizada como uma técnica de poda chamada Alpha-Beta (Russell et al., 1995). 104 Figura 50: A árvore Minimax. Para construir essa árvore de decisão no Negociador de Hotel, os estados de PUC-Rio - Certificação Digital Nº 0115614/CA cada nó foram modelados com as seguintes informações: i. AskPrice: o preço corrente do leilão; ii. LastAskPrice: o preço do leilão do ultimo minuto; iii. deltaAskPrice = AskPrice – LastAskPrice; iv. Gama: uma constante; v. Bid: o valor atual do ultimo lance; vi. LastBid: o valor do lance enviado no ultimo minuto; vii. t : o tempo do jogo. A cada nó de um nível de maximizar, os nós filhos são atualizados com as seguintes alternativas: (i) Bid = LastBid + 0.5*Gama*deltaAskPrice; (ii) Bid = LastBid + 2*Gama*deltaAskPrice; (iii) Bid = LastBid + 5*Gama*deltaAskPrice. O valor de LastBid é atualizado com o último valor de Bid. Os valores de AskPrice, LastAskPrice, Gama, e do tempo t nesses filhos de MAX são mantidos com o mesmo valor. A figura 51 a ilustra esse processo de atualização. 105 PUC-Rio - Certificação Digital Nº 0115614/CA Figura 51: A árvore Minimax (nível Maximizar) no Negociador de Hotel. A cada nó de um nível de minimizar, os nós filhos são atualizados com as seguintes informações: (i) AskPrice = AskPrice + 0.5*Gama*deltaAskPrice; (ii) AskPrice = AskPrice + 2*Gama*deltaAskPrice; (iii) AskPrice = AskPrice + 5*Gama*deltaAskPrice. O valor de LastAskPrice é atualizado com o último valor de AskPrice. Os valores de Bid, LastBid, e Gama nos filhos de MIN são mantidos com o mesmo valor. O tempo t é incrementado com um minuto nesta etapa. A figura 52 ilustra esse processo de atualização. Figura 52: A árvore Minimax (nível Minimizar). 106 O Negociador de Hotel utiliza uma função avaliação na árvore Minimax para avaliar estados intermediários. Essa função utiliza uma rede neural chamada Perceptron (Mitchell, 1997) com um neurônio artificial. As entradas do Perceptron são os estados de um nó da árvore Minimax, e a saída é um valor entre 0 e 1. Os estados avaliados com valores próximo de 1 são considerados bons estados, e conseqüentemente representam que o lance enviado consegue adquirir o bem desejado. O objetivo do Negociador de Hotel é adaptar os pesos do Perceptron para que esses estados finais representem lances ótimos. O maior problema é configurar os pesos do Perceptron para que a avaliação leve apenas a casos de sucesso e onde o lance é ótimo. A técnica de aprendizado utiliza reforço combinado com a regra do Perceptron para atualizar os pesos. Ao PUC-Rio - Certificação Digital Nº 0115614/CA invés do aprendizado supervisionado (Russell et al. 1995) onde um conjunto de treinamento é apresentado ao Perceptron. O Negociador mantém um histórico de todos os nós por onde passou para implementar essa estratégia. A regra do Perceptron é utilizada em todos esses nós armazenados assim que o leilão fecha: wi = wi + . ( y(t) – d(t) ) . xi (Regra do Perceptron) onde: wi é o i-ésimo peso do Perceptron; xi é a i-ésima entrada do estado da arvore Minimax; y(t) é o valor atual da saída da função avaliação; d(t) é o valor esperado da saída da função avaliação que é calculado com o aprendizado por reforço; é a taxa de aprendizado. O primeiro nó utilizado pela regra do Perceptron é a folha, que representa o último lance enviado antes do leilão fechar. O Negociador atinge um estado bem sucedido, se todos os bens são comprados conforme a ordem de compra enviada pelo Ordenador e a diferença entre o valor do lance e o preço corrente do bem no leilão não é superior a uma constante k. O estado considerado bem sucedido recebe um d(t) = 1. Em todos os outros casos d(t) = 0. 107 Todos os estados por onde o Negociador passou também serão utilizados pela regra do Perceptron num sentido de baixo para cima na árvore. A regra do aprendizado por reforço usada para calcular d(t) é igual a: d(t- t) = d(t) + ß. (reward(t) - d(t)), No caso do nó folha ser considerado bem sucedido. d(t- t) = d(t) + ß.d(t), No caso do nó folha NÃO ser considerado bem sucedido onde: d(t) é o valor esperado de saída no instante t; PUC-Rio - Certificação Digital Nº 0115614/CA ß é a taxa do aprendizado por reforço; reward(t) = 1 – ( Bid(t) – AskPrice(t) ) / AskPrice(t) é a recompense obtida no instante t. Total number of requested hotel goods from the Ordering Agent Total number of hotel goods acquired by Hotel Negotiators Percentage (%) 1597 1515 94,87 Tabela 14: Performance do Negociador de Hotel nas finais do TAC Classic de 2004. O Ordenador envia ordens de compra para cada um dos Negociadores de leilão de hotel. Essas ordens de compra possuem o numero de bens desejados e seu respectivo lance máximo que pode ser dado. A tabela 14 apresenta a performance da técnica implementada no Negociador de Hotel para o TAC Classic 2004. Ordenador enviou 1597 ordens de compra nas 35 partidas da final, e o Negociador foi bem sucedido em 94,87% dessas ordens. PUC-Rio - Certificação Digital Nº 0115614/CA 108 Figura 53: Gráfico dos lances enviados para leilão pelo Negociador de Hotel. Figura 53 apresenta um gráfico com os lances enviados para o leilão do hotel BOM do dia 1 no jogo 6089 (finais do TAC Classic 2004). Os lances enviados estão sempre próximos do preço valor do bem. Isso garante que o bem esteja sendo adquirido. Porém, o lance enviado não pode exceder o valor do lance máximo definido pelo Ordenador. 5.6. Utilizando o MAS-School no Processo de Desenvolvimento do LearnAgents Na primeira fase do MAS-School, o engenheiro de software deve definir dois elementos centrais que estão relacionados com aprendizado: (i) Objetivo Sistêmico, SG, e (ii) Medida de Performance Sistêmica, SP, que mede o ganho de performance do sistema. No LearnAgents, o Objetivo Sistêmico foi definido utilizando a técnica orientada a objetivos da figura 39. Conseqüentemente, (i) SG: comprar pacotes de viagens para os clientes e obter o maior lucro possível, e (ii) SP: A pontuação média representando o lucro médio obtido do sistema no ambiente TAC. Na segunda fase, os tipos de agentes definidos na tabela 12 são selecionados para utilizar técnicas de machine learning. O objetivo é estabelecer um Problema 109 de Aprendizado do Agente bem definido. Conseqüentemente, três características são definidas: (i) Objetivo do Aprendizado, G; (ii) Medida de Performance, P, que mede a melhora da performance no agente individualmente; e, (iii) uma Experiência de Treinamento, E, que define o processo de aquisição do conhecimento no agente com o aprendizado. No LearnAgents, o Preditor de Preços foi um dos agentes selecionados para utilizar um técnica de machine learning. O Problema de Aprendizado do Agente para o Preditor pode ser definido PUC-Rio - Certificação Digital Nº 0115614/CA por: (iv) G: Prever os preços de leilões de hotéis; (v) P: O erro entre o preço previsto e o preço real; e (vi) E: Utilizar um histórico de preços dos leilões. Na terceira fase, um bom design do agente é criado para permitir a inclusão ou reuso de várias técnicas de machine learning. Além disso, o design deve proporcionar uma boa manutenção de código. A figura 54 apresenta o digrama de Classes (UML) do Preditor de Preços utilizando o padrão de projeto orientado a objetos da seção 4.2. Figura 54: O diagrama de Classes (UML) do Preditor de Preços. 110 As decisões mais importantes na fase de implementação de uma técnica de machine learning, nos agentes selecionados são: (i) a representação do conhecimento; (ii) o algoritmo de aprendizado; (iii) o conjunto de treinamento utilizado pelo algoritmo de aprendizado. O conhecimento do Preditor de Preços foi modelado como uma função chamada NextAskPrice. Essa função recebe um preço do leilão A e gera uma preço futuro do leilão N (NextAskPrice: A N ). A representação aproximada da função NextAskPrice utiliza uma função para calcular o preço futuro do leilão: PredictedAskPrice(n) = *AskPrice(n-1) + (1 )*PredictedAskPrice(n-1), onde é um numero entre 0 e 1; e n é o n-ésimo jogo. PUC-Rio - Certificação Digital Nº 0115614/CA Esta formula é codificada na classe ExponentialSmoothing da figura 54. O algoritmo de aprendizado Least Mean Squares (LMS) é utilizado para adaptar o : (n) = (n-1) + ß*(AskPrice(n-1)-PredictedAskPrice(n-1)), onde ß é a taxa de aprendizado. Esse algoritmo é codificado na classe LMSLearning da figura 54. A classe BuildTrainingExamples da figura 54 codifica a consulta ao banco de dados com preços de leilões que o agente já participou. A classe ErrorEvaluation da figura 54 implementa a avaliação da performance. Ao invés de desenvolver o sistema multi-agente com todos os agentes inteligentes em uma única fase, a fase de implementação utiliza uma proposta incremental para facilitar a integração e análise da performance dos agentes. A primeira versão do LearnAgents foi desenvolvida apenas com agentes de software reativos. O principal objetivo desta versão é testar a comunicação entre os agentes e a execução do sistema no ambiente do TAC. A pontuação média foi medida para poder avaliar a evolução do benchmark, mesmo sabendo que o sistema não apresentaria boa performance. A tabela 15 mostra o benchmark feito com as várias versões do LearnAgents. Cada teste para avaliar a performance do sistema é feito em um simulador da competição real contra sete jogadores chamados dummies (TAC). O sistema joga cem partidas no benchmark para avaliar a performance média, e minimizar o efeito da variação das preferências dos clientes. O download do simulador da competição pode ser feito no endereço http://www.sics.se/tac. PUC-Rio - Certificação Digital Nº 0115614/CA 111 Tabela 15: Benchmark das Versões do LearnAgents. O primeiro agente selecionado foi o Alocador, versão 1.0 da tabela 15. Esse agente calcula diferentes cenários baseados nos preços da base de conhecimento do sistema. Esses cenários são alocações de bens para montar pacotes de viagens, e são calculados usando um solver de programação inteira. Essa versão da formulação calculava apenas alocações com quantidades de hotéis e passagens aéreas. O solver não é executado apenas para encontrar a melhor alocação de bens, mas o maior número de boas alocações geradas em 25 segundos. Cada alocação define o número de bens por cliente que devem ser compradas em cada leilão com a sua respectiva utilidade. Após testar o Alocador com os casos de testes, o Ordenador também foi modificado com uma nova heurística antes de testar o sistema no simulador. O Ordenador executa uma heurística baseada nessas alocações para definir os bens que devem ser comprados. O Negociador de Hotel foi o próximo agente selecionado para receber um módulo de inteligência. O agente utiliza a técnica Minimax, uma Rede Neural e Aprendizado por Reforço para calcular lances de leilões de hotéis. O principal objetivo desse agente é encontrar lances ótimos e permitir a compra do bem desejado pelo menor preço possível. O agente adapta os pesos da Rede Neural com Aprendizado por Reforço para encontrar estados que gerem lances ótimos. A 112 versão 2.0 da agência com o Negociador de Hotel inteligente aumentou a pontuação média para 1752. O agente selecionado na versão 3.0 do sistema foi o Preditor. O agente utiliza uma série histórica dos preços de hotéis para prever o futuro valor dos preços dos leilões. O agente Preditor utiliza uma técnica chamada Exponencial Suavizada (Bowerman et al., 1993), e permite ao Alocador usar os preços previstos para calcular as alocações de bens. A versão 3.0 aumentou a pontuação média para 2224. Na versão 4.0 do sistema, o Alocador foi novamente selecionado para alterar a formulação da programação inteira. Além de calcular a quantidade de hotéis e passagens aéreas, o solver calcula também a quantidade de ingressos de PUC-Rio - Certificação Digital Nº 0115614/CA entretenimento. O Ordenador teve que ser alterado para tratar a compra dos ingressos, pois nas versões anteriores os ingressos não eram negociados. O benchmark dessa versão aumentou a pontuação para 2856, porém o sistema começou a apresentar atrasos nas respostas com o servidor do TAC. Isso apresentava clara evidência que os recursos computacionais da CPU estavam baixas. Um Alocador Escravo foi criado para calcular essas alocações de ingressos, e foi executado em outra CPU da rede. O Alocador Escravo usava a mesma formulação de programação inteira para calcular as alocações de ingressos. O Alocador foi selecionado novamente na versão 5.0 do sistema para incluir na formulação alguns parâmetros, e uma função que penaliza as alocações. Essa função modela o risco de acumular muitas diárias para um dado dia e um dado tipo de hotel. Essa versão aumentou a pontuação média para 3370. O último agente selecionado foi novamente o Preditor. Esse agente foi modificado para calcular também a predição dos preços de leilões de vôos. O Preditor utiliza uma técnica chamada Máxima Verossimilhança para prever uma variável aleatória escondida x do processo que atualiza os preços dos leilões de vôos. A predição do preço futuro é calculada com o valor esperado do processo. Nessa versão 6.0, o sistema aumentou a pontuação média para 3705. A figura 54 apresenta um gráfico com a evolução do benchmark do LearnAgents. Este gráfico apresenta a evolução da inteligência do sistema multiagente. Isso demonstra a eficácia do método MAS-School, pois possibilita um 113 ganho constante na performance da inteligência, com uma técnica simples de modelar e implementar agentes inteligentes com aprendizado. Average Score Evolution 4000 3000 2000 Average 1000 Score ($) 0 -1000 -2000 PUC-Rio - Certificação Digital Nº 0115614/CA 0 1 2 3 4 5 6 Versions Figura 55: O Gráfico da Evolução do Benchmark do LearnAgents. A tabela 16 mostra novamente o resultado do LearnAgents no TAC Classic de 2004. Um detalhe importante sobre o resultado do benchmark no simulador é a semelhança existente entre os resultados do melhor benchmark e o resultado da competição. O melhor benchmark obteve uma pontuação média de 3705 e a pontuação média da competição foi de 3736. Isso evidencia a boa performance e a alta adaptabilidade dos nossos agentes em ambientes com jogadores diferentes. Isso só é possível graças as técnicas de inteligência e machine learning incluídos nos agentes do LearnAgents. Posição 1 2 3 4 5 6 7 8 Agente Whitebear04 Walverine LearnAgents SICS02 NNN UMTac-04 Agent@CSE RoxyBot Pontuação Média 4122.11 3848.97 3736.62 3708.24 3665.97 3281.43 3262.51 2015.02 Tabela 16: Resultado do TAC de 2004. 114 5.7.Utilizando o ASYNC na Implementação do LearnAgents No ASYNC, cada agente no sistema deve possuir duas classes concretas. A primeira classe a ser implementada deve herdar da classe Agent e implementar a interface AgentInterface. Essa classe concreta deve conter métodos que representam as ações internas dos agentes. Os métodos initialize(), run(), terminate(), e trace() devem ser implementados nesta classe concreta. Esse mesmo agente do sistema deve ter outra classe concreta. Essa classe deve herdar da classe InteractionProtocols, e deve conter métodos para implementar os protocolos de interação. O método processMsg() deve ser implementado para processar todas as mensagens recebidas pelo agente. A referencia para o objeto AgentCommunicationLayer é utilizada para que o agente PUC-Rio - Certificação Digital Nº 0115614/CA possa utilizar a camada de comunicação. A figura 56 ilustra a instanciação do agente Ordenador na aplicação LearnAgents, e a instanciação do formato da mensagem utilizando FIPA ACL (http://www.fipa.org/specs/fipa00061/). Figura 56: A instanciação do Agente Ordenador e Formato da Mensagem na aplicação. LearnAgents. 115 As ações internas do Ordenador foram modeladas no diagrama de cenários da figura 57. Essas ações do agente não dependem da interação com outros agentes no sistema. As ações “Coletar as Informações da Base de Conhecimento Corporativa”, “Decidir os bens a serem comprados”, “Decidir as quantidades dos bens”, e “Calcular os lances máximos” não dependem da interação com outros agentes. Conseqüentemente, os métodos collectInfoCKB(), decideGoodsToBuy(), decideGoodAmounts(), e calculateGoodHighPrices() da classe OrderingAgent modelam as ações descritas acima. O código Java a seguir apresenta o PUC-Rio - Certificação Digital Nº 0115614/CA mapeamento das abstrações em ANote para o framework ASYNC. Figura 57: Diagrama de cenário do Ordenador. 69. public class OrderingAgent extends Agent implements AgentInterface 70. { 71. public OrderingAgent(String name, InteractionProtocols iP){ 72. super(name, iP); 73. } 74. public void initialize() { 75. ... 76. } 77. public void terminate() { 78. ... 79. } 80. public void trace(String msg, int level) { 81. ... 82. } 83. public void run() { 84. int NumNegotiators=3; 85. while(true) { 86. collectInfoCKB(); 87. for(int i=0;i<NumNegotiators;i++){ 88. decideGoodsToBuy(); 89. decideGoodAmounts(); 90. calculateGoodHighPrices(); 116 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. ((OrderingAgentIP)getInteractionProtocols()). sendMessageToNegotiators(); } } } public ... } public ... } public ... } public ... } } void collectInfoCKB() { void decideGoodsToBuy() { void decideGoodAmounts() { void calculateGoodHighPrices() { Os protocolos de interação do Ordenador também são modelados pelo PUC-Rio - Certificação Digital Nº 0115614/CA diagrama de cenários da figura 57. Os protocolos de interação definem como o agente deve se comunicar e interagir com outros agentes no sistema. A ação “Enviar Mensagem para os Negociadores” exige uma interação com outros agentes no sistema. Conseqüentemente, essa ação deve ser colocada no método sendMessageToNegotiators(). sendMessageHotelNegotiator(), Esse método executa os métodos sendMessageTicketNegotiator(), e sendMessageFlightNegotiator(). Esses métodos utilizam o método sendMsg() da camada de comunicação para enviar as mensagens para os agentes negociadores. 1. public class OrderingAgentIP extends InteractionProtocols 2. { 3. public void processMsg(AgentMessage msg) { 4. FipaACLMessage msgReceived = (FipaACLMessage)msg; 5. ... 6. } 7. public void sendMessageToNegotiators(){ 8. sendMessageFlightNegotiator(); 9. sendMessageHotelNegotiator(); 10. sendMessageTicketNegotiator(); 11. } 12. public void sendMessageHotelNegotiator() { 13. FipaACLMessage msg = new FipaACLMessage(); 14. getAgCommLayer().sendMsg("HotelNegotiator",msg); 15. } 16. public void sendMessageTicketNegotiator() { 17. FipaACLMessage msg = new FipaACLMessage(); 18. getAgCommLayer().sendMsg("TicketNegotiator",msg); 19. } 20. public void sendMessageFlightNegotiator() { 21. FipaACLMessage msg = new FipaACLMessage(); 22. getAgCommLayer().sendMsg("FlightNegotiator",msg); 23. } 24. } 117 O framework ASYNC foi fundamental para o desenvolvimento do LearnAgents, pois ele possui um mapeamento claro entre abstrações de agentes e código OO, permite re-uso de código e conseqüentemente uma diminuição no tempo de desenvolvimento, e também diminui a complexidade de implementar PUC-Rio - Certificação Digital Nº 0115614/CA agentes de software. 118 6 A Aplicação LearnAgentsSCM Supply Chain Management (SCM) é o planejamento e coordenação das atividades de uma cadeia de suprimentos (Chopra et al., 2004). Essas atividades podem ter vários participantes e organizações, e a coordenação desses participantes é um ponto chave para uma cadeia eficiente. O Supply Chain não está relacionado apenas com os produtores e fornecedores, mas também com transportadoras, centros de distribuição, e clientes. Essa cadeia é extremamente PUC-Rio - Certificação Digital Nº 0115614/CA dinâmica e envolve um grande fluxo de informação, produtos e recursos financeiros entre diferentes estágios. O TAC Supply Chain Management (Arunachalam et al., 2004) foi modelado para capturar a complexidade de uma cadeia de suprimentos dinâmica, porém com regras simples para que muitas equipes possam participar dessa competição. O jogo foi desenvolvido por pesquisadores do laboratório de e-Supply Chain Management da Carnegie Mellon University e Swedish Institute of Computer Science (SICS). O LearnAgentsSCM é um sistema multi-agente para a gestão automatizada de uma cadeia de suprimentos. O sistema é utilizado em ambientes competitivos onde os participantes competem por clientes, um número limitado de peças, e precisam gerenciar a produção com uma limitação na capacidade produtiva. A sua arquitetura define agentes que resolvem subproblemas de gestão da cadeia de suprimentos, e apresenta uma técnica para combinar todas essas soluções. Os subproblemas típicos são seleção de clientes, planejamento da produção, negociação de peças para o estoque, entre outros. O LearnAgentsSCM utilizou o ambiente do TAC para testar o sistema desenvolvido, pois esse ambiente simula um ambiente competitivo e permite mensurar a performance do sistema contra um benchmark internacional. 119 6.1. O TAC Supply Chain Management Seis agentes “produtores de PC” participam em cada jogo do TAC SCM. Esses participantes competem por clientes com incerteza na demanda e por peças de um numero limitado de fornecedores. Todo dia, os clientes enviam pedidos de cotações e selecionam as melhores ofertas baseadas no preço e na data de entrega. Os agentes são limitados pela capacidade da fabrica, e tem que gerenciar a compra de peças de oito fornecedores. Quatro componentes são precisos para montar um PC: CPU, Placa Mãe, Memória, e Disco Rígido. Cada componente está disponível em diferentes modelos. A demanda dos clientes pode ser medida pelo número de PUC-Rio - Certificação Digital Nº 0115614/CA cotações de PCs. A figura 58 resume o cenário do jogo TAC SCM. Figura 58: O Jogo TAC SCM. O jogo começa quando um ou mais agentes se conectam ao servidor do TAC SCM. O servidor simula o comportamento dos fornecedores e clientes, e oferece um ambiente para cada participante com um banco para sua conta corrente, uma fábrica, e estoques de peças e PCs. No final do jogo, o agente que possuir o maior valor de dinheiro na conta corrente é declarado o vencedor. 120 O jogo apresenta um bom nível de complexidade, pois cada agente deve competir em vários mercados por diferentes componentes do lado dos fornecedores, e em mais outros mercados por diferentes tipos de PCs no lado dos clientes. Além disso, todos esses mercados possuem interdependências e incertezas. Esse cenário permite a criação de várias estratégias diferentes, e um agente precisa ser adaptativo para estar pronto para vários cenários imprevisíveis. 6.2. Evolução do TAC SCM A primeira versão do ambiente do jogo utilizado no TAC SCM foi projetada em 2003 por um grupo do Laboratório de e-Supply Chain Management da Carnegie Mellon University e do Swedish Institute of Computer Science (SICS). A PUC-Rio - Certificação Digital Nº 0115614/CA versão do ano seguinte passou por mudanças significativas para que o ambiente simulasse um mercado mais competitivo. Posição 1 2 3 4 5 6 Agente RedAgent deepmaize TacTex Botticelli PackaTAC whitebear Pontuação Média 11.61 M 9.473 M 5.017 M 3.330 M -1.680 M -3.453 M Tabela 17: Resultado da Final do TAC SCM de 2003. A primeira edição do TAC SCM foi sediada dentro da Eighteenth International Joint Conference on Artificial Intelligence (IJCAI-03) em 2003. A tabela 17 apresenta os resultados desta edição. A média dos três primeiros concorrentes é de 8,7 milhões, o que representa a existência de soluções robustas para esse complexo cenário. As estratégias dos agentes do TAC SCM podem ser classificadas em duas grandes categorias: (i) buy-to-build, onde o agente estoca componentes e começa a produzir PCs sem ter necessariamente ordens para programar a produção; e (ii) build-to-order, o agente espera receber primeiro as ordens dos clientes, e depois produz e entrega PCs baseado nessas ordens. O agente que adota a estratégia buyto-build é mais agressivo e pode aceitar qualquer oportunidade que for altamente lucrativa. Porém, o agente corre o risco de ter estoque encalhado, e pagar custos 121 altos de estocagem. A estratégia build-to-order é mais conservadora, pois só aceita oportunidades que possam ser produzidos no futuro. Porém, se o cliente enviar um pedido de cotação altamente lucrativo para ser entregue imediatamente, o agente não pode aceitar esse tipo de oportunidade. Em 2003, o vencedor RedAgent (Keller et al., 2004) utiliza um sistema multi-agente com várias heurísticas simples, e utiliza uma estratégia buy-to-build junto com o mecanismo de leilões para determinar a alocação ótima de recursos. Nessa estratégia, a primeira preocupação do produtor é estocar componentes e produzir PCs sem necessariamente ter ordens de clientes para cumprir. O RedAgent se beneficiava do fato de não haver um custo de estocagem nessa versão do jogo. Além disso, ele poderia vender seus PCs a qualquer momento, mesmo PUC-Rio - Certificação Digital Nº 0115614/CA abaixo do custo, para se ver livre do estoque. Os agentes dentro do sistema RedAgent utilizam o mecanismo dos leilões para determinar as alocações dos recursos. Por exemplo, o Assembler Agent é um agente de produção e ele tem que negociar através de leilões o uso de matéria prima e ciclos de fábrica. Posição 1 2 3 4 5 6 Agente FreeAgent Mr.UMBC UMTac-04 Botticelli deepmaize SouthamptonSCM Pontuação Média 10.28 M 8.652 M 6.518 M 441 711 -5.108 M -10.41 M Tabela 18: Resultado da Final do TAC SCM de 2004. A segunda versão do TAC SCM, em julho de 2004, teve a sua realização dentro da Third International Joint Conference on Autonomous Agents and Multi Agent Systems (AAMAS’04), na cidade de Nova York. Algumas regras foram modificadas para aumentar a competitividade do jogo. Por exemplo, o custo de estocagem foi incluído nesta versão. A tabela 18 apresenta o resultado final da competição. Os agentes FreeAgent, Mr.UMBC, UMTac-04 não apresentaram, até janeiro de 2005, qualquer relatório de pesquisa sobre as estratégias utilizadas. A média dos três primeiros concorrentes nesse ano é de 8,48 milhões. Três agentes novos ocuparam os três primeiros lugares em relação ao ano 2003, porém a média desses três se manteve quase constante. 122 Os criadores do agente Botticelli (Benisch et al., 2004), quarto lugar em 2003 e 2004, modelaram o problema de responder a RFQs dos clientes como um modelo estocástico. O agente utiliza algumas heurística e programação inteira para decidir que RFQs aceitar. A programação da produção é feita com um algoritmo guloso. Esse agente utiliza a estratégia mais próxima do build-to-order, pois produz PCs baseado nas ordens atuais e ofertas (RFQs) com alta probabilidade de se tornarem ordens. O agente Deep Maize (Kiekintveld et al., 2004) aceita os RFQs baseado nos estoques de PCs, disponibilidade de peças e ociosidade na produção. Ele possui uma estratégia de sempre manter estoque de PCs prontos. A programação da produção é feita com um horizonte de três dias, e utiliza programação linear para PUC-Rio - Certificação Digital Nº 0115614/CA escolher os PCs a serem produzidos. Esse agente utiliza a estratégia mais próxima do buy-to-build. 6.3.Arquitetura LearnAgentsSCM O LearnAgentsSCM também utiliza a tecnologia de agentes, e cria entidades autônomas e inteligentes para atuarem em complexos ambientes distribuídos, competitivos e abertos. A técnica de modelar um problema computacionalmente difícil do LearnAgents foi utilizada também nesse novo domínio. O método de decomposição de subproblemas foi utilizado para diminuir a complexidade do problema. Assim, cada agente se torna responsável por um ou mais desses subproblemas. A figura 59 apresenta a arquitetura do LearnAgentsSCM, e esta seção descreve a modelagem do sistema multi-agente usando uma linguagem de modelagem chamada ANote (Choren, 2002). PUC-Rio - Certificação Digital Nº 0115614/CA 123 Figura 59: A Arquitetura do LearnAgentsSCM. Esse projeto de software também utiliza a técnica orientada a objetivos para a fase de requisitos. Esta fase utiliza o processo recursivo de decomposição de um objetivo do problema principal em vários objetivos de subproblemas mais simples. No caso do LearnAgentsSCM, esse processo recursivo definiu todos os objetivos dos subproblemas relacionados com a produção, compra de matéria prima, e comercialização de bens. O objetivo maior desse sistema é produzir PCs e obter o maior lucro possível. Essa produção envolve os seguintes processos: (i) gerenciar as vendas para o cliente, (ii) gerenciar a produção das ordens, (iii) gerenciar a compra de matéria prima, e (iv) gerenciar a entrega dos PCs. A figura 60 mostra esse processo de decomposição dos objetivos. 124 Figura 60: A decomposição dos objetivos relacionados com a produção, compra de PUC-Rio - Certificação Digital Nº 0115614/CA matéria prima, e comercialização de bens. O processo de vendas pode ser decomposto em dois objetivos: (i) selecionar os pedidos de cotações mais interessantes, por exemplo, em relação à lucratividade ou a oportunidade de explorar um novo mercado, e (ii) escolher o preço para as cotações selecionadas. O processo de produção pode ser decomposto em: (i) escolher a melhor alocação das ordens a serem produzidas no dia corrente, e (ii) decidir a produção das ordens no futuro para poder calcular a ociosidade da fábrica. O processo de entrega pode ser decomposto em três objetivos: (i) decidir a entrega diária, (ii) decidir a entrega no futuro para saber quais ordens serão canceladas, e (iii) decidir cancelar o menor número de ordens, caso seja inevitável. A compra da matéria prima pode ser decomposta em dois objetivos: (i) decidir as peças a serem compradas escolhendo o tamanho ótimo do lote de compra, e tamanho ótimo do estoque de segurança, e (ii) negociar a compra das peças selecionadas e quantidades ordenadas. A segunda fase do processo de modelagem é criar os tipos de agentes que sejam capazes de atingir os objetivos da figura 60. Essa criação começa com processo de relacionamento de todos os objetivos de nível mais baixo com os respectivos tipos de agentes. A tabela 19 apresenta um mapeamento entre esses objetivos e tipos de agentes. A figura 61 apresenta os vários tipos de agentes e 125 seus relacionamentos. Esta figura permite uma visão estática do projeto do nosso sistema multi-agente. Goal Agent Select RFQs Marketing Manager Bid for Customer Orders Sales Representative Decide Daily Production from Production Scheduler Orders Decide Future Production from Production Scheduler PUC-Rio - Certificação Digital Nº 0115614/CA Orders Decide Daily Delivery of Orders Delivery Scheduler Decide Future Delivery of Orders Delivery Scheduler Decide Orders to Cancel Delivery Scheduler Decide Components to buy based Procurement Manager on Inventory Negotiate Components Procurement Buyer Tabela 19: A mapeamento entre subproblemas e tipos de agentes. Figura 61: O Diagrama de Agentes do LearnAgentsSCM. Os Sensores do ambiente não foram incluídos na figura 61 para manter a especificação mais simples e de fácil compreensão. Os objetivo dos Sensores nessa arquitetura são: (i) atualizar a base de conhecimento corporativa com 126 informações sobre clientes, RFQs, Ordens, informações sobre a fábrica, e informações sobre os fornecedores; e, (ii) enviar mensagens para outros agentes sobre eventos importantes do ambiente externo. Os Efetuadores do ambiente também não foram incluídos na figura 61 pelo mesmo motivo dos sensores. O objetivo dos Efetuadores nessa arquitetura é enviar informações com respostas a RFQs, pedido de cotação aos fornecedores para o ambiente externo. Esse agente é puramente reativo, pois envia as informações ao ambiente externo apenas quando é solicitado por outro agente do sistema. Pelo mesmo motivo dos Sensores e Efetuadores, o Monitor não foi incluído na figura 61. Esse agente é responsável por armazenar informações da base de PUC-Rio - Certificação Digital Nº 0115614/CA conhecimento corporativa em um banco de dados. Esses dados são utilizados por uma ferramenta da CA (Computer Associates) chamada Forest and Trees para monitorar a performance de cada agente individualmente e o sistema multi-agente como um todo. Uma tela da ferramenta de monitoração pode ser vista na figura 62. Figura 62: Interface do Monitor. Após a criação dos vários tipos de agentes, cada agente deve possuir uma especificação de cenários. Esses cenários possuem informações sobre o contexto 127 de como cada agente deverá atingir seus objetivos. Segue abaixo, uma descrição resumida dos agentes criados e seus cenários: Gerente de Marketing – Esse agente é responsável por selecionar quais RFQs, ou pedido por cotações dos clientes, serão respondidos. O Gerente de Marketing deve selecionar os RFQs lucrativos, e deve utilizar estratégias de segmentação de mercado para melhorar a performance da escolha. A figura 63 PUC-Rio - Certificação Digital Nº 0115614/CA apresenta o digrama de cenário do Gerente de Marketing. Figura 63: Cenário da Seleção dos Pedidos por Cotações. Vendedor – Esse agente é responsável por definir o preço dos RFQs selecionados pelo Gerente de Marketing. O agente pode adotar diferentes estratégias de preços dependendo do mercado. A figura 64 apresenta o digrama de cenário do Vendedor. Figura 64: Cenário da Decisão dos Lances. 128 Programador da Produção – Este agente decide a programação da produção do dia corrente para todas as ordens dos clientes. O Gerente da Produção também calcula a programação da produção para os próximos dias para que possa ser determinada a ociosidade da fábrica. A figura 65 apresenta o PUC-Rio - Certificação Digital Nº 0115614/CA digrama de cenário do Gerente de Produção. Figura 65: Cenário da Programação da Produção. Programador da Entrega – Este agente é responsável por decidir quais ordens serão entregues no dia corrente e no futuro. A decisão das ordens entregues no futuro permite a decisão das ordens a serem canceladas. A figura 66 apresenta o digrama de cenário do Gerente de Entrega. Figura 66: Cenário da Programação da Entrega e Ordens a Cancelar. 129 Gerente de Compras – Este agente decide quais peças devem ser compradas. Este decisão dever ser baseada no nível de estoque atual. A figura 67 apresenta o digrama de cenário do Gerente de Entrega. PUC-Rio - Certificação Digital Nº 0115614/CA Figura 67: Cenário da Decisão de Compra dos Componentes. Comprador – Este agente negocia com os fornecedores as pecas definidas pelo Gerente de Compras. Esta decisão se baseia no preço mais baixo e fidelidade dos fornecedores em relação à entrega. A figura 68 apresenta o digrama de cenário do Gerente de Entrega. Figura 68: Cenário da Negociação dos Componentes com os Fornecedores. 130 Um diagrama interessante que deriva dos diagramas de cenário é o diagrama de interação. Esse diagrama deixa explícita a comunicação entre os agentes, e permite uma visão dinâmica do sistema. A figura 69 apresenta o processo de PUC-Rio - Certificação Digital Nº 0115614/CA vendas, e a interação entre o Gerente de Marketing e o Vendedor. Figura 69: Diagrama de Interação do processo de vendas. Figura 70: Diagrama de Interação do Processo de Compra de Matéria Prima. A figura 70 apresenta o processo de compra da matéria prima. O Gerente de Compras decide quais peças serão compradas, e envia para o Comprador pedidos 131 de compra. O comprador negocia a compra das peças com os fornecedores disponíveis. O processo de produção e entrega está presente na figura 71 e 72. PUC-Rio - Certificação Digital Nº 0115614/CA Figura 71: Diagrama de Interação do Processo de Produção. Figura 72: Diagrama de Interação do Processo de Entrega. 132 6.4.A Engenharia de Algoritmos dos Agentes do LearnAgentsSCM Esta seção apresenta os principais algoritmos utilizados no Gerente de Compras, Programador da Produção, Programador da Entrega, e Gerente de Marketing. O restante dos agentes utiliza uma lógica simples que são muito parecidas com o código apresentado nos cenários da seção 6.3. 6.4.1.Gerente de Compras O Gerente de Compra utiliza o conceito de comprar matéria prima em lotes (Horngren et al., 1997; Chopra et al., 2004) para satisfazer a demanda por peças. PUC-Rio - Certificação Digital Nº 0115614/CA A figura 73 mostra o gráfico da demanda por peça para uma demanda constante. Figura 73: Nível de Estoque por tempo. Se o fornecedor de uma peça leva um tempo T para fazer a entrega de um pedido, então o agente deve fazer esse pedido quando o nível de estoque atingir o valor L. Uma decisão importante é calcular esse valor L por peça: Figura 74: Decisão de Compra dos Componentes. 133 No ambiente do TAC SCM, a demanda por peça não é constante, pois a demanda dos clientes por PCs é um passeio aleatório. Além disso, o tempo de entrega das peças pelos fornecedores também não é constante. Conseqüentemente, o Gerente de Compras re-calcula a demanda por peça e o tempo médio de entrega dos fornecedores utilizando uma média móvel. O algoritmo abaixo resume a decisão diária do Gerente de Compras: Para cada peça: 1. Calcular demanda d por unidade de tempo utilizando uma média móvel. 2. Calcular o tempo médio T de entrega dos fornecedores PUC-Rio - Certificação Digital Nº 0115614/CA utilizando uma média móvel. 3. Calcular o L = d * T, representando o nível de estoque para se fazer o pedido. 4. Se o nível atual de peças em estoque for menor que L, então fazer o pedido para um fornecedor de tamanho B do lote. 6.4.2.Programador da Produção e Programador da Entrega A decisão de produzir e entregar as ordens é problema de alocação de recursos para gerar o maior lucro possível. Porém, o problema possui algumas restrições: (i) toda ordem de cliente tem que ser produzida e entregue até uma data limite, (ii) a fábrica possui uma capacidade limitada de ciclos de produção por dia, e (iii) necessidade de estoques de peças para produzir os PCs. Uma descrição de alto nível para o problema é feita abaixo: Objetivo da Alocação de Recursos: Maximizar o Lucro Esperado. Entradas: Ordens Ativas; Capacidade da fábrica por dia; Componentes em estoque. 134 Saídas: As ordens produzidas em cada dia; As entregas das ordens. Para simplificar o problema, as entregas são sempre feitas um dia depois da produção. Um algoritmo guloso é proposto para resolver esse problema. O algoritmo procura por ordens que geram muita receita líquida por ciclo de fábrica e não leva em consideração os custos de peça, pois as peças já foram compradas. Esse algoritmo não garante uma alocação ótima, mas já produz bons resultados. Seja: PUC-Rio - Certificação Digital Nº 0115614/CA N – número de ordens ativas Oi – A i-ésima ordem ativa (i < N) Onde, cada Oi possui os seguintes atributos: Pi – Penalidades por Ordem i TCi – Ciclos de Fábrica para produzir a Ordem i Ri – A Receita da Ordem i Di – Data limite para produção (depois dessa data a ordem recebe a penalidade, e 5 dias depois o cliente cancela a ordem automaticamente) Assim, podemos definir a Receita Líquida Média por Ciclo gerada pela produção da ordem i, com início no dia j, como: Cij = ( Ri – Pij ) / TCi Então, O algoritmo procura por ordens que geram muita receita líquida por ciclo de fábrica, e executa o algoritmo abaixo até alocar todos as ordens ativas: 1. Calcular Cij e Ci* para todos os Oi’s a serem produzidos Pij – Penalidade por Ordem i no dia j (1 j 8) de Produção + Pij = ( j - Di ) . Pi Cij – Receita por ciclo (incluindo a penalidade) por Ordem i no dia j de Produção 135 Cij = ( Ri – Pij ) / TCi Cij = - , se capacidade de produção na fábrica no dia j está esgotado, ou se não há componentes em estoque para produzir a Ordem i Ci* = max{ Cij }, para cada Ordem i 2. Encontrar o maior Ci* correspondente a Ordem i (se Ci* < 0 então a ordem não é alocada para a produção) 3. Produzir a Ordem i (encontrada no passo 2) no dia d For j = ( Di + 5 ) to 0 If ( Cij - ) and ( Cij = Ci* ) d=j PUC-Rio - Certificação Digital Nº 0115614/CA Break For End if End for 4. Atualizar níveis de estoque e ciclos de fábricas disponíveis A estratégia adotado pelo algoritmo é gulosa na Receita Líquida com agendamento no último período viável livre. 6.4.3.Gerente de Marketing O Gerente de Marketing utiliza o algoritmo guloso da seção 6.4.2, com algumas pequenas modificações, para decidir a quais RFQs serão enviados lances. Os novos RFQs são considerados como Ordens Ativas. Porém, a receita das Ordens Ativas é multiplicada por um fator k, pois Ordens Ativas “verdadeiras” são mais importantes. Além disso, o Cij agora inclui o custo de peça para produzir a ordem i. Conseqüentemente: Cij – Lucro por ciclo (incluindo a penalidade) por Ordem i no dia j de Produção CPi – Custo de Peças para a ordem i Cij = ( k.Ri – Pij - CPi) / TCi, se for uma Ordem Ativa Cij = ( Ri – Pij - CPi) / TCi, se for um RFQ Cij = - , se capacidade de produção na fábrica no dia j está esgotado, ou se não há componentes em estoque para produzir a Ordem i 136 Depois de executar o algoritmo guloso com as modificações acima, os RFQs selecionados para a produção são enviados para o Vendedor para que possa enviar os lances. 6.5.Utilizando o MAS-School no Processo de Desenvolvimento do LearnAgentsSCM Na primeira fase do MAS-School, o engenheiro de software deve definir dois elementos centrais que estão relacionados com aprendizado: (i) Objetivo Sistêmico, SG, e (ii) Medida de Performance Sistêmica, SP, que mede o ganho de performance do sistema. No LearnAgentsSCM, o Objetivo Sistêmico foi definido PUC-Rio - Certificação Digital Nº 0115614/CA utilizando a técnica orientada a objetivos da figura 60. Conseqüentemente, (i) SG: produzir PCs e obter o maior lucro possível, e (ii) SP: A pontuação média representando o lucro médio obtido do sistema no ambiente TAC SCM. Na segunda fase, os tipos de agentes definidos na tabela 19 são selecionados para utilizar técnicas de machine learning. O objetivo é estabelecer um Problema de Aprendizado do Agente bem definido. Conseqüentemente, três características são definidas: (i) Objetivo do Aprendizado, G; (ii) Medida de Performance, P, que mede a melhora da performance no agente individualmente; e, (iii) uma Experiência de Treinamento, E, que define o processo de aquisição do conhecimento no agente com o aprendizado. No LearnAgentsSCM, o Gerente de Compras foi um dos agentes selecionados para utilizar um técnica de machine learning. O Problema de Aprendizado do Agente para o Gerente de Compras pode ser definido por: (vii) G: Prever o consumo de matéria prima; (viii) P: O erro entre a previsão da peça e o real; e (ix) E: Utilizar um histórico de utilização de peças. Na terceira fase, um bom design do agente é criado para permitir a inclusão ou reuso de várias técnicas de machine learning. Além disso, o design deve proporcionar uma boa manutenção de código. O Gerente de Compras também utilizou o padrão de projeto orientado a objetos da seção 4.2. 137 As decisões mais importantes na fase de implementação de uma técnica de machine learning, nos agentes selecionados são: (i) a representação do conhecimento; (ii) o algoritmo de aprendizado; (iii) o conjunto de treinamento utilizado pelo algoritmo de aprendizado. O conhecimento do Gerente de Compras foi modelado como uma função chamada ComponentRequired. Essa função recebe uma demanda passada de matéria prima P e gera a futura demanda F (ComponentRequired: P ComponentRequired utiliza F ). A representação aproximada da função uma função para essa demanda futura: ComponentRequired(n) = (1/ )*(AskPrice(n-1) + ...+ PredictedAskPrice(n- )), onde é o tamanho da janela da média; e n é o n-ésimo jogo. O algoritmo de aprendizado Least Mean Squares (LMS) é utilizado para adaptar o : (n) = (n- PUC-Rio - Certificação Digital Nº 0115614/CA 1) + ß*( ComponentRequired(n-1)- ComponentUsed(n-1)), onde ß é a taxa de aprendizado. Ao invés de desenvolver o sistema multi-agente com todos os agentes inteligentes em uma única fase, a fase de implementação utiliza uma proposta incremental para facilitar a integração e análise da performance dos agentes. A primeira versão do LearnAgentsSCM foi desenvolvido apenas com agentes de software reativos. A pontuação média foi medida para poder avaliar a evolução do benchmark, mesmo sabendo que o sistema não apresentaria boa performance. A tabela 20 mostra o benchmark feito com as várias versões do LearnAgentsSCM. Cada teste para avaliar a performance do sistema era feito em um simulador da competição real contra seis jogadores chamados dummies (TAC). O sistema jogava dez partidas no benchmark para avaliar a performance média, e minimizar tanto o efeito da variação da demanda dos clientes quanto à variação na produção dos fornecedores. 138 LearnAgentsSCM Agent Selected / Average Games Version Intelligent Module Score Played 0.0 --- -633.291.661 10 1.0 Procurement Manager / -248.466.127 10 -28.901.477 10 28.865.996 10 Lot Size and When to Order 2.0 Production Scheduler & Delivery Scheduler / Greedy Algorithm Marketing Manager / PUC-Rio - Certificação Digital Nº 0115614/CA Greedy Algorithm 3.0 Procurement Manager / Safety Inventory Tabela 20: Resultados da Evolução do Benchmark. A versão 1.0 do LearnAgentsSCM implementou a técnica de comprar matéria prima em lotes e decisão ótima de quando comprar (Chopra et al., 2004) no Gerente de Compra. Essa técnica permite uma boa redução de custos, e conseqüentemente um prejuízo menor em relação ao primeiro benchmark. Esse resultado gerou uma pontuação média de -248 milhões. A versão 2.0 implementou, no Programador da Produção e Programador da Entrega, o algoritmo guloso para programar a produção e entrega de produtos. O Gerente de Marketing também utilizou uma versão modificada desse algoritmo guloso para decidir quais RFQs serão aceitos. Essa técnica tornou a fábrica mais eficiente e lucrativa, e conseqüentemente melhorou o resultado para -28 milhões. A versão 3.0 do sistema implementou a técnica de manter estoque de segurança (Chopra et al., 2004) e compra de matéria prima em pequenos lotes. Essa técnica permitiu uma redução de custos ainda maior, e conseqüentemente a pontuação média subiu para 28 milhões. A figura 75 apresenta um gráfico com a evolução da inteligência do LearnAgentsSCM. O ganho constante na performance da inteligência permite constatar novamente a eficácia do método MAS-School. 139 Average Score Evolution 100.000.000 0 -100.000.000 -200.000.000 Average -300.000.000 Score ($) -400.000.000 -500.000.000 -600.000.000 -700.000.000 0 1 2 Versions PUC-Rio - Certificação Digital Nº 0115614/CA Figura 75: Gráfico da Evolução do Benchmark. 3 140 7 Conclusões O desenvolvimento de um sistema multi-agente de larga escala (Lucena et al., 2003; Garcia et al., 2003) não é uma tarefa simples. Sistemas com muitos agentes em ambientes heterogêneos necessitam de soluções de engenharia de software para permitir reuso e um desenvolvimento eficiente. Em sistemas complexos e abertos, agentes precisam de aprendizado para tomar decisões e se adaptar a mudanças para poder atingir os seus objetivos e o objetivo global do PUC-Rio - Certificação Digital Nº 0115614/CA sistema. Infelizmente, os engenheiros de software ainda utilizam a sua experiência e intuição para desenvolver sistemas complexos. Além disso, nem sempre esses sistemas são fáceis de escalar. Muita pesquisa tem sido feita para criar metodologias e frameworks de implementação para sistemas multi-agente. Porém, nenhum desses trabalhos apresenta um guia para incluir técnicas de aprendizado já nas fases iniciais do desenvolvimento. Nesse contexto, a tese possui como principais contribuições o método MASSchool e o framework ASYNC para construção de agentes inteligentes em ambientes heterogêneos e abertos. Além disso, apresenta dois estudos de casos complexos, o LearnAgents e o LearnAgentsSCM, que foram desenvolvidos com o MAS-School e o ASYNC. O método MAS-School (Sardinha et al., 2004b; Sardinha et al., 2005b) é utilizado para modelar e implementar agentes de software inteligentes desde as primeiras fases de desenvolvimento. Esse método também apresenta várias orientações de como incluir aprendizado nas fases de design e implementação. O método apresenta uma estratégia incremental de desenvolvimento para avaliar as técnicas de machine learning e permitir escalar o sistema com facilidade. 141 Os pontos mais fortes do MAS-School são: (i) A técnica orientada a objetivos para a fase de requisitos utiliza o processo recursivo de decomposição de um objetivo do problema principal em vários objetivos de subproblemas. Essa técnica é interessante, pois permite dividir um problema computacionalmente difícil em subproblemas mais simples; (ii) O objetivo do problema principal é associado a uma medida de performance para o sistema. Essa medida de performance permite mensurar se o objetivo sistêmico está sendo alcançado; (iii) Os objetivos funcionam como uma abstração para unificar conceitos de aprendizado com conceitos básicos de sistemas multi-agente; PUC-Rio - Certificação Digital Nº 0115614/CA (iv) Um mapeamento claro é feito entre objetivos do sistema e tipos de agentes. Conseqüentemente, os tipos de agentes são responsáveis por conduzir os objetivos desses subproblemas encontrados na fase de requisitos; (v) Tipos de agentes são selecionados, e seus objetivos são associados a uma medida de performance. Essa medida de performance permite mensurar se o objetivo de cada agente está sendo alcançado; (vi) O processo incremental e iterativo de implementação permite verificar o quanto o objetivo do problema principal do sistema esta sendo alcançado através da medida de performance selecionada. Conseqüentemente, o engenheiro de software pode projetar técnicas de machine learning que maximizem essa medida de performance. (vii) Esse método apresenta um processo passo-a-passo para incluir técnicas de machine learning em sistemas multi-agente, e prevenir que sejam incluídas técnicas de aprendizado que deteriorem o sistema. Além disso, o engenheiro do sistema pode avaliar o ganho de performance com a inclusão de cada técnica. 142 Os pontos fracos do MAS-School são: (i) O MAS-School se baseia nos diagramas do ANote para utilizar o método. Conseqüentemente, outras linguagens de modelagem baseada em agentes não são capazes de ilustrar todos os passos. (ii) O MAS-School não seleciona automaticamente o algoritmo de aprendizado para cada agente, mas fornece apenas um mapeamento entre as seguintes abstrações: objetivos, medida de performance, tipo de conhecimento, algoritmo a ser utilizado, e processo de geração do conjunto do treinamento. O processo incremental e iterativo de implementação permite selecionar a melhor técnica de aprendizado, mas não faz essa PUC-Rio - Certificação Digital Nº 0115614/CA seleção automaticamente. O framework ASYNC (Sardinha et al., 2003a) é utilizado para implementar os agentes inteligentes, e apresenta um mapeamento das abstrações de agentes para abstrações OO (Sardinha et al., 2005c). Esse framework é fundamental para o método proposto, pois: (i) Permite um mapeamento claro entre abstrações geradas pelo MAS-School e ANote para código OO. (ii) O mapeamento diminui a complexidade de implementar agentes de software; (iii) Permite re-uso de código e diminui o tempo de desenvolvimento. A camada de comunicação do ASYNC para ambientes distribuídos já está implementada. Essa camada de comunicação fornece serviços para troca de mensagens síncrona e assíncrona via um espaço de tuplas. (iv) O ASYNC fornece uma ferramenta para executar os agentes em um ambiente distribuído; (v) A implementação de uma arquitetura baseada em agentes utilizando o ASYNC permite criar um sistema com alta escalabilidade. Esses agentes podem ser executados em qualquer CPU de uma rede, e por isso não há limite para o número de agentes no sistema. 143 (vi) Os resultados de ações dos agentes podem ser compartilhados em uma base de conhecimento corporativa dentro do espaço de tuplas. Os agentes podem acessar esses resultados mesmo que este esteja fisicamente em outra CPU. Os pontos fracos do ASYNC são: (i) O framework ASYNC não possui um gerador automático de código entre os modelos de design e código. O mapeamento poderia ser feito de forma automática através de uma ferramenta; (ii) O ASYNC não fornece o serviço de mobilidade para agentes; (iii) O mapeamento entre modelos de design e código foram testados apenas PUC-Rio - Certificação Digital Nº 0115614/CA com a metodologia Gaia (Ribeiro, 2001), Anote/MAS-School (Sardinha et al., 2005c). O LearnAgents é um sistema multi-agente para um complexo cenário de procurement, onde os agentes compram e vendem bens em leilões simultâneos para montar pacotes de viagens para seus clientes. O sistema é utilizado em ambientes competitivos onde os participantes competem por um número limitado de bens. O LearnAgents utilizou a competição do Trading Agent Competition (TAC) para testar a arquitetura, o método MAS-School, e o framework ASYNC. Esse ambiente apresenta características de um mercado competitivo e permite avaliar a performance do LearnAgents em relação a outros sistemas para comércio eletrônico. O LearnAgents conseguiu o terceiro lugar na competição de 2004, e confirmou a robustez do método e re-uso do framework propostos. O LearnAgentsSCM é um sistema multi-agente para a gestão automatizada de uma cadeia de suprimentos. O sistema também utilizou a competição do Trading Agent Competition (TAC) para testar a arquitetura, o método MASSchool. A arquitetura ainda não foi testada na competição, mas já apresenta um ganho expressivo na evolução da performance por estar sendo construída com o método MAS-School. 144 As contribuições dessa tese apresentam uma abordagem para construir agentes inteligentes com aprendizado desde a fase de design até implementação. Vários benefícios são identificados pelos estudos de casos, porém alguns aprimoramentos ainda podem ser feitos. Algumas dessas idéias são apresentadas abaixo: (i) Incluir no framework ASYNC uma ferramenta para distribuir os agentes automaticamente nas CPUs da rede. No método MAS-School, esse processo é feito manualmente quando um agente começa a utilizar muitos recursos computacionais do sistema tais como CPU e memória; (ii) Oferecer o serviço de mobilidade no framework ASYNC. Este serviço permitiria a distribuição automática de agentes em qualquer momento na PUC-Rio - Certificação Digital Nº 0115614/CA execução dos agentes; (iii) Desenvolver uma ferramenta gráfica para auxiliar todo o processo de desenvolvimento e avaliação da performance do método MAS-School. Essa ferramenta poderia gerar automaticamente gráficos para avaliar o ganho de performance dos agentes e do sistema; (iv) Utilizar o MAS-School para melhorar a performance do LearnAgents e continuar testando a robustez do método. A aplicação precisa obter uma melhora na performance de pelo menos 10,32% para alcançar o ganhador do TAC 2004, o Whitebear. Novas técnicas de machine learning precisam ser testadas para alcançar o resultado do Whitebear; (v) Incluir mais um agente na aplicação para fazer um tuning automático do LearnAgents, e continuar testando a escalabilidade do método . Os agentes Alocador e Ordenador possuem vários parâmetros que são definidos pelo usuário do sistema. Esses parâmetros são utilizados para fazer um tuning do sistema. Um algoritmo de machine learning poderia ser utilizado para fazer esse tuning automático. (vi) Utilizar o MAS-School para melhorar a performance da aplicação LearnAgentsSCM. O pontuaçao média no benchmark contra os dummies precisa melhorar para tornar a aplicação mais competitiva para o TAC de 2005. Novas técnicas de machine learning precisam ser incluídas nos agentes, e esse processo vai permitir também o teste de robustez do método MAS-School. 145 As técnicas de inteligência e aprendizado serão vitais para construção de sistemas que automatizem processos. A tecnologia de agentes é a mais promissora para permitir essa automatização, pois ela permite uma integração de várias técnicas de inteligência e possui uma alta escalabilidade. O processo de modelar agentes inteligentes não é um processo trivial, e esta tese apresenta um método e um framework para tornar esse processo mais simples. Essa simplicidade pode ser PUC-Rio - Certificação Digital Nº 0115614/CA constatado pelas aplicações LearnAgents e LearnAgentsSCM. 146 8 Referências [1] ALEXANDER, C. et al.. A Pattern Language. Oxford University Press, New York, 1977. [2] ALEXANDER, C.. The Timeless Way of Building. Oxford University Press, New York, 1979. PUC-Rio - Certificação Digital Nº 0115614/CA [3] ARUNACHALAM, R.; SADEH, N.. The 2003 Supply Chain Management Trading Agent Competition. PROCEEDINGS OF THE TRADING AGENT DESIGN AND ANALYSIS WORKSHOP AT AAMAS’04, p.2835, New York, USA, Julho 2004. [4] BEVILACQUA, F.; SARDINHA, J.A.R.P.. Estruturas dinâmicas de incentivos para grupos de consumo. C. J. P. Lucena and R. L. Milidiú, editors, SISTEMAS MULTI-AGENTES, p.145-159, Papel Virtual Editora, ISBN: 85-7493-155-1, Julho 2001. [5] BENISCH, M.; GREENWALD, A.; GRYPARI, I.; LEDERMAN, R.; NARODITSKIY, V.; TSCHANTZ, M.. Botticelli: A Supply Chain Management Agent. PROCEEDINGS OF THE THIRD INTERNATIONAL JOINT CONFERENCE ON AUTONOMOUS AGENTS AND MULTIAGENT SYSTEMS (AAMAS’2004), p.1174-1181, New York, USA, Julho 2004. [6] BOWERMAN, B. L.; O'CONNELL, R. T.. Forecasting and Time Series: An Applied Approach. Thomson Learning, 3rd edition, ASIN: 0534932517, 1993. [7] BRESCIANI, P.; PERINI, A.; GIORGINI, P.; GIUNCHIGLIA, F.; MYLOPOULOS, J.. Tropos: An Agent-Oriented Software Development Methodology. AUTONOMOUS AGENTS AND MULTI-AGENT SYSTEMS, p.203-236, Volume 8, Issue 3, Maio 2004. [8] BUSCHMANN, F. et al.. Pattern-Oriented Software Architecture: A System of Patterns. John Wiley & Sons, 1996. [9] CASTRO, J.; KOLP, M.; MYLOPOULOS, J.. A Requirements-Driven Development Methodology. PROCEEDINGS OF THE 13TH INTERNATIONAL CONFERENCE ON ADVANCED INFORMATION SYSTEMS ENGINEERING, p.108-123, Lecture Notes In Computer Science, Vol. 2068, 2001. [10] CHENG, S-F; LEUNG, E.; LOCHNER, K. M.; O'MALLEY, K.; REEVES, D. M.; SCHVARTZMAN, L. J.; WELLMAN, M. P.. Walverine: A Walrasian Trading Agent. PROCEEDINGS OF THE SECOND INTERNATIONAL JOINT CONFERENCE ON AUTONOMOUS AGENTS AND MULTI-AGENT SYSTEMS, p.465-472, Melbourne, Australia, Julho 2003. 147 [11] CHOPRA, S.; MEINDL, P.. Supply Chain Management – Strategy, Planning, and Operations. Pearson Prentice Hall, Second Edition, ISBN 013-101028-X, 2004. [12] CHOREN, R.. Uma Linguagem de Modelagem para Sistemas Baseados em Agentes. Tese de Doutorado, Departamento de Informática, PUC-Rio. Dezembro 2002. [13] CHOREN, R.; LUCENA, C. J. P.. Modeling Multi-agent Systems with ANote. JOURNAL ON SOFTWARE AND SYSTEMS MODELING (SoSyM). DOI: 10.1007/s10270-004-0065-y, ISSN: 1619-1374, 2004a. [14] CHOREN, R.; LUCENA, C. J. P.. Agent-Oriented Modeling Using ANote. PROCEEDINGS OF THE THIRD INTERNATIONAL WORKSHOP ON SOFTWARE ENGINEERING FOR LARGE- SCALE MULTI-AGENT SYSTEMS (SELMAS 2004 - ICSE), pp. 74-80, The IEEE Computer Society, 2004b. PUC-Rio - Certificação Digital Nº 0115614/CA [15] COMPUTER ASSOCIATES (CA) CleverPath, http://www.ca.com/. Acessado em 16/02/2005. [16] CORKILL, D.; GALLAGHER, K.; JOHNSON, P.. Achieving Flexibility, Efficiency, and Generality in Blackboard Architectures. PROCEEDINGS OF THE NATIONAL CONFERENCE ON ARTIFICIAL INTELLIGENCE (AAAI-87), pp. 18-23, Seattle, Washington, 1987. [17] DASH OPTIMIZATION. http://www.dashoptimization.com. Acessado em 16/02/2005. [18] DELOACH, S. A.. Multiagent Systems Engineering: a Methodology and Language for Designing Agent Systems. PROCEEDINGS OF THE FIRST AGENT ORIENTED INFORMATION SYSTEMS WORKSHOP, (AOIS99), Washington, 1999. [19] IBM BUSINESS INTELLIGENCE (BI), International Business Machines, http://www-1.ibm.com/ businesscenter/us/solutions/solutionarea.jsp?id=6169 , Acessado em 16/02/2005. [20] DO, T.T.; KOLP, M.; HANG HOANG, T.T.; PIROTTE, A.. A Framework for Design Patterns for Tropos. PROCEEDINGS OF THE 17TH BRAZILIAN SYMPOSIUM ON SOFTWARE ENGINEERING (SBES 2003), Maunas, Brazil, October 2003. [21] DRUCKER, P.. Além da Revolução da Informação. HSM MANAGEMENT, Savana, ano 3, n. 18, São Paulo, janeiro-fevereiro 2000. [22] DUDA, R. O.; HART, P. E.: Pattern Classification and Scene Analysis. John Wiley & Sons, 1973. [23] FAYAD, M.; SCHMIDT, D.: Building Application Frameworks: ObjectOriented Foundations of Design. First Edition, John Wiley & Sons, 1999. [24] FERBER, J.: Multi-Agent Systems: An Introduction to Distributed Artificial Intelligence. Addison-Wesley Pub Co, ISBN: 0201360489, 1999. [25] FONTOURA, M.F.; HAEUSLER, E.H.; LUCENA, C.J.P. The Hot-Spot Relationship in OO Framework Design. MCC33/98, Computer Science Department, PUC-Rio, 1998. 148 [26] FIPA (Foundation for Intelligent Physical Agents) ACL Message Structure, http://www.fipa.org/specs/fipa00061/. Acessado em Specification, 16/02/2005. [27] GAMMA, E.; HELM, R.; JOHNSON, R.; VLISSIDES, J.: Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995. [28] GARCIA, A; SARDINHA, J.A.R.P.; LUCENA, C.J.P.; LEITE, J.; MILIDIÚ, R.L.; CASTRO, J.; ROMANOVSKY, A.; GRISS, M.; LEMOS, R.; PERINI, A.. Software Engineering for Large-Scale Multi-Agent Systems – SELMAS 2003 (Post-Workshop Report), ACM Software Engineering Notes, Vol. 28, Number 6, p.1-1, November 2003. PUC-Rio - Certificação Digital Nº 0115614/CA [29] GARCIA, A.. From Objects to Agents: An Aspect-Oriented Approach. Tese de Doutorado, Departamento de Informática, PUC-Rio, Rio de Janeiro, Brazil, April 2004a. [30] GARCIA, A.; KULESZA, U.; SARDINHA, J.A.R.P.; MILIDIÚ, R.L.; LUCENA, C.J.P.. The Learning Aspect Pattern. THE 11TH CONFERENCE ON PATTERN LANGUAGES OF PROGRAMS (PLoP2004), Allterton Park, Monticello, Illinios,USA, http://hillside.net/plop/2004/papers/agarcia0/PLoP2004_agarcia0_0.pdf, September 8 - 12, 2004b. [31] GIUNCHIGLIA, F.; MYLOPOULOS, J.; PERINI, A.. The tropos software development methodology: processes, models and diagrams. PROCEEDINGS OF THE FIRST INTERNATIONAL JOINT CONFERENCE ON AUTONOMOUS AGENTS AND MULTIAGENT SYSTEMS, p.35-36, 2002. [32] GREENWALD, A.. The 2002 Trading Agent Competition: An Overview of Agent Designs. AI Magazine, April 2003. [33] HOWDEN, N.; RONNQUIST, R.; HODGSON, A.; LUCAS, A.. JACK Intelligent Agents – Summary of an Agent Infrastructure. SECOND INTERNATIONAL WORKSHOP ON INFRASTRUCTURE FOR AGENTS, MAS, AND SCALABLE MAS, 5th International Conference on Autonomous Agents, Canada, 2001. [34] HORNGREN, C. T.; FOSTER, G.; DATAR, S. M.. Cost Accounting – A Managerial Emphasis. Prentice Hall, Ninth Edition, ISBN: 0-13-232901-8, 1997. [35] HUGET, M.-P.. Generating Code for Agent UML Sequence Diagrams. PROCEEDINGS OF AGENT TECHNOLOGY AND SOFTWARE ENGINEERING (AgeS), Bernhard Bauer, Klaus Fischer, Jorg Muller and Bernhard Rumpe (eds.), Erfurt, Germany, October 2002. [36] KELLER, P.W.; DUGUAY, F.-O.; PRECUP, D.: RedAgent-2003: An autonomous, market based supply-chain management agent. PROCEEDINGS OF THE THIRD INTERNATIONAL JOINT CONFERENCE ON AUTONOMOUS AGENTS AND MULTIAGENT SYSTEMS (AAMAS’2004), p.1182-1189, July 2004. [37] KENDALL, E.; KRISHNA, P.; PATHAK, C.; SURESH, C.. A Framework for Agent Systems. M. Fayad et al. (eds), IMPLEMENTING 149 APPLICATION FRAMEWORKS – OBJECT-ORIENTED FRAMEWORKS AT WORK, John Wiley & Sons, 1999. [38] KICZALES, G. et al.. Aspect-Oriented Programming. PROCEEDINGS OF THE EUROPEAN CONFERENCE ON OBJECT-ORIENTED PROGRAMMING - ECOOP’97, LNCS (1241), 1997. [39] KIEKINTVELD, C.; WELLMAN, M. P.; SINGH, S.; SONI, V.. ValueDriven Procurement in the TAC Supply Chain Game, p.9-18, SIGecom Exchanges, vol.4, 2004. [40] KLAUS, D.; FRITSCHI, C.. LivingAgents Strategy Description. Techinical White Paper, Living Systems, http://www.living-systems.com/, 2001. [41] KUDENKO, D.; KAZAKOV, D.; ALONSO, E.. Machine Learning for Agents and Multi-Agent Systems. Plekhanova, V. (ed.) INTELLIGENT AGENT SOFTWARE ENGINEERING. Idea Group Publishing, 2003. PUC-Rio - Certificação Digital Nº 0115614/CA [42] LEBART, L.; MORINEAU, A.; PIRON, M.. Statistique exploratoire multidinensionnelle, Dunod, Paris, 1997. [43] LIVING SYSTEMS & WHITESTEIN TECHNOLOGIES web site. http://www.livingAdvanced software agent technologies. systems.com/pages/index.html , Acessado em 16/02/2005. [44] LUCENA, C.J.P.; SARDINHA, J.A.R.P.; GARCIA, A.F.; CASTRO, J.; ROMANOVSKY, A.; ALENCAR, P.; COWAN, D.. Software Engineering for Large-Scale Multi-Agent Systems – SELMAS 2003. PROCEEDINGS OF THE IEEE/ACM INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING (ICSE 2003), p.771 - 772, Portland, USA, May 2003. [45] MILIDIU, R.L.; LUCENA, C.J.P.; SARDINHA, J.A.R.P.: An objectoriented framework for creating offerings. PROCEEDINGS OF THE 2001 INTERNATIONAL CONFERENCE ON INTERNET COMPUTING (IC'2001), p. 119-123, CSREA Press, v.1, June 2001. [46] MILIDIU, R.; MELCOP, T.; LIPORACE, F.; LUCENA, C.: Multi-Agent Strategy for Simultaneous and Related Auctions. ANAIS DO XXIII CONGRESSO DA SOCIEDADE BRASILEIRA DE COMPUTAÇÃO - IV ENIA, Campinas, SP, Brasil, pp. 597-606, 2003a. [47] MILIDIU, R.; MELCOP, T.; LIPORACE, F.; LUCENA, C.: SIMPLE - A Multi-Agent System for Simultaneous and Related Auctions. 2003 IEEE/WIC International Conference on Intelligent Agent Technology, Halifax, Canada, pp. 511-515, 2003b. [48] MILIDIU, R.; MELCOP, T.; LIPORACE, F.; LUCENA, C.. Multi-Agent Strategy for Simultaneous and Related Auctions, pp 155-170, SCIENTIA, vol. 14, nº 2, 2003c. [49] MILIDIU, R. L.; RENTERÍA, R. P.. DPLS and PPLS: two PLS algorithms for large data sets, p.125-138, COMPUTATIONAL STATISTICS & DATA ANALYSIS, 48, 2005. [50] MITCHELL, T. M.. Machine Learning. McGraw-Hill, ISBN: 0070428077, 1997. 150 [51] PADGHAM, L; WINIKOFF, M.. Prometheus: A Methodology for Developing Intelligent Agents. PROCEEDINGS OF THE FIRST INTERNATIONAL JOINT CONFERENCE ON AUTONOMOUS AGENTS AND MULTI-AGENT SYSTEMS, p.37-38, Italy, 2002a. [52] PADGHAM, L; WINIKOFF, M.. Prometheus: A pragmatic methodology for engineering intelligent agents. PROCEEDINGS OF THE WORKSHOP ON AGENT-ORIENTED METHODOLOGIES, OOPSLA, Seattle, November 2002b. [53] RIBEIRO, P.C.. Modelagem e Implementação OO de Sistemas MultiAgentes. Dissertação de Mestrado, Departamento de Informática, PUC-Rio, 2001. [54] ROSENBLATT, F.. The Perceptron: a probabilistic model for information storage and organization in the brain, p.386-408, PSYCHOLOGICAL REVIEW, 65, 1959. PUC-Rio - Certificação Digital Nº 0115614/CA [55] RUSSELL, S.; NORVIG, P.. Artificial Intelligence. Prentice Hall, ISBN 013-103805-2, 1995. [56] SARDINHA, J.A.R.P.. VGroups – Um framework para grupos virtuais de consumo. Dissertação de Mestrado, Departamento de Informática – PUCRio, March 2001. [57] SARDINHA, J.A.R.P.; RIBEIRO, P.C.; LUCENA, C.J.P; MILIDIÚ, R.L.. An Object-Oriented Framework for Building Software Agents. Journal of Object Technology, p. 85-97, Vol. 2, No. 1, January - February 2003a. [58] SARDINHA, J.A.R.P.; MILIDIÚ, R. L.; LUCENA, C. J. P.; PARANHOS, P. M.. An OO Framework for building Intelligence and Learning properties in Software Agents. PROCEEDINGS OF THE 2ND INTERNATIONAL WORKSHOP ON SOFTWARE ENGINEERING FOR LARGE-SCALE MULTI-AGENT SYSTEMS (ICSE 2003), p.30-36, Portland, USA, , May 2003b. [59] SARDINHA, J.A.R.P.; CHOREN, R.; MILIDIÚ, R.L.; LUCENA, C.J.P.. Engineering Machine Learning Techniques into Multi-Agent Systems. Technical Report, Computer Science Department, PUC-Rio, Brazil. PUCRioInf.MCC12/04, May 2004a. [60] SARDINHA, J.A.R.P.; GARCIA, A.F.; LUCENA, C.J.P.; MILIDIÚ, R.L.. On the Incorporation of Learning in Open Multi-Agent Systems: A Systematic Approach. PROCEEDINGS OF THE SIXTH INTERNATIONAL BI-CONFERENCE WORKSHOP ON AGENT ORIENTED INFORMATION SYSTEMS at CAiSE 2004, Riga, Latvia, p. 309-324, Jun 2004b. [70] SARDINHA, J.A.R.P.; MILIDIÚ, R.L.; LUCENA, C.J.P.; PARANHOS, P.M.; CUNHA, P.M.. LearnAgents - A multi-agent system for the TAC Classic. POSTER SESSION AT THE TRADING AGENT COMPETITION (THE THIRD INTERNATIONAL JOINT CONFERENCE ON AUTONOMOUS AGENTS & MULTI AGENT SYSTEMS), New York, USA, July 2004c. 151 [71] SARDINHA, J.A.R.P.; GARCIA, A.F.; MILIDIÚ, R.L.; LUCENA, C.J.P.. The Agent Learning Pattern. PROCEEDINGS OF THE FOURTH LATIN AMERICAN CONFERENCE ON PATTERN LANGUAGES OF PROGRAMMING, SugarLoafPLoP'04, Fortaleza, Brazil, http://sugarloafplop2004.ufc.br/acceptedPapers/index.html, August 2004d. [72] SARDINHA, J.A.R.P.; MILIDIÚ, R.L.; PARANHOS, P.M.; CUNHA, P.M.; LUCENA, C.J.P.. An Agent Based Architecture for Highly Competitive Electronic Markets. THE 18TH INTERNATIONAL FLAIRS CONFERENCE (The Florida Artificial Intelligence Research Society). Clearwater Beach, Florida, USA, May 16-18, 2005a. PUC-Rio - Certificação Digital Nº 0115614/CA [73] SARDINHA, J.A.R.P.; GARCIA, A.F.; LUCENA, C.J.P.; MILIDIÚ, R.L.. A Systematic Approach for Including Machine Learning in Multi-Agent Systems. AGENT-ORIENTED INFORMATION SYSTEMS. Revised Selected Papers from Workshop AOIS 2004. Published by Springer-Verlag, Lecture Notes in Artificial Intelligence, May 2005b. [74] SARDINHA, J.A.R.P.; CHOREN, R.; SILVA, V.; LUCENA, C.J.P.; MILIDIÚ, R.L.. A Combined Specification Language and Development Framework for Agent-based Application Engineering. Technical Report, Computer Science Department, PUC-Rio, Brazil. PUC-RioInf.MCC05/05, February 2005c. [75] SEN, S.; WEISS, G.. Learning in Multiagent Systems. G. Weiss (ed.), MULTIAGENT SYSTEMS: A MODERN APPROACH TO DISTRIBUTED ARTIFICIAL INTELLIGENCE, The MIT Press, Second printing, 2000. [76] SILVA, O.; GARCIA, A.; LUCENA, C.J.P.. T-Rex: A Reflective Tuple Space Environment for Dependable Mobile Agent Systems. III WCSF at IEEE MWCN 2001, Recife, Brasil, August 2001. [77] SOLVER.COM - FRONTLINE SYSTEMS, Inc.. Solver Tutorial for Optimization Users. http://www.solver.com/tutorial.htm. Acessado em 16/02/2005. [78] STONE, P.; LITTMAN, M.; SINGH, S.; KEARNS, M.. ATTac-2000: An Adaptative Autonomous Bidding Agent. JOURNAL OF ARTIFICIAL INTELLIGENCE RESEARCH, p.189-206, 15, 2001. [79] STONE, P.; SCHARPIRE, R.; CSIRIK, J.; LITTMAN, M.; MCALLESTER, D.. ATTac-01: A learning, autonomous bidding agent. WORKSHOP ON AGENT MEDIATED ELETRONIC COMMERCE IV: DESIGNING MECHANISMS AND SYSTEMS, 2002. [80] TAC web site.: http://www.sics.se/tac. Acessado em 16/02/2005. [81] TALUKDAR, S.; SACHDEV, S.; CAMPONOGARA, E.. A Collaboration Strategy for Autonomous, Highly Specialized Agents. PROCEEDINGS OF THE SPIE, SYMPOSIUM ON INTELLIGENT SYSTEMS & ADVANCED MANUFACTURING, October 1997. [82] TELECOM ITALIA LAB JADE, Java Agent Development Framework Programmer's Guide. http://sharon.cselt.it/projects/jade/doc/ programmersguide.pdf, Feb. 2003. 152 [83] TSPACES, IBM, http://www.almaden.ibm.com/cs/TSpaces/ . Acessado em 16/02/2005. [84] VETSIKAS, I. A.; SELMAN, B.. A principled study of the design tradeoffs for autonomous trading agents. PROCEEDINGS OF THE SECOND INTERNATIONAL JOINT CONFERENCE ON AUTONOMOUS AGENTS AND MULTI-AGENT SYSTEMS, p.473-480, Melbourne, Australia, July 2003. [85] WELLMAN, M. P.; WURMAN, P. R.; O'MALLEY, K.; BANGERA, R.; LIN, S.; REEVES, D.; WALSH, W. E.. Designing the Market Game for a Trading Agent Competition. IEEE Internet Computing, Vol. 5, No. 2, pp. 43-51, March/April 2001. [86] WINSTON, P.H. Artificial Intelligence. Addison Wesley, 1992. PUC-Rio - Certificação Digital Nº 0115614/CA [87] WOOLDRIDGE, M.. Intelligent Agents. G. Weiss (ed.), MULTIAGENT SYSTEMS: A MODERN APPROACH TO DISTRIBUTED ARTIFICIAL INTELLIGENCE. The MIT Press, Second printing, 2000. [88] WOOLDRIDGE, M.; JENNINGS, N. R.; KINNY, D.. The Gaia methodology for agent-oriented analysis and design. JOURNAL DO AUTONOMOUS AGENTS AND MULTI-AGENT SYSTEMS, p.285-312, v.3, 2000. [89] WOLSEY, L. A.. Integer Programming. Wiley-Interscience publication. ISBN: 0-471-28366-5. 1998. [90] ZAMBONELLI, F.; JENNINGS, N. R.; WOOLDRIDGE, M.. Developing multiagent systems: the Gaia Methodology. ACM TRANSACTIONS ON SOFTWARE ENGINEERING AND METHODOLOGY, p.317-370, 12 (3), 2003.