artigo Construindo Agentes Inteligentes com o JADE e Eclipse Utilizando o Eclipse para construir Agentes Inteligentes em JADE Ricardo dos Santos Câmara ([email protected]) é mestrando em Informática pela Universidade Federal do Amazonas – UFAM (http://www. ufam.edu.br/). É professor do curso de Informática da Fundação Centro de Análise, Pesquisa e Inovação Tecnológica – FUCAPI (http://www.fucapi.br/) e analista de Sistemas do Tribunal de Justiça do Amazonas – TJAM (http://www.tjam.jus.br/). 68 www.mundoj.com.br Ricardo Maia ([email protected]) é mestrando em Engenharia Elétrica, área de concentração de Sistemas Digitais, pela Escola Politécnica da Universidade de São Paulo – EPUSP (http://www2.pcs.usp.br/). É professor do curso de Informática da Fundação Centro de Análise, Pesquisa e Inovação Tecnológica – FUCAPI (http://www.fucapi.br/) e analista de Sistemas do Tribunal Regional do Trabalho da 11ª Região – TRT11 (http://www.trt11.jus.br/). José Francisco de Magalhães Netto ([email protected]) é doutor em Engenharia Elétrica pela Universidade Federal do Espírito Santo e professor adjunto do Departamento de Ciência da Computação da Universidade Federal do Amazonas (http://www.ufam.edu.br/). "SUJHPt$POTUSVJOEP"HFOUFT*OUFMJHFOUFTDPNP+"%&F&DMJQTF A computação se destaca como uma área que promove diversos tipos de integração. Chats, fóruns e ambientes virtuais, como os de redes sociais e educação, são cada vez mais utilizados. Aplicando-se técnicas de Inteligência Artificial, mais especificamente na área de Sistemas Multiagente, pode-se agregar funcionalidades extras a estes ambientes. O JADE – Java Agent DEvelopment Framework – é um framework composto por classes escritas em Java. Dentre algumas ferramentas que podem ser utilizadas para o desenvolvimento de agentes, como APRIL (Fujitsu, USA), Comtec Agent A mbientes virtuais são utilizados pelas mais diversas áreas: educação, entretenimento, social, entre outras. Um ambiente virtual de cooperação permite a integração de múltiplas ferramentas, amplia o espaço físico e, principalmente, permite interações sociais (NETTO 2004). Uma das utilidades na programação de agentes é dotar ambientes virtuais de convivência com agentes inteligentes, tornando-os mais interativos e atraentes. Este artigo aborda as questões teóricas e práticas da arquitetura de Sistemas Multiagente, uma das subáreas da Inteligência Artificial. Podese definir esta arquitetura como sistemas distribuídos nos quais todos os elementos possuem características de Inteligência Artificial, com capacidade de cooperação, coordenação e negociação, sendo capazes, desta forma, de resolver problemas distribuídos (WOOLDRIDGE 2002). Existem diversas definições para agentes, Russell e Norvig (1995) caracterizam como entidades que podem ser vistas como percebendo seu ambiente através de sensores e agindo por meio de atuadores. Imagine veículos de resgate como barcos e helicópteros não tripulados, percebendo os obstáculos através de sensores e tomando decisões baseados em inteligência artificial (atuadores). Estes podem ser citados como exemplos de agentes. Cenários mais práticos e completos são descritos ao longo do artigo. Um dos problemas práticos encontrados é a dificuldade de se programar Sistemas Multiagente. Dentre todas as dificuldades, ressalta-se que o uso do paradigma de Sistemas Multiagente ainda é influenciado pelo paradigma de Orientação a Objetos, havendo problemas em tratar o aprendizado do agente, da fase de design até a implementação (NETTO 2006). Na fase de desenvolvimento de agentes, nota-se a falta de ambientes adequados de programação. Visando contornar esta dificuldade, este trabalho propõe a integração do Eclipse, uma das ferramentas de programação mais conhecidas e utilizadas pelos desenvolvedores Java, com o JADE, um framework para a construção de agentes inteligentes. É válido ressaltar que o objetivo específico deste artigo não é ensinar a programação de agentes em JADE, a proposta tem foco em mostrar como configurar um ambiente visual para desempenhar esta tarefa. Plataform (Japão) e FIPA-OS (Nortel Networks), todas em código aberto, JADE (CSELT) possui a maior base de usuários nas áreas acadêmica e comercial, tem sido atualizada com constância para se conformar aos padrões FIPA1 que surgem e é considerada mais fácil de aprender e de usar, em comparação com o FIPA-OS – FIPA-OS seria outra ferramenta, dentre as mencionadas, passível de uso. Este artigo mostra como utilizar o Eclipse integrado ao JADE para desenvolver agentes inteligentes. Os principais conceitos teóricos e práticos serão abordados. interagindo e cooperando ou, até mesmo, competindo entre si. Para explorarmos alguns dos conceitos envolvidos, vejamos um exemplo clássico de aplicação. Imagine um agente com capacidade de cotar preços na WEB, um serviço semelhante ao oferecido por sites como Buscapé (http://www.buscape.com. br/) ou Bondfaro (http://www.bondfaro.com.br/). Pode-se delegar a tarefa de cotação a agentes de software que, ao serem solicitados, por outro agente ou por um humano, sejam capazes de efetuar cotações de determinados itens e retornar os valores para o solicitante. Autonomia, cooperação, interação e troca de mensagens são algumas das características de agentes presentes no exemplo citado. Incrementando as funcionalidades da aplicação, os agentes podem possuir capacidade de aprendizado, mapeando o perfil dos usuários de um determinado site e, mesmo sem ser solicitado, oferecer produtos mais procurados pelo usuário, por exemplo. Onde utilizar agentes? Conforme citado no tópico Agentes e Sistemas Multiagente, agentes são programas com algumas características que os diferenciam dos programas clássicos, como autonomia, capacidade de comunicação, reatividade, proatividade, colaboração, competição e busca de metas. Algumas aplicações úteis e comuns da utilização de agentes podem ser observadas em ambientes virtuais. Por exemplo, imagine um ambiente virtual de aprendizagem composto por alunos, professores e mediadores. Se for utilizado um agente de software para cada ser humano que compõe este ambiente, os agentes poderiam assumir algumas tarefas na ausência de pessoas, de certa forma, representando-as em alguns casos. Por exemplo, os agentes poderiam gerenciar os compromissos dos usuários e, caso houvesse necessidade de agendar uma reunião, estes poderiam marcá-la num dia e horário vago, uma vez que conheceriam a disponibilidade do agente humano que estariam representando. Ainda explorando o exemplo do agendamento, o agente comunicaria o usuário do ambiente que agendou uma reunião por ele, solicitando o aceite ou não da ação. Observe que algumas características de agentes são utilizadas neste exemplo, como autonomia, comunicação, proatividade, entre outras. Agentes e Sistemas Multiagente Um agente é uma entidade autônoma, capaz de tomar decisões sem a interferência de um sistema ou de seres humanos. Os agentes devem possuir a capacidade de interagir com o ambiente e, em certos casos, com outros agentes, 'PVOEBUJPO GPS *OUFMMJHFOU 1IZTJDBM "HFOUT 0SHBOJ[BÎÍP QBESPOJ[BEPSB EB sociedade de computação IEEE que promove tecnologia baseada em agente e a interoperabiMJEBEFEFTFVTQBESÜFTDPNPVUSBTUFDOPMPHJBToIUUQXXXmQBPSH 69 "SUJHPt$POTUSVJOEP"HFOUFT*OUFMJHFOUFTDPNP+"%&F&DMJQTF Outra utilidade que provavelmente será cada vez mais explorada é a utilização de agentes embarcados. Imagine agora que seu agente, o qual chamaremos de assistente neste cenário fictício, poderá acompanhá-lo, embarcado no seu telefone celular ou num PDA. Isso abriria um leque de opções para a indústria de marketing. Por exemplo, ao entrar num shopping, seu assistente poderia se comunicar com outros informando seus gostos pessoais e o que está procurando comprar, ele poderia receber as ofertas do dia, selecionar algumas baseando-se no conhecimento do seu perfil, e mostrá-las a você, contendo informações úteis, como valores e onde comprar. Obviamente existem problemas éticos a serem discutidos quando se propõe que um agente de software represente seres humanos. Tal debate foge aos objetivos deste artigo. Armadilhas na Programação Orientada a Agentes Na Programação Orientada a Agentes (POA), um agente é determinado por suas crenças, capacidades e seus compromissos, que juntos constituem seu “estado mental”. Esta técnica estimula uma visão social da computação, em que comunidades de agentes interagem através da troca de informações, enviando requisições específicas, oferecendo serviços, aceitando ou rejeitando tarefas, competindo ou cooperando com outros que tarefas sejam realizadas. Neste sentido é importante citar algumas armadilhas comuns quando se utiliza esta técnica. Vejamos algumas delas: 1. tecnologia recente; 2. achar que agentes são a solução para todos os problemas; 3. não entender para que servem os agentes; 4. querer construir soluções genéricas para problemas específicos; 5. esquecer que está desenvolvendo software; 6. não pesquisar a tecnologia relacionada; 7. não explorar concorrência; 8. decidir criar sua própria arquitetura de agentes; 9. pensar que sua arquitetura é genérica; 10. utilizar muita IA ou não utilizar IA; 11. desenvolvedores, de forma recorrente, tendem a cair nas mesmas armadilhas já citadas anteriormente. Outra solução utilizando Sistemas Multiagente Para deixar mais claro a utilidade de Sistemas Multiagente, citaremos mais um cenário, desta vez relacionado à domótica, tecnologia que permite a gestão dos recursos habitacionais. Netto idealiza o cenário de uma casa que possui diversos eletrodomésticos (geladeira, forno de microondas, computador, televisor, gravador de DVD etc.) e aparelhos de comunicação, como telefones e celulares (NETTO 2006). Considerando a hipótese de que estes aparelhos estejam integrados, podemos criar a seguinte situação: em um determinado canal de televisão, está sendo exibida uma reportagem sobre um assunto de interesse do morador. Suponhamos que este morador esteja ausente por um motivo qualquer. A partir do conhecimento sobre o que pode ser de interesse do morador (obtido e registrado semi-automaticamente), a televisão, estando ligada e sintonizada no referido canal, pode se comunicar com o gravador de DVD e solicitar a gravação desta reportagem. Caso o gravador de DVD não esteja disponível, ou haja nele próprio uma gravação programada no mesmo período ocorrendo em outro canal, a televisão pode enviar o arquivo digital referente à reportagem para o computador, que o armazenará em seu disco rígido. O computador pode também mandar uma mensagem para o e-mail ou para o telefone celular do morador, usando SMS, avisando sobre a disponibilização da reportagem. 70 www.mundoj.com.br A considerar a primeira ocorrência (defeito), o gravador de DVD poderia realizar uma autoverificação e detectar a natureza do problema; em seguida comunicaria aos outros aparelhos que está indisponível, sendo o provável problema um defeito na cabeça de gravação, e solicitaria que uma mensagem fosse enviada pelo telefone ao dono da casa. O gravador de DVD enviaria um relatório de danos ao computador com seu autodiagnóstico e resolve se desligar, pois o erro detectado é grave e fica à espera de reparos. O telefone, ao receber a mensagem, analisa a agenda do morador e verifica que ele está naquele horário em uma reunião importante. O telefone espera, então, a reunião acabar e alerta o dono sobre a chegada da mensagem. O computador sabendo que o gravador de DVD está com problemas, assumirá parte de suas funcionalidades. Obviamente, para que haja interoperabilidade entre dispositivos de diferentes fabricantes, estes devem estar dispostos a adotar alguns padrões, como de comunicações e detecção de falhas. JADE O JADE (Java Agent Development Framework) é uma plataforma implementada na linguagem Java que simplifica o desenvolvimento de Sistemas Multiagente (BELLIFEMINE 2007). A figura 5 apresenta os componentes dessa plataforma (CÂMARA 2009). 'JHVSB3FMBÎÜFTFOUSFPTQSJODJQBJTFMFNFOUPTEBBSRVJUFUVSB+"%&#&--*'&.*/& A plataforma é constituída pelo agente, pelo sistema de gestão de agentes (Agent Management System – AMS), pelo pesquisador de diretórios (Directory Facilitator – DF) e pelo sistema de transporte de mensagens (Message Transport System – MTS). O AMS atua como supervisor do acesso e do uso da plataforma e mantém uma lista de identificadores de agentes (AID) e seus estados, disponibilizando, na prática, um serviço de nomes. O DF providencia um serviço semelhante às páginas amarelas, no qual um agente pode procurar outros a partir do serviço que eles disponibilizam. O MTS provê a comunicação entre os agentes. Esta comunicação é realizada através da linguagem ACL (Agent Communication Language), que é a linguagem que os agentes têm de usar para codificar as mensagens que eles trocam, e pode ser executada por passagem como evento (caso seja entre o mesmo container), RMI (caso seja entre containers da mesma plataforma) ou Protocolo IIOP (caso seja entre plataformas diferentes). Na Listagem 1, observe o exemplo clássico de um agente implementado em JADE que simplesmente escreve uma mensagem na tela. Existem algumas formas de executar os agentes implementados em JADE, dentre elas podemos citar: 1. configurar o JADE e efetuar a compilação e execução através de linhas de comando (javac... java...); 2. integrar o JADE ao Eclipse e utilizar esta IDE como plataforma de desenvolvimento e execução dos agentes. "SUJHPt$POTUSVJOEP"HFOUFT*OUFMJHFOUFTDPNP+"%&F&DMJQTF Este artigo foca a segunda abordagem, será mostrado como configurar o Eclipse para executar os agentes escritos em JADE. Não serão discutidos detalhes sobre o desenvolvimento utilizando JADE. Listagem 1. Implementação do primeiro agente em JADE. import jade.core.Agent; public class HelloWorldAgent extends Agent { protected void setup() { System.out.println(“Hello World! My name is “+getLocalName()); doDelete(); } } Uma observação importante sobre o código da Listagem 1 é a diferença sutil entre classes Java e agentes em JADE. As que merecem destaque neste momento consistem nos métodos setup() e doDelete(). Primeiramente é importante entender que todos os agentes escritos em JADE estendem a classe Agent. A classe jade.Boot possui os métodos para execução dos agentes. Finalmente, o método setup() é utilizado para modificar dados registrados no AMS, atribuir serviços ao agente e adicionar comportamentos, enquanto que doDelete() pára a execução do agente. Figura 2. Criando um novo projeto no Eclipse. Figura 3. Adicionando JARs externas ao projeto. Integrando o JADE com o Eclipse Este tópico demonstra como configurar uma ferramenta de desenvolvimento, o Eclipse, para programar agentes utilizando o framework JADE. São utilizados exemplos retirados do tutorial para iniciantes – JADEProgramming-Tutorial-for-beginners.pdf, contido no JADE-doc. Ferramentas utilizadas É necessário que se faça o download e instalação dos aplicativos listados abaixo. Neste artigo, o sistema operacional utilizado para configurar o ambiente foi o Linux, mas não há grandes mudanças para que os exemplos sejam executados no Windows. Estas diferenças podem ser resumidas a forma de instalação do Eclipse e aos caminhos de diretórios. Portanto, não faremos distinção entre os dois sistemas operacionais. t +%,oIUUQKBWBTVODPN t &DMJQTFPVTVQFSJPSoIUUQXXXFDMJQTFPSH t +"%&oIUUQKBEFUJMBCDPN Figura 4. JARs externas adicionadas. 5 As configurações do agente comprador são descritas nos subtópicos a seguir: 5.1 Adicione ao projeto a classe BookBuyerAgent, que pode ser baixada no site da revista (figuras 5 e 6). Configurando o ambiente de programação 1 Copiar a pasta JADE-bin-3.6 para a pasta pessoal, no caso deste tutorial – /home/ricardo. 2 Crie um novo projeto no Eclipse (Java Project), chame-o de tutorjade Figura 5. Criando uma nova classe. (figura 2). 3 Acesse as propriedades do projeto – Java Build Path – Libraries e clique no botão Add External JARs (figura 3). 4 Adicione todos os arquivos .jar que estão na pasta /home/ricardo/JADEbin-3.6/jade/lib – http.jar, iiop.jar, jade.jar, jadeTools.jar. Nesta etapa, a configuração do Eclipse para executar quaisquer agentes escritos em JADE está completa (figura 4). Os passos seguintes ilustram a execução de um exemplo específico que acompanha o JADE, o Book Trading. 'JHVSB$ØEJHPEB-JTUBHFN$¬."3" 71 "SUJHPt$POTUSVJOEP"HFOUFT*OUFMJHFOUFTDPNP+"%&F&DMJQTF 5.2 Execute a classe utilizando a opção do menu Run – Run... Deve-se criar uma nova configuração para Java Application. Para isso, clique no botão New Launch Configuration. Pode-se dar um nome para esta configuração (Comprador, por exemplo). Os parâmetros necessários para que a classe seja executada são: Main Class (jade.Boot – aba Main) e Program Arguments (buyer:BookBuyerAgent – aba Arguments). As telas das figuras 7 e 8 ilustram as configurações efetuadas. 'JHVSB%FmOJOEPPTBSHVNFOUPTEPWFOEFEPS 'JHVSB$POmHVSBOEPBDMBTTFQSJODJQBMoKBEF#PPU Figura 11. Executando os agentes. A figura 11 (esquerda) ilustra a interface gráfica do agente vendedor, em que os livros e seus respectivos preços podem ser cadastrados. Já à direita temos o RMA, onde podem ser observados os agentes ativos no container, dentre eles o seller e buyer. Por fim, execute primeiramente o agente BookSellerAgent, cadastre pelo menos um livro com a descrição java e um valor qualquer. Em seguida, execute o BookBuyerAgent conforme descrito nos tópicos anteriores. 'JHVSB%FmOJOEPPTBSHVNFOUPTEPDPNQSBEPS 5.3 Observe que as configurações do agente comprador são definidas na figura 8. São elas: 5.3.1 Nome do agente: buyer; 5.3.2 Livro a comprar: java. 6 As configurações do agente vendedor são descritas nos subtópicos a seguir: 6.1 De forma semelhante ao item 5.1, adicione ao projeto a classe BookSellerAgent, que pode ser baixada no site da revista. 6.2 Execute a classe utilizando a opção do menu Run – Run... Novamente será necessário criar uma nova configuração para Java Application. Para isso, clique no botão New Launch Configuration. Pode-se dar um nome para esta configuração (Vendedor, por exemplo). Os parâmetros necessários para que a classe seja executada são: Main Class (jade.Boot – aba Main) e Program Arguments (-gui seller:BookSellerAgent – aba Arguments). As telas das figuras 9 e 10 ilustram as configurações efetuadas. 'JHVSB$POmHVSBOEPBDMBTTFQSJODJQBMoKBEF#PPU 72 www.mundoj.com.br Book Trading, um exemplo mais completo de agentes Para deixar mais claro as utilizações práticas de agentes e Sistemas Multiagente, apresentamos um exemplo mais prático e completo deste tipo de programação. Estudando os exemplos que acompanham o JADE, encontramos o Book Trading, uma aplicação que inclui agentes que compram e vendem livros em nome de seus usuários. Três classes e um tutorial podem ser baixadas no site da revista, são eles: 1. BookBuyerAgent.java: Agentes compradores; 2. BookSellerAgent.java: Agentes vendedores, utilizam a GUI implementada na classe BookSellerGui.java para que sejam inseridos os livros e seus respectivos preços; 3. BookSellerGui.java: GUI utilizada para inserir os livros e valores; 4. JADEProgramming-Tutorial-for-beginners.pdf: Tutorial que acompanha o JADE e explora o código do Book Trading. Cada agente comprador recebe o título do livro para comprar como um argumento de linha de comando. Periodicamente o agente solicita a compra a todos os vendedores conhecidos. Ao receber uma resposta, o comprador efetua a encomenda. Se mais de uma resposta for recebida para o mesmo item, é escolhida a com o valor mais baixo. Como o objetivo deste artigo é ensinar a configuração do Eclipse para desenvolver os agentes e a explicação detalhada do código deste exemplo seria longa e fugiria ao nosso escopo, sugerimos que o leitor estude os detalhes de implementação no tutorial fornecido pelo JADE – JADEProgramming-Tutorialfor-beginners.pdf, também disponível no site da revista. A figura 12 ilustra a GUI do agente vendedor e a resposta do container ao ser cadastrado um novo título. Podemos citar duas referências importantes para aprender ou aprofundar os conhecimentos no desenvolvimento de agentes usando JADE: 1. O JADEDoc, disponível em http://jade.tilab. com/; ou 2. O único livro publicado sobre JADE até o momento: Developing Multi-Agent Systems with JADE, disponível para compra em http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470057475.html. 'JHVSB(6*EFDBEBTUSPEFMJWSPTFTRVFSEB FSFTQPTUBOPDPOUÐJOFSEJSFJUB Saber mais t #&--*'&.*/&'BCJP$"*3&(JPWBOOJ(3&&/800%%PNJOJD%FWFMPQJOHNVMUJBHFOU TZTUFNTXJUI+"%&&EJUPSB8JMFZ t $¬."3"34/&550+'.."*"3+.6TBOEP9.-QBSB'BDJMJUBSP%FTFOWPMWJNFOUPEF"NCJFOUFTEF"QSFOEJ[BHFN#BTFBEPTFN4JTUFNBT.VMUJBHFOUF*O9*94JNQØTJP #SBTJMFJSPEF*OGPSNÈUJDBOB&EVDBÎÍP'PSUBMF[B$&9*94#*& t $¬."3"34/&550+'.6NB"CPSEBHFN#BTFBEBFN4JTUFNBT.VMUJBHFOUFQBSB Aprendizagem de Conceitos de Agentes e Sistemas Multiagente. Anais da I Escola RegioOBMEF*OGPSNÈUJDBo3FHJPOBM/PSUF*&3*/ .BOBVT t /&550+'.6NB"SRVJUFUVSBQBSB"NCJFOUFT7JSUVBJTEF$POWJWÐODJBVNB1SPQPTUB #BTFBEBFN4JTUFNBT.VMUJBHFOUF5FTFEF%PVUPSBEP6'&47JUØSJB t 43VTTFMM1/PSWJH"SUJmDJBM*OUFMMJHFODF".PEFSO"QQSPBDI1SFOUJDF)BMM4FSJFT&OHMFXPPE$MJõT/+ t 800-%3*%(& . "O *OUSPEVDUJPO UP .VMUJ"HFOU 4ZTUFNT *OHMBUFSSB &EJUPSB +PIO 8JMFZ4POT Referências Esperamos, desta forma, ter contribuído para minimizar os esforços de configuração dos ambientes, permitindo que o foco dos estudos seja no EFTFOWPMWJNFOUPEPTBHFOUFTFOBTQFTRVJTBTCJCMJPHSÈmDBTt Ao ler este artigo, e executar as configurações e exemplos propostos, o leitor estará apto para configurar um ambiente visual para o desenvolvimento de agentes e se aprofundar no assunto. As soluções de problemas utilizando agentes ganham cada vez mais atenção das indústrias, deixando de ser um tópico de interesse exclusivamente acadêmico e de pesquisa. Há fortes tendências de crescimento na utilização de agentes para dispositivos portáteis. Considerações finais "SUJHPt$POTUSVJOEP"HFOUFT*OUFMJHFOUFTDPNP+"%&F&DMJQTF