Escolar Documentos
Profissional Documentos
Cultura Documentos
CNPq
RELATÓRIO FINAL UEM
É uma excelente oportunidade para iniciar o acadêmico em atividades de pesquisa. Possibilita contacto
com membros participantes de projeto de pesquisa, muitas vezes com diferentes experiências,
proporcionando um meio fértil para aprender e também desenvolver o espírito crítico. Isto contribui na
formação pessoal e profissional do acadêmico.
Foi encontrada, durante o desenvolvimento deste trabalho, uma grande oportunidade para investigar e
assimilar novos conhecimentos e produzir resultados satisfatórios. O conhecimento extra adquirido, quer
técnico como de equipe, será de grande valia para a formação pessoal e profissional. A bolsa constitui-se
em um importante fator motivador para os trabalhos desenvolvidos e, também, de apoio financeiro para os
acadêmicos.
UNIVERSIDADE ESTADUAL DE MARINGÁ
PROGRAMA INSTITUCIONAL DE BOLSAS DE INICIAÇÃO CIENTÍFICA –
PIBIC/CNPq – Fundação Araucária – UEM
DEPARTAMENTO DE INFORMÁTICA
ORIENTADORA : Profa. Dra. Elisa Hatsue Moriya Huzita
CO-ORIENTADORA: Profa. Dra. Tânia Fátima Calvi Tait
BOLSISTA: Helio Henrique Lopes Costa Monte Alto
1
UNIVERSIDADE ESTADUAL DE MARINGÁ
PROGRAMA INSTITUCIONAL DE BOLSAS DE INICIAÇÃO CIENTÍFICA –
PIBIC/CNPq – Fundação Araucária – UEM
DEPARTAMENTO DE INFORMÁTICA
ORIENTADORA : Profa. Dra. Elisa Hatsue Moriya Huzita
CO-ORIENTADORA: Profa. Dra. Tânia Fátima Calvi Tait
BOLSISTA: Helio Henrique Lopes Costa Monte Alto
2
Resumo
3
1. Introdução
Atualmente, estamos vivenciando um uso sem precedentes da Internet e de
tecnologias de comunicação e computação em aplicações comerciais, governamentais,
educacionais e, também, das áreas de saúde e de defesa. Ainda, avanços tecnológicos e
o crescente volume de conhecimento digital oferecem o acesso a serviços digitais mais
sofisticados. Devido a tais avanços, é possível observar que não apenas as organizações,
mas também as pessoas, os recursos e os negócios estão se tornando cada vez mais
geograficamente distribuídas. Assim também ocorre com o desenvolvimento de
software. Desta forma, a colaboração entre as pessoas envolvidas em um ambiente
distribuído de desenvolvimento de software torna-se imperativa.
Para o apoio à colaboração destas equipes, é necessário que haja um ambiente o
qual trate de questões próprias da distribuição, como a acessibilidade aos recursos e às
informações, liberação de serviços e a comunicação entre as partes na construção de
aplicações. O suporte a este ambiente requer uma infraestrutura mais complexa, que
pode se valer do apoio oferecido pelo paradigma de agentes de software.
Porém, muitas vezes a ação de um único agente não é suficiente, sendo
necessário que haja uma estrutura para que vários agentes coexistam e trabalhem de
forma cooperativa. Tais agentes compõem um sistema multiagente, e encapsulam
funcionalidades específicas e oferecem serviços para troca de informações com outros
agentes. Em outras palavras, formam uma sociedade de agentes onde há a interação
mútua entre os agentes assim como há a interações deles com o ambiente, levando a um
comportamento global.
A abordagem multiagente vem sendo considerada adequada para lidar com
sistemas que são compostos de muitos elementos provavelmente distribuídos e
desenvolvidos por equipes diferentes, e que precisam interagir. Para lidar com essa
distribuição, agentes móveis têm se destacado, pois são vistos como programas
autônomos com a habilidade de se transportar entre os nós de uma rede sob seu
controle, carregando consigo os dados e o estado da execução para reassumir a
execução no seu local de destino.
Graças à maturidade alcançada por especificações propostas pela FIPA
(Foundation for Intelligent Pysical Agents), várias plataformas têm sido desenvolvidas e
disponibilizadas. Dentre estas as mais conhecidas são; JADE, FIPA-OS e Zeus. Todas
elas oferecem uma infraestrutura com recursos que auxiliam o desenvolvedor na tarefa
4
de implementar agentes e, assim, aumentar a qualidade, a confiabilidade e a
interoperabilidade de aplicações baseadas em agentes. Para este trabalho é utilizada a
plataforma JADE, pois facilita de fato a implementação de agentes uma vez que
possuem vários recursos prontos, como bibliotecas de classes e padrões pré-definidos
que atendem às especificações da FIPA.
Outro ponto importante em relação à colaboração entre as pessoas envolvidas
em um ambiente distribuído é o fato de que, para que todos os membros de uma equipe
virtual atuem de forma coordenada e colaborativa, o ideal é que estejam inseridos em
um ambiente capaz de perceber o contexto no qual está inserido, um ambiente que seja
sensível ao seu contexto.
Ser sensível a contexto (do inglês context-aware) se refere à adaptação do
comportamento de uma aplicação como uma função do ambiente em questão. Em outras
palavras, uma aplicação sensível a contexto pode também utilizar atributos não
diretamente associados às atividades sendo realizadas para modelar o seu
comportamento, como locais físicos, os dispositivos utilizados, a largura de banda de
rede e os perfis dos usuários. Context-aware systems, ou sistemas sensíveis a contexto,
podem perceber estas informações referentes ao ambiente e utilizá-las para interpretar
os eventos que ocorrem nestes.
Os sistemas sensíveis ao contexto, em conjunto com agentes móveis, fazem
parte também do domínio dos sistemas ubíquos (pervasivos). Tais sistemas são
constituídos de dispositivos heterogêneos interconectados de modo a tornar a interação
humano-computador natural e transparente. Assim, é possível que quase tudo possa se
tornar um nó em um sistema distribuído.
Outra aplicação de grande utilidade para agentes móveis sensíveis ao contexto é
a computação móvel, que permite ao usuário se mover pelo ambiente enquanto
trabalha, tendo sempre em mãos o mesmo ambiente, as mesmas aplicações e os mesmos
dados, independente do dispositivo a ser usado.
Para uma infraestrutura oferecer suporte à percepção de contexto esta deve
apoiar o auto-ajuste à mudança de contexto, os pontos de acesso, auto-organização e
reconfiguração de serviços e usuários, de modo que estes possam ser coordenados
inteligentemente e agir em harmonia. Tal modelo de software pode ser baseado sobre o
paradigma de agentes (Titkov, 2005).
Assim, as características presentes em agentes e a possibilidade de explorá-las
no desenvolvimento de aplicações complexas no contexto do desenvolvimento
5
distribuído de software, motivaram a execução do presente projeto que tem por
finalidade estudar agentes móveis e mecanismos de interação entre agentes, que possam
ser adotados no projeto de sistemas sensíveis a contexto.
6
Objetivos
7
Mobilidade
Agentes Móveis
8
interface gráfica, uma coleção de outros agentes, Internet, ou ainda, todos
eles combinados.
• Pró-atividade: capacidade dos agentes não apenas em responder aos
estímulos do ambiente, mas também em exibir o comportamento dirigido
por objetivos, tomando iniciativas.
Porém, além destas propriedades, possuem também a propriedade de
mobilidade, que segundo o mesmo autor, pode ser descrita como a capacidade de
movimentar-se de uma máquina para outra por meio do ambiente computacional.
Portanto, agentes móveis são agentes capazes de interagir com outras entidades, de
reagir aos estímulos do ambiente, ao mesmo tempo em que possuem a capacidade de se
movimentar entre máquinas para cumprir suas tarefas.
Do ponto de vista de sistemas distribuídos, segundo Bellifemine (2007), um
agente móvel é um programa com um identificador único e que possui a capacidade de
mover o seu código, seus dados e seu estado entre máquinas que estejam conectadas por
uma rede. Para que isso seja possível, os agentes devem ser capazes de suspender a sua
execução em qualquer momento e continuar uma vez que estejam em outro local.
Segundo o mesmo autor, conforme a Figura 01, agentes móveis consistem em
três principais partes:
• Código: o código se trata do aspecto do agente que é executado quando
ocorre a sua migração para outra máquina. No caso mais simples existe
uma única execução a ser feita.
• Estado: o estado trata dos dados do ambiente de execução do agente,
inclusive o contador de programa e a pilha de execução referente ao
código sendo executado.
• Dados: os dados consistem nas variáveis utilizadas pelos agentes, de
fontes como conhecimento ou identificadores de arquivos.
9
Figura 01. Estrutura básica de um agente. Adaptado de Bellifemine (2007).
10
empacotadas em um local, para então serem disparadas para outro local,
onde as interações ocorrerão.
• Agentes móveis superam a latência da rede. Em sistemas de tempo real,
como robôs em processos de fabricação, existe a necessidade de
responder em tempo real às mudanças em seus ambientes. Para tais
sistemas, a latência da rede não é aceitável. Agentes móveis oferecem
uma solução, pois eles podem ser expedidos a partir de uma central de
controle para agir localmente e executar as instruções diretamente.
• Agentes móveis encapsulam protocolos. Quando os dados são trocados
em um sistema distribuído, cada local possui o uma implementação dos
protocolos necessários para o envio dos dados do código de saída e para
interpretar os dados de entrada. Os protocolos evoluem para acomodar
novos requisitos de eficiência ou de segurança, portanto é difícil atualizar
o código do protocolo de forma correta. Como resultado, os protocolos
muitas vezes se tornam um problema legado. Agentes móveis, por outro
lado, podem se mover
para locais remotos para estabelecer canais de comunicação baseados em
protocolos padrões.
• Agentes móveis são capazes de executar assincronamente e
autonomamente. Os dispositivos móveis muitas vezes dependem de
conexões de rede caras ou frágeis. As tarefas que exigem uma conexão
continuamente aberta entre um dispositivo móvel e uma rede fixa são,
provavelmente, nem economicamente nem tecnicamente viável. Para
resolver este problema, as tarefas podem ser incorporadas em agentes
móveis, que podem então ser enviados pela rede. Depois de serem
expedidos, os agentes tornam-se independentes do processo que os criou
e podem operar de forma assíncrona e autônoma. O dispositivo móvel
pode ligar mais tarde para recolher o agente.
• Agentes podem perceber o seu ambiente de execução e reagir
autonomamente a mudanças. Múltiplos agentes móveis têm a capacidade
única de distribuir-se entre os anfitriões na rede para manter a
configuração ideal para resolver um problema particular.
11
• Eles são naturalmente heterogêneos. Computação em rede é
fundamentalmente heterogênea, muitas vezes, tanto em quesito de
hardware quanto de software. Como agentes móveis são programas
rodados em máquinas e independentes da camada de transporte, são
ideais para tratar com heterogeneidade, uma vez que dependem apenas
do seu ambiente de execução.
• A capacidade dos agentes para reagir dinamicamente a situações
desfavoráveis e eventos torna mais fácil a construção de sistemas mais
robustos e tolerantes a falhas. Por exemplo, se uma máquina está sendo
desligada, todos os agentes em execução são avisados, podendo migrar e
continuar a sua operação em outro local da rede.
Apesar das várias vantagens apresentadas pelas razões descritas acima, é
possível traçar algumas desvantagens da implementação de agentes móveis
(Bellifemine, 2007):
• Escalabilidade e desempenho: apesar dos agentes reduzirem a carga da
rede, eles também tendem a aumentar o processamento.
• Portabilidade e padronização: agentes móveis heterogêneos não
conseguem se comunicar se não seguirem padrões de comunicação.
Necessitam de padrões para que seja possível migrarem entre diferentes
plataformas.
• Segurança: O uso de agentes móveis pode acarretar problemas de
segurança. Qualquer código móvel pode trazer um perigo potencial se
não for cuidadosamente autenticado antes de sua invocação.
Quanto à segurança, pode-se diferenciar duas áreas: segurança do host, no que se
refere à proteção da plataforma contra agentes maliciosos; e segurança do código, que
trata da proteção do agente contra plataformas maliciosas. Jansen e Karygiannis (2000)
citam algumas possíveis formas de ataque:
• Masquerading: um agente se apodera da identidade de outro para ter
acesso a recursos ou dados, ou um host assume uma identidade falsa para
capturar agentes;
• Denegação de serviço: agentes podem consumir ou corromper recursos
fornecidos por um host para impedir que outros agentes tenham acesso a
eles, ou um host pode rejeitar as requisições por serviço;
12
• Acesso não autorizado: os agentes podem procurar por falhas de
segurança e ganhar acesso a informações ou recursos não permitidos a
eles. Isto pode ser feito por um agente que interfere nas tarefas de outros
para ganhar acesso a dados.
Uma das principais vantagens da utilização de agentes móveis sobre os
paradigmas de comunicação mais usados atualmente, como o cliente/servidor, é a
possibilidade de um agente ser despachado do cliente e, a partir daí, trabalhar de forma
autônoma e independente do cliente. Isto possibilita que o cliente se desconecte após o
envio das requisições. Em uma rede inalâmbrica, onde há maior probabilidade de falhas
de conexão, e com a utilização de dispositivo móvel com poucos recursos como cliente,
tal situação de interrupção de conexão é desejável (Figura 02). Isso torna o paradigma
de agentes móveis melhor do que outros paradigmas que requerem conexão contínua
entre cliente e servidor, no que tange à tolerância a falhas em conexões mais instáveis e
lentas.
Figura 02. Modelo de agentes móveis em uma conexão cliente/servidor. (Adaptado de Spyrou et
al, 2004)
Cliente/servidor
Segundo Puliato et al (1999), a tarefa do servidor nesse paradigma é apenas a
execução de procedimentos de recuperação e armazenamento de dados, deixando ao
13
cliente a tarefa de processar os dados. Uma das maiores vantagens desse modelo é a
segurança, devido às restrições na forma como se acessa os dados, já que o servidor
disponibiliza ao usuário apenas os métodos definidos no projeto do sistema. A baixa
flexibilidade para a geração de novas operações, no entanto, implica numa carga
desnecessária para o servidor e para o sistema de comunicação.
Alguns modelos que procuram estender o modelo cliente/servidor para a
incorporação de agentes de software vêm sendo propostos. Tais extensões têm como
objetivo criar modelos adequados para a utilização em computação móvel com rede
inalâmbrica. Alguns exemplos são: cliente/agente/servidor e
cliente/interceptador/servidor.
14
com a interação em rede. Outra vantagem é que os dois agentes podem se comunicar
entre si a fim de aperfeiçoar o protocolo e a transmissão de dados, e também dividir
tarefas entre eles de acordo com as condições do ambiente (Spyrou et al, 2004). Além
disso, o agente do lado do servidor pode ser implementado como um agente móvel que
é despachado do cliente, podendo este realizar operações onde são necessárias
interações com outros dispositivos. Uma variante deste esquema é o modelo ponto a
ponto (do inglês, peer to peer), onde todos os dispositivos são, ao mesmo tempo,
clientes e servidores.
Avaliação remota
Nesse modelo, o servidor receberá, junto às requisições de processamento, o
código necessário para efetuar as operações. Dessa forma, todo o processamento é
realizado no servidor, minimizando os recursos computacionais requeridos no
dispositivo cliente. Isto torna a avaliação remota um paradigma bastante atraente
quando deseja-se trabalhar com dispositivos móveis com baixa capacidade de
processamento e/ou armazenamento. Contudo, a demora na abertura de uma sessão
torna o custo inicial maior que em cliente/servidor, apesar do retorno dos resultados na
avaliação remota ser mais rápido em dispositivos com baixo poder computacional.
15
geralmente necessita baixar informações do sistema gerenciador de banco de dados, o
que leva um tempo inicial considerável. Utilizando agentes móveis, um agente pode ser
disparado do cliente diretamente para o servidor de banco de dados, onde ele poderá
realizar as consultas diretamente, para então retornar os resultados ao cliente. Assim,
além do agente móvel possibilitar que a conexão seja interrompida durante a consulta,
há um ganho de tempo considerável por não ser necessário baixar drivers e outras
informações necessárias para a realização de consultas no banco de dados.
A única limitação que o paradigma de agentes móveis cria, nesse contexto, é o
fato de que, a cada requisição de transação com o banco de dados, um agente deve ser
enviado ao servidor. De qualquer modo, de acordo com experimentos realizados por
Spyrou et al (2004), os ganhos em desempenho são de cerca de 25% sobre a utilização
de conexão cliente/servidor comum.
Agentes móveis podem também ser usados em conjunto com as extensões do
paradigma cliente/servidor apresentadas. Nestes modelos, deve ser feita uma
configuração para cada aplicação diferente, resultando em configurações estáticas.
Utilizando agentes móveis, é possível permitir configuração dinâmica.
No modelo cliente/agente/servidor, pode-se considerar o esquema já citado
anteriormente, onde um agente é disparado do cliente para o servidor, onde ele irá
"estacionar" e então realizar as operações requisitadas. O conceito continua sendo o
mesmo do modelo c/a/s, porém aqui o agente (proxy) do lado do servidor é criado
dinamicamente de acordo com o cliente com que está lidando. Tal esquema se mostra
muito eficiente nos casos em que o cliente solicita várias consultas consecutivas com o
mesmo servidor de banco de dados. Outro benefício é que o agente, uma vez enviado ao
servidor, pode percorrer outros hosts pela rede antes de retornar ao cliente.
No caso do modelo cliente/interceptador/servidor, também há a possibilidade de
incorporar agentes móveis. Quando há uma requisição, dois agentes são criados no
cliente. Um dos agentes, que chamamos de client-side agent, permanece no cliente,
enquanto o outro, o server-side agent, é disparado para o servidor. Ao "estacionar" no
servidor, o server-side agent pode realizar suas operações e, sempre que necessário, se
comunicar via troca de mensagens com o client-side agent. Isso possibilita que a
comunicação possa ser feita tanto via mensagens quanto via migração de agentes,
tornando a comunicação ainda mais flexível.
16
Mecanismos de Mobilidade
17
A estratégia de religação (do inglês, re-binding), pode ocorrer quando no
ambiente computacional remoto há um recurso do mesmo tipo que é referenciado na
unidade de execução original. Desta forma, a ligação com o recurso no ambiente
computacional fonte é desfeita, e é criada uma nova ligação apontando para o recurso
no ambiente computacional destino.
Na estratégia por cópia é criada uma cópia do recurso existente no ambiente
computacional original, e a ligação é modificada para referenciar a cópia, que é então
transferida junto com a unidade de execução para o ambiente computacional destino.
A última estratégia é a estratégia por movimento, na qual o recurso é transferido
de forma conjunta com a unidade de execução para o ambiente computacional destino.
Porém, a ligação com o ambiente computacional fonte não é desfeita.
Quanto ao gerenciamento do código e do estado de execução, conforme descrito
anteriormente, a migração pode ocorrer de forma forte, na qual o estado da execução do
ambiente é também transferido para o novo local, ou de forma fraca, na qual o estado
não é transferido, e a execução do agente no novo local se inicia do começo do código.
Para a migração forte, existem dois mecanismos: o de migração (do inglês,
migration) e o de clone remoto (do inglês, remote cloning). No mecanismo de
migração, é suspendida a execução de um agente, que é transmitido para o ambiente
computacional destino para retomar sua execução. A migração pode ser proativa (do
inglês, proactive) ou reativa (do inglês, reactive). Na primeira, o tempo em que ocorre e
o destino da migração são determinados pela unidade de execução que está migrando.
Na segunda, a migração é acionada por outras unidades de execução que tenham alguma
espécie de ligação com a unidade de execução que está migrando.
O mecanismo de clone remoto cria uma cópia da sua unidade de execução no
ambiente remoto. A unidade de execução não é isolada do ambiente computacional
origem. Da mesma forma que no mecanismo de migração, o clone remoto pode ser
proativo ou reativo.
A principal diferença entre esses dois mecanismos é a continuidade ou não da
execução do agente no local de origem. Na migração, o agente se transporta para um
novo local, implicando que as tarefas que estavam sendo executadas sejam
interrompidas e retomadas no destino. Já na clonagem remota, após o processo de
clonagem ter ocorrido, o agente original continua sendo executado no seu local de
origem, ao mesmo tempo em que um novo agente, clone do original, é executado de
forma independente do primeiro no local de destino.
18
Já para a migração fraca existem mecanismos que têm a capacidade de transferir
seu código por meio de ambientes computacionais e de se ligar dinamicamente com
uma unidade de execução ativa ou criar uma nova unidade de execução no ambiente
remoto para a execução. Estes mecanismos podem ser classificados de diversas formas:
de acordo com a direção da transferência do código, com a natureza do código movido,
com o tipo de sincronização envolvido e o momento em que o código é executado no
ambiente remoto.
Segundo a direção do código a ser transferido, uma unidade de execução pode
trazer (do inglês, fetching) o código para ser executado, ou pode levar (do inglês,
shipping) o código para outro ambiente. Em ambos os casos (fetching ou shipping), o
código a ser transferido é autônomo (do inglês, stand-alone code) ou fragmentado (do
inglês, code fragment).
No primeiro caso, é criada uma unidade de execução no destino para executar o
código que está chegando ao ambiente. No segundo caso, a unidade de execução que
está chegando ao ambiente deve se ligar com alguma unidade que esteja executando o
código ou que eventualmente o tenha executado.
Além disso, tanto no código autônomo como no código fragmentado, estes
mecanismos ainda podem ser classificados em síncronos (do inglês, synchronous) ou
assíncronos (do inglês, asynchronous). Essa classificação depende da unidade de
execução que solicita a migração, que pode ficar suspensa ou não até que o código seja
executado. No modo assíncrono, a execução do código transferido pode ser imediata,
sendo executado logo que recebido pelo destino, ou postergada, de forma a esperar
alguma condição ser satisfeita para iniciar a execução no ambiente destino.
A clonagem de agentes se diferencia da migração pelo fato de o agente na
origem não ser excluído do ambiente de execução. Assim, quando um agente é clonado,
é conveniente que ele nunca retorne à origem, ao contrário do que costuma ocorrer na
migração.
Foram encontradas duas aplicações para clone remoto de agentes. A primeira
trata da distribuição de agentes entre diversos hosts. Nesse caso, um agente modelo
permanece numa central e, sempre que requisitado, ele é clonado, e o seu clone é
enviado ao host que necessita deste agente. Tal técnica pode ser muito útil quando a
execução dos agentes não é iniciada logo ao iniciar o sistema, mas sim no decorrer de
sua execução. Também torna possível que os novos agentes criados possuam
características, como valores de variáveis, atualizadas. Em outras palavras, cada vez que
19
uma cópia de um agente adquire um novo conhecimento ou propriedade de importância
geral, é possível que tais modificações sejam salvas no agente de origem para que os
novos agentes criados incorporem tais características.
Outra aplicação para clonagem de agentes é para tratamento de overload em
sistemas distribuídos que possuam um sistema multiagente (Shehory et al, 1998). Dois
tipos de overload podem ocorrer: quando o agente está sobrecarregado ou quando a
máquina está sobrecarregada. No primeiro caso, um agente está encarregado de tantas
tarefas que acaba gerando um gargalo. Uma possível solução é que tal agente crie um
clone de si mesmo, delegando parte de suas tarefas para o novo agente. O clone pode
tanto ser executado na mesma máquina quanto em uma máquina remota, já que o
objetivo é simplesmente dividir tarefas. É possível implementar o agente de forma que,
ao atingir a condição de overload, o agente analise sua carga atual e estime sua carga
futura, e analise também a carga de seu host e dos outros hosts disponíveis, a fim de
decidir onde o seu clone será executado. A divisão de tarefas e a decisão sobre onde o
clone será executado faz com que esta técnica seja difícil de implementar, embora seja
uma solução que possivelmente melhore o desempenho na execução de tarefas
complexas em um sistema distribuído.
No caso em que detecta-se que a máquina esteja sobrecarregada, a clonagem de
agentes pode ser, da mesma maneira, utilizada para divisão de tarefas com novos
agentes que serão executados em hosts remotos. Caso haja dificuldade na divisão de
tarefas, pode ser mais conveniente utilizar migração, onde o agente percebe a
sobrecarga de seu host e migra para uma máquina remota, retornando, posteriormente,
apenas os resultados de suas operações à origem.
20
a percepção baseia-se no conhecimento, na compreensão das atividades dos outros, que
por si provê um contexto para as suas próprias atividades. Por percepção, portanto,
entende-se o conhecimento e a compreensão do que ocorre dentro e fora de um grupo,
que sejam relevantes para o desenvolvimento das atividades dos seus participantes no
desempenho de seus diferentes papéis, de forma que possa ser entendido como o
entendimento das atividades dos outros (Vieira, 2008) (Dourish e Belloti, 1992).
Porém, perceber e processar informações de contexto não é uma tarefa trivial.
Existem requisitos básicos a serem observados na construção de sistemas sensíveis ao
contexto, que são: aquisição, representação, processamento, armazenamento, uso
(percepção, assistência e adaptação) e compartilhamento (com políticas de segurança e
privacidade). (Vieira et al, 2006).
Para tais sistemas sensíveis ao contexto, cuja preocupação é perceber e processar
as informações de contexto de um ambiente, o paradigma de agentes de software é
indicado, uma vez que o uso de sistemas multiagente é interessante por sua capacidade
de operar de forma paralela com outras partes da aplicação.
Há duas aplicações que vem sendo alvo de interesse em sistemas de agentes
móveis e sensíveis ao contexto: computação ubíqua/pervasiva e computação móvel.
Um sistema pervasivo é aquele em que quase tudo em um ambiente físico pode
se tornar um nó em um sistema distribuído. Isto é possível graças à evolução
tecnológica que torna os dispositivos cada vez menores, sendo possível que
computadores sejam encontrados acoplados a diversos objetos, como carros,
refrigeradores, objetos pessoais, e até mesmo em sistemas de iluminação, ventilação e
aquecimento de ambientes. Junto a recursos de redes inalâmbricas, é também possível
que tais dispositivos estejam conectados, possibilitando a comunicação entre eles a fim
de alcançar objetivos em comum.
O seguinte cenário, adaptado de Braun e Rossak (2005), pode ser tomado como
exemplo: seu refrigerador informará ao seu smartphone quando houver escassez de
determinado tipo de alimento. Seu smartphone irá lhe avisar disto e, no supermercado,
irá interagir com o carrinho de compras e com o local do supermercado onde você se
encontra, afim de detectar possíveis itens que estejam sendo esquecidos. Ainda no
supermercado, sua camiseta irá detectar se seu batimento cardíaco ou sua pressão
sanguínea estão muito altos e, caso positivo, irá contatar seu smarphone para que lhe
advirta caso você tenha colocado muitas batatas chips e bolachas recheadas no carrinho.
21
Todas essas interações vão requerer, no mínimo, que os dispositivos envolvidos
estejam conectados a uma rede inalâmbrica. Isto significa que tais transações serão
caracterizadas por banda estreita e baixa confiabilidade, isto é, há alta possibilidade de
que haja falhas na conexão. A partir disso pode-se observar um ponto muito forte na
utilização de agentes móveis para a implementação de sistemas pervasivos, já que estes
agentes têm como características a capacidade de evitar sobrecarga na rede e a
capacidade de reagirem dinamicamente a situações desfavoráveis, tornando-os
tolerantes a falhas.
Segundo Zaslavsky (2004), sistemas pervasivos necessitam também estar cientes
de seus ambientes e recursos disponíveis (isto é, devem estar cientes do contexto),
devem ter a capacidade de detectar mudanças no ambiente (mudanças no contexto) e
devem ser capazes de adaptar suas funcionalidades e comportamento às mudanças. A
utilização do paradigma de agentes móveis para a implementação de tais requisitos é
atraente e promissora por ser possível o compartilhamento e delegação de sobrecarga de
informação com entidades que podem, de forma diligente, inteligente e incansável,
realizar tarefas que só poderiam ser realizadas por usuários do sistema. Em outras
palavras, pode-se dizer que agentes móveis no mundo pervasivo virtual têm
comportamento análogo a pessoas no mundo real. Eles devem ser móveis e inteligentes
e devem usar os recursos disponíveis dinamicamente e tomar decisões de acordo com a
situação.
A computação móvel é outro tipo de aplicação que pode se beneficiar do
paradigma de agentes móveis e dos sistemas sensíveis ao contexto. Em um sistema que
utiliza computação móvel, o usuário pode se locomover enquanto trabalha,
possibilitando que ele se autentique no sistema a partir de diferentes tipos de sistemas
computacionais (por exemplo, em um determinado momento ele pode estar utilizando o
sistema a partir da LAN de sua empresa, e depois ele pode estar em casa utilizando o
mesmo sistema através de uma rede com conexão ISDN discada). É interessante
também que seja apresentado ao usuário sempre o mesmo ambiente, as mesmas
aplicações e os mesmos dados, não importando de onde ou de qual dispositivo ele esteja
utilizando o sistema (Braun e Rossak, 2005). Isso permite construir sistemas que
proporcionam ao usuário facilidade de uso e adaptação.
Aplicações que utilizam computação móvel também podem ser implementadas
como parte de um sistema pervasivo, já que pode-se considerar que o usuário possua um
dispositivo móvel, como um smartphone (como foi exemplificado anteriomente), e que
22
tal dispositivo interaja com um sistema pervasivo instalado no ambiente físico no qual o
usuário se encontra.
Enfim, levando em consideração que o paradigma de agentes móveis aceita,
como conceito básico, computação distribuída, e que suas vantagens tornam possível a
redução da complexidade na construção de sistemas sensíveis ao contexto, pode-se
chegar a um cenário onde a utilização de agentes móveis complementa a eficácia de um
sistema que gerencia equipes distribuídas geograficamente. Como tal sistema requer
sensibilidade ao contexto, é possível implementar um subsistema pervasivo local onde o
contexto capturado reflete no contexto do sistema como um todo. Isso poderia facilitar a
cooperação entre as equipes que se encontram geograficamente distantes, já que podem
existir informações que são muito naturais ao usuário, mas que podem ser de extrema
importância para uma eficaz cooperação entre equipes distribuídas. Estas informações
poderiam ser capturadas por dispositivos conectados a um sistema pervasivo que esteja
inserido no ambiente de trabalho físico de uma equipe local. Um exemplo desse tipo de
informação é a frequência da presença dos membros da equipe no local de trabalho. É
possível, através da computação móvel e ubíqua, que algum dispositivo detecte a
presença de um membro da equipe no local de trabalho e, em outro momento, consiga
estimar em que horário tal pessoa estará presente com base no que foi detectado
anteriormente. Tal informação passa, então, a fazer parte do contexto do sistema como
um todo.
JADE
23
da plataforma JADE. Esse mecanismo, no entanto, não permite que os agentes se
mudem para locais que possuam recipientes de outras plataformas. Um recipiente são os
processos que permitem a execução da plataforma JADE e todos os serviços necessários
para a hospedagem de agentes em execução. Dentro da execução de uma plataforma,
podem haver vários recipientes diferentes, e a locomoção de um agente entre estes
recipientes de uma mesma plataforma é também considerada mobilidade.
Em JADE, a capacidade de locomoção de um agente é controlada simplesmente
por meio do método doMove() na classe Agent:
void doMove(Location destination);
O parâmetro destino (do inglês, destination) deve ser um objeto que implementa
uma interface chamada Location, a qual indica para qual recipiente o agente será
movido. Na plataforma JADE existem duas classes que implementam essa interface. A
primeira é a classe ContainerId, usada para especificar que o destino do agente vai ser
um recipiente dentro da mesma plataforma onde está atualmente em execução. A
segunda é PlatformID, usada para indicar que o destino do agente é o recipiente
principal de uma plataforma diferente, quando estiver sendo utilizado o IPMS.
Uma vez invocado, o método doMove() inicia o processo de mover o agente para
o recipiente destino que foi especificado. A maioria das classes necessárias para a
realização deste processo é encontrada no jade.core.mobility da biblioteca JADE. A
primeira alteração que ocorre ao invocar o método doMove() é a mudança de estado do
agente de Ativo para Trânsito, fazendo com que o agente interrompa as suas atividades
e as suspenda enquanto a plataforma trata de migrá-lo.
Os estados do ciclo de vida de um agente são descritos conforme a Figura 06.
24
Figura 06. Ciclo de vida de um agente definido pela FIPA (FIPA, 2009).
25
estado de execução como dados internos do agente. Desta forma, só é necessário
transferir o código e dados. Os dados do agente estão contidos no objeto Java que
representa o agente. Transmitir este objeto, juntamente com seu código, será suficiente
para restaurar o agente no destino.
Como visto anteriormente, além de mover-se, um agente pode se clonar em
outro recipiente. JADE fornece também um mecanismo de clonagem que transfere uma
cópia de um agente existente usando o método:
public void doClone(Location destination, String newName)
O parâmetro de destino é usado, como no método doMove(), para indicar o
recipiente em que o clone do agente atual será criado. O parâmetro newName indica o
nome a ser usado para criar o identificador de agente (AID, do inglês Agent ID) do
agente clone. O processo de clonagem em si é o mesmo da mobilidade, tirando o fato de
que o agente original não é encerrado, resultando, desta forma, em dois agentes iguais,
com execução semelhante em todos os sentidos, exceto as suas identidades.
O Inter-Platform Mobility Service (IPMS, Serviço de Mobilidade Inter-
Plataformas) do JADE é um plugin que foi criado para fornecer a mobilidade entre
plataformas diferentes para agentes implementados em JADE, o que não é possível por
meio do Mobility Agent Service.
O IPMS foi especificamente projetado para ser o mais transparente possível para
o programador do agente, garantindo que a migração inter-plataformas seja tão simples
quanto a migração intra-plataforma. Para tanto, foi considerada a especificação FIPA
Agent Management Support for Mobility Specification (do inglês, Especificação FIPA
de Apoio à Gestão da Mobilidade).
O mecanismo central da IPMS é a movimentação de agentes entre plataformas
usando mensagens FIPA-ACL, implementadas segundo especificações da FIPA, como
o meio de transporte. Essas mensagens são enviadas entre a os agentes responsáveis
pelo gerenciamento das plataformas das extremidades do processo de
migração. Algumas alterações foram feitas com a especificação FIPA original, de forma
que uma ontologia define duas ações. A primeira delas representa o movimento de
código do agente e instância, o segundo representa a ativação do agente, uma vez que a
migração está completa.
Ambas as ações, movimentar-se e ativar-se, são realizadas usando o padrão de
protocolo de interação proposto pela FIPA. Em cada caso, uma mensagem de
26
solicitação é enviada para a plataforma de destino com uma mensagem Inform (do
inglês, informar) ou uma mensagem de falha esperada como uma resposta.
27
• A lista de destinatários.
• A ação da comunicação, que indica qual é a intenção do remetente ao
enviar a mensagem. Podem ser: REQUEST (o remetente quer que o
destinatário faça algo), INFORM (o remetente quer que o destinatário
fique ciente de algo), PROPOSE ou CFP (Call For Proposal) (caso o
remetente queira iniciar uma negociação).
• O conteúdo, que possui a real informação a ser trocada pela mensagem.
• Linguagem, indicando qual sintaxe utilizar.
• Ontologia, indicando o vocabulário de símbolos usados no conteúdo.
Além de outros campos, usados para o controle de várias conversações
concorrentes e para especificar um tempo para receber uma resposta.
Para realizar o envio de uma mensagem para outro agente, basta preencher as
informações dos campos da classe ACLMessage e ao final invocar o método send(),
como no exemplo ilustrado na Figura 08. Para o agente receber uma mensagem que está
em sua fila de mensagens, basta este invocar o método receive(). Caso não existam
mensagens, o retorno é nulo.
28
3. Resultados e Discussões
Estudo de caso
Cenário 1:
O usuário requisita, através da plataforma de agentes instalada em seu
dispositivo, a operação de busca de itens. Um agente no servidor central recebe a
requisição e envia o agente Ag1 para o dispositivo cliente. Ag1, ao estacionar no
dispositivo, terá suas credenciais confirmadas pela plataforma, recebendo permissão de
agir no dispositivo. Ag1 exibe ao usuário uma interface de busca de itens da biblioteca.
Os dados exibidos são recebidos do servidor de banco de dados mais próximo, porém
nem todos os dados referentes aos itens pesquisados são baixados, apenas as
informações essenciais para que o usuário encontre o que deseja. O usuário escolhe o
item que deseja reservar. O agente aceita a requisição e se move para o servidor de
29
banco de dados, onde realiza as operações requisitadas. Após o término de suas ações, o
agente retorna uma mensagem de sucesso ao dispositivo do usuário.
Caso a reserva tenha sido feita para o mesmo dia, o agente retorna à central,
onde entra em contato com o agente responsável pelo gerenciamento de entrega e
deslocamento de itens para que este tome suas providências para que o item reservado
seja encaminhado ao balcão da bibliotecária, onde o usuário pode, efetivamente, realizar
o empréstimo. Após o término de suas operações para este usuário, Ag1 pode ser
destruído ou usado em outra operação.
Discussão:
O agente consegue realizar as operações com sucesso e evitando ao máximo
falhas provenientes de uma conexão instável, já que após o envio da requisição de
empréstimo não há a necessidade de conexão contínua com o cliente. No entanto, não
há o tratamento do caso em que o item que se deseja reservar não esteja disponível, e
muito menos uma maneira inteligente de lidar com isto para uma melhor interação com
o usuário.
Outro problema, que é inerente da utilização de agentes em dispositivos
heterogêneos, é a necessidade de instalação de uma plataforma de agentes, como a
plataforma JADE. Existem alguns obstáculos quanto a esta questão, como a
compatibilidade, a segurança da plataforma e a dificuldade de instalação e configuração.
Quanto à compatibilidade, uma possível solução é utilizar uma plataforma de
agentes implementada em Java. Desse modo, basta que haja uma máquina virtual Java
sendo executada embaixo da plataforma de agentes. A plataforma JADE atende muito
bem a estes requisitos, já que é totalmente implementada em Java.
A instalação e configuração são pontos mais críticos, pois a dificuldade em
realizá-las pode fazer com que o usuário desista de utilizar os recursos do sistema.
Portanto, a melhor solução é que seja disponibilizado aos usuários um pacote de
instalação que seja fácil de executar e que realize as configurações necessárias sem a
intervenção do usuário. Além disso, dentre as configurações é conveniente que a
plataforma aceite apenas agentes certificados pelo sistema, para manter o dispositivo do
usuário livre de ataques de agentes maliciosos.
Cenário 2:
30
Da mesma maneira que no cenário 1, um agente Ag1 é disparado ao dispositivo
do usuário. O usuário encontra o item que procura através da interface oferecida pelo
agente e submete a solicitação. O agente então verifica se o item pedido encontra-se
disponível para empréstimo/reserva. Caso positivo, Ag1 salta para o servidor de banco
de dados e realiza as operações necessárias.
Caso seja percebido que aquele item não esteja disponível no momento, o agente
informa este fato ao usuário e retorna ao servidor central, levando consigo o fato de que
o usuário atendido solicitou um item que se encontra indisponível. Estacionado no
servidor central, o agente adiciona esta informação à base de conhecimento ou contacta
o agente responsável por isto. Dessa maneira, tal fato passa a fazer parte do contexto
atual do sistema, e Ag1 pode ser destruído ou usado para outro atendimento.
Em paralelo a esse processo, existem outros agentes encarregados de dar suporte
a outras operações que ocorrem na biblioteca. Um ou mais agentes sensores, por
exemplo, monitoram as devoluções e demais incrementos de estoque de itens.
Chamaremos um desses agentes de Ag2. A cada novo registro de disponibilidade que
Ag2 detecta, Ag2 envia à central o fato de que um novo item acabou de chegar. Isto
pode ser feito tanto via mensagem quanto através de um agente móvel mensageiro. No
servidor central, o novo fato é adicionado ao contexto atual através de um agente
encarregado desta tarefa.
Dessa forma, em determinado momento o item anteriormente detectado como
indisponível por Ag1 é acrescentado à coleção e torna-se disponível. Ag2, então, trata
de realizar sua tarefa de informar tal fato à central. Na central, onde se localiza a base de
conhecimento que define o contexto, um agente Ag3 raciocina sobre o contexto,
buscando tomar as melhores decisões possíveis. Com a adição do fato recém-chegado
de Ag2, Ag3 percebe que o item solicitado pelo cliente de Ag1 agora se encontra
disponível. Através de seu mecanismo de raciocínio, Ag3 pede a um agente Ag4 que
verifique se o usuário mencionado ainda se encontra nos estabelecimentos da biblioteca.
Ag4 realiza sua busca e adiciona o novo fato à base de conhecimento. Se o fato
detectado indicar que o usuário ainda se encontra na biblioteca, Ag3 pode tomar a
decisão de enviar um agente Ag5 para o dispositivo do usuário. Ag5 irá estacionar no
dispositivo que o usuário estiver usando, irá lhe avisar que o item antes solicitado agora
se encontra disponível, e irá lhe oferecer uma interface para confirmação da reserva do
item. Caso a reserva seja confirmada, Ag5 realizará a mesma ação que Ag1, migrando
31
para o servidor de banco de dados e realizando as operações necessárias para a
efetivação da reserva. Em seguida, Ag5 retorna uma mensagem de sucesso ao usuário.
Ainda, se a solicitação de reserva tiver sido feita para o mesmo dia, Ag5 (ou
Ag1, caso o item tenha sido encontrado inicialmente disponível) avisará que o item se
encontrará em breve no balcão da bibliotecária, e solicitará a entrega na central, de
maneira similar ao que é feito no cenário 1.
Discussão:
O cenário 2 apresenta uma evolução do cenário 1 pois, além de tratar do caso em
que o item procurado encontra-se indisponível, ainda adiciona tal fato ao contexto,
possibilitando que decisões inteligentes sejam tomadas, como a de avisar ao usuário
sobre a chegada do item desejado. Além disso, os agentes interagem entre si e agem de
acordo com o contexto, retratando bem as vantagens e aplicações de sistemas
multiagente inseridos em um sistema sensível ao contexto.
O cenário 1 foi implementado utilizando-se o framework JADE para fins
experimentais. Também foram feitos testes com os recursos de clonagem de agentes. Os
experimentos mostram que construir agentes móveis é viável para aplicações
distribuídas, e a elaboração e estudo do cenário 2 mostra como agentes de software
podem representar papéis crucias em sistemas sensíveis ao contexto.
32
Resultados Obtidos
4. Conclusões
Na construção de aplicações voltadas para o desenvolvimento distribuído de
software, é imprescindível que haja suporte à colaboração entre os indivíduos que
interagem por meio do ambiente. Para isso, é importante que informações referentes
diretamente e indiretamente às atividades sendo desenvolvidas em cada local sejam
coletadas e processadas, para que possam auxiliar a aplicação a tratar os eventos que
ocorrem internamente a ela.
33
Para tanto, a utilização de agentes de software móveis pode oferecer uma
solução para o problema, uma vez que podem usufruir tanto de características comuns
de agentes, como reatividade e pró-atividade, para realizar tarefas relacionadas ao
tratamento de contexto, como podem se utilizar da sua mobilidade para visitar
diferentes nós da rede para buscar em outros locais novas informações que sejam
relevantes para o cumprimento de seus objetivos.
Para que exista essa mobilidade, é necessário que haja mecanismos que abordem
como o código a ser executado será transferido de um local para outro, e como os dados
utilizados durante a execução do código e o estado da execução no momento anterior à
migração serão salvos e transmitidos. Além disso, devem ser especificados o papel e o
conhecimento do agente em relação ao sistema, incluindo a interação com outros
agentes e a execução de ações que visam a cumprir seu trabalho no ambiente
distribuído.
Outro ponto importante a ser considerado se refere às vantagens e riscos da
utilização de agentes móveis. Tais agente são extremamente eficientes em sistemas
distribuídos cujos nós estejam conectados a uma rede inalâmbrica, pois não requerem
conexão contínua entre cliente e servidor, além de se portarem muito bem durante falhas
de conexão, devido a suas capacidades de reagirem a situações desfavoráveis. Porém,
um sistema multiagente com agentes móveis deve ser cuidadosamente projetado, pois
agentes móveis são alvos fáceis de agentes maliciosos, o que compromete a segurança
do sistema.
Agentes de software, móveis ou não, são naturalmente interativos (Perini et al,
2002), e para tanto devem poder comunicar-se entre si. Com a mobilidade dos agentes,
podem ocorrer momentos em que agentes heterogêneos entre si necessitem trocar
informações. Para tanto, é importante que as especificações da FIPA sejam observadas,
de forma a manter padrões durante o desenvolvimento de agentes, independentemente
de sua implementação. A plataforma JADE é baseada nas especificações da FIPA, e
possui implementado um serviço que oferece suporte tanto à migração quanto à
clonagem de agentes móveis entre diferentes pontos da rede na qual se encontram
recipientes da plataforma, além de diversos serviços, como os que dão suporte à
comunicação entre agentes e ao ciclo de vida dos agentes.
34
Bibliografia
35
IIOP OMG Internet Inter-ORB Protocol Specification, Common Object Request
Broker Architecture 2.2. ObjectManagement Group, 1999.
JADE Web Site, disponível em “http://jade.tilab.com/”, 2009.
Jansen, W., Karygiannis, T. Nist special publication 800-19 - Mobile Agent
Security, National Institute of Standards and Technology, 2000.
Oliveira, H. M. de. “Técnicas para Projeto e Implementação de Agentes de
Software”. Trabalho de Graduação – Curso de Ciência da Computação – Departamento
de Informática – Universidade Estadual de Maringá – UEM – Maringá, 2000.
Perini, A., Susi, A., Giunchiglia, F. Designing Coordination Among Human and
Software Agents. Reporte Técnico. Universidade de Trento, Trento, Itália, 2002.
Puliato, A., Riccobene, S., Scarpa, M.. An analytical comparison of the client-
server, remote evaluation and mobile agents paradigms. In Proceedings of the Third
International Symposium on Mobile Agents, página 278. IEEE Computer Society,
1999.
Shehory, O., Sycara, K., Chalasani, P., Jha, S. Agent cloning: an approach to
agent mobility and resource allocation. IEEE Communications Magazine, 36(7):58–67,
1998.
Spyrou, C., Samaras, G., Pitoura, E., Evripidou, P. Mobile agents for wireless
computing: the convergence of wireless computational models with mobile-agent
technologies. Mobile Networks and Applications , 9(5):517#528, 2004.
Tanenbaum, A.S. and Van Steen, M. Distributed Systems: Principles and
Paradigms. Prentice Hall PTR, Upper Saddle River, NJ, 2001.
Titkov, L. Agent-Based Framework to Support Location-Aware Services and
Manage Privacy for Nomadic Users. PhD Thesis. 2005. WQueen Mary College
University of London of Eletronic Engineering. 2005.
Vieira, V. A domain-independent framework for designing context-sensitive
systems. Tese de Doutoramento, CIn Universidade Federal de Pernambuco, Recife,
Pernambuco, 2008.
Vieira V., Souza D., Salgado, A. C., Tedesco, P., Uso e Representação de
Contexto em Sistemas Computacionais. In: Cesar A. C. Teixeira; Clever Ricardo G. de
Farias; Jair C. Leite; Raquel O. Prates. (Org.). Tópicos em Sistemas Interativos e
Colaborativos. São Carlos: UFSCAR, 2006, p. 127-166.
Wooldridge, M., Jennings, N. R. Intelligent Agents: Theory and Practice. Texto
submetido para Knowledge Engineering Review, Reino Unido, 1995.
36
Zaslavsky, A. Mobile Agents: Can They Assist with Context Awareness?.
Proceedings of the 2004 IEEE International Conference on Mobile Data Management
(MDM’04). 2004.
37