Construindo Agentes Inteligentes com o JADE e Eclipse

Propaganda
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
Download