um sistema para compartilhamento de arquivos …silveira/ine602200/artigos/tcc_igoribas.pdf ·...

85
UNIVERSIDADE FEDERAL DE PELOTAS INSTITUTO DE FÍSICA E MATEMÁTICA DEPARTAMENTO DE MATEMÁTICA, ESTATÍSTICA E COMPUTAÇÃO CURSO DE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO UM SISTEMA PARA COMPARTILHAMENTO DE ARQUIVOS EM REDES P2P UTILIZANDO UMA ABORDAGEM MULTIAGENTES por IGOR KOTH RIBAS Monografia apresentada ao Curso de Bacharelado em Ciência da Computação da Universidade Fededral de Pelotas como requisito parcial à obtenção do título de Bacharel em Ciência da Computação. Prof. Dr. Ricardo Azambuja Silveira Orientador Pelotas, março de 2003.

Upload: vonga

Post on 20-Jan-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

UNIVERSIDADE FEDERAL DE PELOTAS

INSTITUTO DE FÍSICA E MATEMÁTICA

DEPARTAMENTO DE MATEMÁTICA, ESTATÍSTICA E COMPUTAÇÃO

CURSO DE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO

UM SISTEMA PARA COMPARTILHAMENTO DE ARQUIVOS EM REDES P2P

UTILIZANDO UMA ABORDAGEM MULTIAGENTES

por

IGOR KOTH RIBAS

Monografia apresentada ao Curso de Bacharelado em Ciência da Computação da

Universidade Fededral de Pelotas como requisito parcial à obtenção do título de Bacharel

em Ciência da Computação.

Prof. Dr. Ricardo Azambuja Silveira Orientador

Pelotas, março de 2003.

II

Este trabalho é dedicado aos meus pais, que nunca

mediram esforços para me proporcionar uma

educação de qualidade. Agradeço o meu orientador,

por acreditar na minha capacidade de desenvolver

este trabalho. Também agradeço a todos os

professores e colegas por estes quatro anos de

convivência. E para finalizar, agradeço a todos os

meus verdadeiros amigos e todo mundo que sempre

me deu uma força. Valeu!

III

Sumário Lista de Abreviaturas ...................................................................................V

Lista de Figuras...........................................................................................VI

Lista de Tabelas ........................................................................................ VII

Resumo ....................................................................................................VIII

Abstract ....................................................................................................... IX

1 Introdução.................................................................................... 10

1.1 Motivação ....................................................................................................... 11 1.2 Objetivos ......................................................................................................... 13 2 Compartilhamento de Arquivos em Redes de Computadores 16

2.1 Introdução ....................................................................................................... 16 2.2 Modelo cliente-servidor .................................................................................. 17 2.3 Modelo P2P..................................................................................................... 18 2.3.1 Modelo P2P puro ............................................................................................ 19 2.3.2 Modelo P2P com servidor de registro de pontos ............................................ 19 2.3.3 Modelo P2P com servidores de registro de pontos e consulta........................ 20 2.4 Modelo P2P e compartilhamento de arquivos ................................................ 21 2.5 Exemplo de aplicações P2P para compartilhamento de arquivos................... 23 3 Inteligência Artificial Distribuída.............................................. 24

3.1 Definição de agentes ....................................................................................... 24 3.2 Resolução distribuída de problemas e sistemas multiagentes......................... 27 3.3 Considerações sobre sistemas multiagentes.................................................... 28 3.3.1 Classificação de sistemas multiagentes .......................................................... 28 3.3.2 Sistemas multiagentes homogêneos e heterogêneos....................................... 28 3.3.3 Métodos de coordenação................................................................................. 28 3.4 Comunicação em sistemas multiagentes......................................................... 30 3.5 Ferramentas para construção de sistemas multiagentes.................................. 35 4 FIPA e FIPA-OS.......................................................................... 37

4.1 Introdução ....................................................................................................... 37 4.2 Arquitetura Abstrata FIPA.............................................................................. 38 4.2.1 Serviços........................................................................................................... 39 4.1.1.1 Serviço diretório de agente – ADS ................................................................. 40 4.2.1.2 Serviço diretório de serviços – SDS ............................................................... 41 4.2.1.3 Serviço transporte de mensagens – MTS........................................................ 41

IV

4.3 Gerenciamento de Agentes ............................................................................. 42 4.3.1 Identificação de agentes.................................................................................. 43 4.3.2 Facilitador de diretório – DF........................................................................... 44 4.3.3 Sistema de gerenciamento de agentes – MAS ................................................ 45 4.3.4 Serviço de transporte de mensagens – MTS................................................... 45 4.3.4.1 Envelope ......................................................................................................... 46 4.3.4.2 Carga útil......................................................................................................... 47 4.3.4.3 Canal de comunicação de agente – ACC........................................................ 47 4.4 A linguagem de comunicação de agentes – ACL ........................................... 49 4.4.1 Estrutura da mensagem FIPA ACL ................................................................ 49 4.4.2 Atos de comunicação ...................................................................................... 51 4.4.3 Linguagem de conteúdo.................................................................................. 52 4.4.4 Protocolos de interação................................................................................... 53 4.5 Transporte de mensagens de agente................................................................ 55 4.5.1 IIOP................................................................................................................. 55 4.5.2 WAP................................................................................................................ 55 4.5.3 HTTP............................................................................................................... 56 4.6 FIPA-OS ......................................................................................................... 56 4.6.1 Distribuição FIPA-OS..................................................................................... 57 4.6.2 Componentes FIPA-OS .................................................................................. 58 4.6.2.1 Implementação do agente ............................................................................... 58 4.6.2.2 Estrutura de agente JESS - JESS Agent Shell ................................................. 58 4.6.2.3 Estrutura de agente - Agent Shell .................................................................... 59 4.6.2.4 Gerenciador de tarefas .................................................................................... 59 4.6.2.5 Gerenciador de conversações – CM ............................................................... 61 4.6.2.6 Serviço de Transporte de Mensagem - MTS .................................................. 61 4.6.2.7 Protocolos de transporte de mensagens - MTP............................................... 62 4.6.3 Configuração e execução do ambiente FIPA-OS ........................................... 63 5 Sistema de Compartilhamento de Arquivos para FIPA-OS... 65

5.1 Visão geral ...................................................................................................... 65 5.2 Descrição dos agentes ..................................................................................... 65 5.2.1 File Finder Agent – FFA................................................................................. 66 5.2.1.1 Modelo interno do FFA .................................................................................. 68 5.2.1.2 Interação interface gráfica – FFA ................................................................... 69 5.2.2 Shared Folders Manager Agent – SFMA........................................................ 70 5.2.2.1 Modelo interno do SFMA............................................................................... 72 5.2.2.2 Interação interface gráfica – SFMA................................................................ 74 5.3 Modelo de organização do sistema de compartilhamento de arquivos........... 75 5.4 O modelo de troca de mensagens.................................................................... 76 5.5 Execução do sistema ....................................................................................... 78 6 Conclusão ..................................................................................... 79

7 Bibliografia................................................................................... 82

V

Lista de Abreviaturas ACC Agent Communication Channel ACL Agent Communication Language ADE Agent-Directory-Entry ADS Agent-Directory-Service AI Artificial Intelligence AID Agent Identification AMS Agent Management System AP Agent Platform CCL Constraint Choice Language CCL Constraint Choice Language CSP Constraint Satisfaction Problem DAI Distributed Artificial Intelligence DARPA Defense Advanced Research Projects Agency DF Directory Facilitator DPS Distributed Problem Solving DS Distributed Systems FFA File Finder Agent FIPA Foundation for Intelligent Physical Agents FIPA-OS Foundation for Intelligent Physical Agents Open Systems FTP File Transfer Protocol HTTP HyperText Transfer Protocol IIOP Internet InterORB Protocol JESS Java Expert System Shell JVM Java Virtual Machine KIF Knowledge Interchange Format KIF Knowledge Interchange Format KQML Knowledge Query and Manipulation Language MAS Multiagent Systems MTP Message Transport Protocol MTS Message-Transport-Service OMG Object Management Group P2P Point-to-point RDF Resource Description Framework RDF Resource Description Framework RMI Remote Method Invocation SDS Service-Directory-Service SFMA Shared Folders Manager Agent SL Semantic Language SL Semantic Language SMS Short Message Service SMTP Simple Mail Transfer Protocol TCP/IP Transport Control Protocol / Internet Protocol TM Task Manager WAP Wireless Application Protocol

VI

Lista de Figuras FIGURA 1 – Exemplo de comunicação em um modelo cliente-servidor. ....................... 18 FIGURA 2 – Modelo P2P puro. ....................................................................................... 19 FIGURA 3 – Modelo P2P com servidor de registro de pontos. ....................................... 20 FIGURA 4 – Modelo P2P com servidores de registro de pontos e procura. .................... 21 FIGURA 5 – Modelo físico do sistema de compartilhamento de arquivos P2P. ............. 22 FIGURA 6 – Modelo lógico do sistema de compartilhamento de arquivos P2P. ............ 22 FIGURA 7 – Classificação da DAI .................................................................................. 27 FIGURA 8 – Classificação de tipos de coordenação de agentes. ..................................... 29 FIGURA 9 – Exemplo de modelo de camadas para comunicação de agentes. ................ 34 FIGURA 10 – Modelo de serviços da arquitetura abstrata FIPA. .................................... 39 FIGURA 11 – Representação de uma Entrada de Diretório de Agente – ADE. .............. 41 FIGURA 12 – Modelo de gerenciamento de agentes FIPA. ............................................ 43 FIGURA 13 – Transformação de uma mensagem em mensagem de transporte.............. 46 FIGURA 14 – Formas de comunicação entre agentes de plataformas diferentes. ........... 48 FIGURA 15 – Visão geral dos componentes FIPA-OS.................................................... 58 FIGURA 16 – Composição lógica do modelo de camadas do MTS do FIPA-OS. .......... 62 FIGURA 17 – Interface gráfica do AgentLoader. ............................................................ 64 FIGURA 18 – Interface gráfica do agent FFA. ................................................................ 67 FIGURA 19 – Modelo interno do FFA............................................................................. 68 FIGURA 20 – Interação interface gráfica – FFA. ............................................................ 70 FIGURA 21 – Interface gráfica do SFMA. ...................................................................... 72 FIGURA 22 – Modelo interno do SFMA. ........................................................................ 73 FIGURA 23 – Interação interface gráfica – SFMA.......................................................... 75 FIGURA 24 – Modelo de troca de mensagens. ................................................................ 76

VII

Lista de Tabelas

TABELA 1– Todos os parâmetros de uma mensagem FIPA ACL. ................................. 49 TABELA 2 – Performativas FIPA.................................................................................... 51 TABELA 3 – Protocolos Padrão de Interação FIPA. ....................................................... 54 TABELA 4 – Pacotes FIPA-OS. ...................................................................................... 57 TABELA 5 – Eventos tratados por um TM...................................................................... 60

VIII

Resumo

O termo redes ponto-a-ponto (P2P) refere-se a um modelo de redes de

computadores baseado em sistemas e aplicações que empregam recursos distribuídos para

executar uma função de forma descentralizada. Atualmente, um tipo muito popular de

aplicação P2P é o sistema para compartilhamento de arquivos. O rápido crescimento da

Internet colabora para novos lançamentos de aplicações para redes de compartilhamento

de arquivos.

Apesar de inúmeras aplicações para compartilhamento de arquivos tornarem-se

disponíveis a cada dia, poucas destas novas aplicações apresentam alguma novidade no

que se refere à abordagem de desenvolvimento. O comportamento cooperativo que os

sistemas de compartilhamento arquivos em redes de computadores apresentam já é por si

só uma justificativa para utilizar uma abordagem de desenvolvimento multiagentes para

estes sistemas.

Este trabalho tem por objetivo apresentar um sistema para compartilhamento de

arquivos em redes P2P utilizando uma abordagem multiagentes com o auxílio da

ferramenta de desenvolvimento de agentes FIPA-OS (Foundation for Intelligent Physical

Agents Open Systems).

Palavras-chave: Sistemas Multiagentes, Sistemas Distribuídos, Compartilhamento de

Arquivos, FIPA, P2P.

IX

Abstract

The term peer-to-peer (P2P) refers to a computer network model based on

systems and applications that use distributed resources in a descentralized way. Actually,

a very popular type of P2P application is the file-sharing system. The fast Internet

growing contributes with new releases of applications for file-sharing networks.

Despite of many file-sharing applications became available every day, just a

few of then introduces something new in which refers to the development approach. The

computer network file-sharing systems cooperative behavior for itself justifies the use of

a multiagent development approach for those systems.

The goal of this work is to introduce a P2P network file-sharing system using a

multiagent approach, supported by the agent development toolkit FIPA-OS (Foundation

for Intelligent Physical Agents Open Systems).

Keywords: Multiagent Systems, Distributed Systems, File-Sharing, FIPA, P2P.

10

1 Introdução

Em um mundo onde a Internet é cada vez mais popular, soluções baseadas em

redes ponto-a-ponto (peer-to-peer – P2P) estão cada vez mais em evidência [ORA 2001].

Existem várias definições para o modelo de comunicação P2P. o termo P2P refere-se a

uma classe de sistemas e aplicações que empregam recursos distribuídos para executar

uma função de forma descentralizada [MIL 2002].

Muito se tem falado atualmente deste modelo de interligação de redes de

computadores, dando a idéia para muitos que este modelo é uma tecnologia recente. A

área de Sistemas Distribuídos (Distributed Systems – DS) [COU 94] já utiliza este

modelo de pontos (também chamados nodos) altamente acoplados, para

compartilhamento de recursos computacionais como forma de aumentar o desempenho

na resolução de problemas complexos. Dois computadores ligados um ao outro também é

um exemplo muito simples de rede P2P. A nomenclatura P2P é recente, o modelo ponto-

a-ponto não.

Grande parte da mídia em torno do modelo P2P se deve ao fato do sucesso de

softwares para compartilhamento de arquivos através da Internet que utilizam o modelo

P2P de comunicação. Com a rápida expansão da Internet e com o custo cada vez menor

das redes de alta velocidade, os usuários de redes de computadores têm cada vez mais

acesso a uma gigantesca quantidade de informação. Essa informação pode ser acessada

em tempo real, como é o caso das rádios de música que existem na Internet, entretanto

grande parte desta informação ainda é fornecida na forma de arquivos. Por isso é

necessário um serviço de rede que se encarregue de encontrar a informação na forma de

arquivos. Os sistemas de compartilhamento de arquivos via Internet utilizando o modelo

P2P surgiram para resolver este problema.

Um sistema de compartilhamento de arquivos que utiliza o modelo P2P consiste

basicamente de um número variável de nodos (hosts da rede) que disponibilizam uma

quantidade limitada de seus arquivos para outros nodos da rede. Qualquer nodo da rede é

acessível por todos os nodos, de forma direta. A comunicação direta entre os nodos da

11

rede tem a vantagem de evitar possíveis pontos de gargalo (bottleneck) que são comuns

em sistemas centralizados.

Uma característica comum a todos os sistemas P2P para compartilhamento de

arquivos é a existência de um modelo de comunicação de rede que, no nível de aplicação,

define uma rede virtual com seus próprios mecanismos de roteamento de dados [RIP

2002]. A topologia desta rede virtual e os mecanismos de roteamento de dados definem

de forma significativa propriedades da aplicação tais como: desempenho, segurança e

anonimato do usuário. A topologia também define os custos em termos de recursos

operacionais.

Outra característica marcante é que estes sistemas são formados por uma

configuração de ambiente definidos por uma arquitetura distribuída, diferentes de outras

formas de compartilhamento de arquivos, que são definidos por uma arquitetura

centralizada.

O conjunto de características de sistemas que utilizam o modelo P2P para

compartilhamento de arquivos aponta para o desenvolvimento destes sistemas com o

auxílio de recursos da Inteligência Artificial. A forma cooperativa com que cada nodo do

sistema se comporta e as interações entre cada nodo, através de negociações, concessões,

propostas e consultas pode ser modelada através de uma abordagem de desenvolvimento

de software orientado a agentes [BIG 2001].

Este trabalho situa-se no contexto de Sistemas Distribuídos, mais

especificamente na abordagem de Inteligência Artificial Distribuída (Distributed

Artificial Intelligence – DAI) [FER 99] e contempla a utilização de sistemas multiagentes

(Multiagent Systems – MAS) [SYC 98] interconectados pela Internet como instrumento

para compartilhar arquivos.

A seguir, serão discutidos as motivações e objetivos desta monografia.

1.1 Motivação

À medida que redes de computadores se tornam cada vez mais comuns e mais

pessoas têm acesso a essa tecnologia, é natural que sistemas de informática tornem-se

cada vez mais interligados, utilizando a abordagem distribuída. Sistemas distribuídos

12

estão se tornando a principal forma de troca e armazenamento de arquivos. Como

conseqüência, algum tipo de suporte para interação com usuário, coordenação e

integração de informações de sistemas heterogêneos torna-se essencial.

Uma grande motivação para utilização de sistemas P2P é a forma como a

Internet é organizada. O modelo de endereçamento utilizado na Internet é o de número IP

(Internet Protocol) de 32 bits, chamado Ipv4. O número fixo de endereços possíveis

(chamados endereços IP) com esse modelo é, teoricamente, 4.294.967.296, mas na

prática esse número é menor porque alguns endereços IP são reservados e não podem ser

usados.

Com o já citado fato da crescente popularização da Internet, cada vez mais

computadores são adicionados à rede e a quantidade limitada de endereços IP começou a

causar grandes transtornos, pois cada computador na rede deve ter um endereço IP

distinto. Para contornar esse problema, os endereços IP da maioria dos computadores

conectados a rede começou a ser atribuído de forma dinâmica, técnica conhecida por

endereçamento por IP dinâmico [TAN 97]. O endereço IP dinâmico é atribuído por um

servidor DHCP (Dynamic Host Configuration Protocol). A desvantagem dessa técnica é

que o computador que tiver seu endereço IP atribuído por DHCP nem sempre vai possuir

o mesmo endereço IP. O endereço IP pode mudar a cada vez que esse computador se

conecta a rede (por isso é chamado de endereço IP dinâmico).

Caso um usuário de uma rede deseje transferir um arquivo de um computador

remoto para o seu computador, basta o usuário saber o endereço IP do computador

remoto e o número da porta de serviço [TAN 97] para transferir o arquivo. Só que caso o

endereço IP do computador remoto seja atribuído de forma dinâmica, não há como o

usuário ter certeza do número do endereço IP do computador remoto.

No sistema de compartilhamento de arquivos através de rede P2P que este

trabalho propõe, esse problema não ocorre porque o usuário não precisa saber o endereço

IP do computador que possui o arquivo que ele deseja transferir. Na verdade, devido ao

modelo de organização do sistema, o usuário não precisa saber qual computador possui o

arquivo. O usuário deve fornecer somente o nome do arquivo para o sistema e o próprio

sistema se encarrega dos mecanismos de consulta e procura de arquivos. Essa

13

transparência de localização é uma importante característica dos sistemas de

compartilhamento de arquivos P2P.

O processo estabelecido nas consultas e requisições por arquivos entre os nodos

do sistema deve ser feito de forma coordenada. Este processo normalmente segue um

protocolo bem definido de troca de mensagens, com o objetivo de negociar uma

transferência de arquivo. Uma abordagem natural para resolução deste tipo de problema é

a abordagem multiagente [FER 99]. Um sistema multiagentes pode ser definido como um

sistema composto por um conjunto de entidades especializadas, chamadas agentes, que se

comunicam para atingir um objetivo, que pode ser global ou individual [ATT 2000]. É

justamente esta característica de comunicação, para estabelecer compromissos de

cooperação ou para negociações, que tornam a abordagem multiagentes ideal para

modelar sistemas de compartilhamento de arquivos P2P. Cada agente representa um nodo

do sistema, que estabelece um vínculo de cooperação (transferência de arquivo) através

da negociação por troca de mensagens.

Ambientes para desenvolvimento e modelagem de agentes de software

encontram-se atualmente em um estado avançado de desenvolvimento. Ferramentas

como ZEUS [ZEU 2002] e FIPA-OS [FIPA 2002p] são largamente utilizadas no meio

acadêmico em todo o mundo. Ambas são totalmente desenvolvidas em Java. Java é muito

utilizada no desenvolvimento deste tipo de ferramenta devido às facilidades que esta

linguagem de programação oferece para contornar dificuldades que surgem em

desenvolver sistemas distribuídos. O FIPA-OS ainda possui a vantagem de seguir um

conjunto de especificações para interoperação de sistemas multiagentes chamada FIPA.

Estas especificações fornecem meios para que qualquer sistema multiagente

implementado com ferramentas compatíveis com estas especificações possam

interoperar.

1.2 Objetivos

A partir do que foi descrito até agora, em especial a motivação, é possível

destacar os principais objetivos que este trabalho pretende atingir. O objetivo deste

trabalho é implementar e apresentar um software para compartilhamento de arquivos em

14

rede, utilizando o modelo P2P de conectividade. Para que este objetivo geral seja

alcançado, alguns objetivos específicos foram estabelecidos:

− propor uma arquitetura de sociedade de agentes que possa ser aplicada na

implementação do sistema de compartilhamento de arquivos;

− organizar esta arquitetura de forma que cada agente represente um nodo

do sistema;

− propor um modelo de agentes que represente de forma adequada as

funções de cada nodo do sistema, tais como: gerência, consulta e transferência

de arquivos através da rede;

− propor a utilização de mecanismos de comunicação e cooperação entre os

agentes do sistema, para viabilizar a execução das funções do sistema;

− contribuir para a popularização da utilização da abordagem multiagente

para desenvolvimento de software.

Para que estes objetivos sejam alcançados, o trabalho apresentado nesta

monografia baseia-se na hipótese de que um sistema de compartilhamento de arquivos

P2P pode ser implementado a partir de agentes organizados em um sistema multiagentes.

Cada agente representa um nodo do sistema, que troca informações e coopera com outros

agentes, usando para tal uma linguagem de comunicação. Além disso, cada agente possui

uma tarefa bem definida e cada tarefa é dividida em outras tarefas mais simples, com o

objetivo de tornar o sistema o mais modular possível. É através da interação entre os

agentes que um arquivo é transferido de um local habitado por um agente para outro.

Esta monografia está organizada da seguinte forma. O capítulo 2 faz uma breve

introdução aos principais modelos de conectividade de redes de computadores. Logo em

seguida, o capítulo 3 apresenta as principais abordagens da Inteligência Artificial para

resolução de problemas distribuídos. O capítulo 4 apresenta as especificações de

arquitetura de sistemas multiagentes FIPA (Foundation for Intelligent Physical Agents) e

a ferramenta FIPA-OS (Foundation for Intelligent Physical Agents Open Systems),

baseada nestas especificações. No capítulo 5, é descrito o sistema de compartilhamento

15

de arquivos desenvolvido baseado nos conceitos descritos nos capítulos anteriores e,

finalmente, no capítulo 6 é apresentada a conclusão do trabalho.

16

2 Compartilhamento de Arquivos em Redes de Computadores

Este capítulo apresenta uma breve introdução aos dois tipos básicos de rede de

computadores do ponto de vista da maneira com que dados são compartilhados: ponto-a-

ponto (peer-to-peer – P2P) e cliente-servidor.

2.1 Introdução

A informatização é um processo irreversível. Em todos os lugares ela se faz

presente, mesmo fora do ambiente explícito da informática. Escolas, agências de turismo,

hospitais e até mesmo residências, só para citar alguns exemplos, estão cada vez mais

informatizados. E muito do sucesso desse processo se deve as redes de computadores. É

raro encontrar um lugar onde não se encontra uma rede de computadores. Por exemplo,

em toda área urbana é possível encontrar um caixa eletrônico de banco. Todas esses

caixas eletrônicos estão interligados a uma rede de uma central bancária. As redes

surgiram da necessidade de troca e compartilhamento de informações de forma rápida e

barata. O melhor exemplo de sucesso das redes de computadores se chama Internet. Com

a Internet, o conceito de rede de computadores rápida e barata para troca e

compartilhamento de informações é levado ao extremo: através dela é possível receber as

principais matérias de um jornal localizado a milhares de quilômetros de distância em

questão de segundos, com o custo de uma ligação telefônica local.

Atualmente, a Internet oferece para seus usuários um grande número de

serviços. É possível encontrar aplicações para quase todas as necessidades. Como a

demanda por aplicações de Internet é muito grande, devido ao fato de existir atualmente

dezenas de milhões de usuários, é grande o aumento de aplicações cada vez mais

específicas. Por exemplo, se há alguns anos existiam poucos programas para

comunicação online de usuários, hoje em dia existe programas específicos para e-mail,

17

mensagens instantâneas, bate-papo (chat). Estes programas podem ser mais específicos

ainda. Por exemplo, existem programas de mensagens instantâneas de texto, outro para

voz, outro para vídeo. O que é possível concluir é que cada vez mais os usuários da

Internet procuram por soluções específicas para problemas.

Um exemplo de aplicação muito utilizada na Internet são programas para

transferência de arquivos. Este tipo de serviço é tão utilizado que existem protocolos

específicos apenas para esta tarefa, como o File Transfer Protocol – FTP, por exemplo. O

modelo de serviço FTP consiste de um servidor de arquivos, chamado servidor FTP que

disponibiliza diretórios do sistema operacional hospedeiro para escrita e/ou leitura.

Usuários que desejam acessar os diretórios do servidor FTP precisam de um programa

cliente FTP, além de uma conta de acesso no servidor FTP. O cliente FTP fornece a

interface para acessar o servidor FTP. A interface consiste de ferramentas para acessar o

servidor FTP a partir de um endereço de rede, um serviço de login no servidor FTP, além

da interface para os comandos do protocolo FTP para criar, copiar, apagar e renomear

arquivos, por exemplo. O modelo de serviço FTP é um exemplo clássico do modelo

cliente-servidor [TOR 2001].

2.2 Modelo cliente-servidor

O modelo cliente-servidor consiste de um cliente, que é um processo que inicia

uma atividade, e um servidor, que é um processo que aguarda requisições de ações de

clientes, executando estas ações a medida do possível. É um modelo que possui uma

organização centralizada, devido ao fato de um servidor concentrar várias conexões de

clientes. Voltando ao exemplo do servidor FTP, um cliente A pode se conectar a este

servidor, transferir um arquivo “xyz” para o servidor FTP e fechar a conexão. Um outro

cliente B pode então se conectar ao mesmo servidor FTP, transferir o arquivo “xyz” para

o seu computador e fechar a conexão. A figura 1 ilustra esta situação. O que aconteceu na

prática é que o arquivo “xyz” foi transferido do cliente A para o cliente B através do

servidor FTP.

18

FIGURA 1 – Exemplo de comunicação em um modelo cliente-servidor.

O servidor FTP do exemplo anterior poderia não fazer parte da transferência de

arquivo se o cliente A estivesse conectado diretamente ao cliente B. Neste caso, ambos

computadores conectados poderiam estabelecer regras para funcionarem tanto como

cliente quanto servidor. Este modelo descentralizado é chamado modelo ponto-a-ponto

(peer-to-peer – P2P) [ORA 2001]. O modelo P2P é descrito com detalhes na próxima

seção.

2.3 Modelo P2P

O modelo P2P consiste na interconexão o direta entre duas máquinas, visando o

compartilhamento de arquivos e/ou serviços. Esta é uma definição clássica [ORA 2001],

que estipula que os nós da rede devem estabelecer suas conexões de forma independente

e descentralizada, cada um deles desempenhando as funções de cliente e servidor.

A grande vantagem do modelo P2P em relação ao modelo cliente-servidor é a

pouca dependência de um servidor para centralizar conexões. Na verdade, alguns

modelos P2P não utilizam nenhum tipo de servidor. Existem três tipos de modelo P2P

[DRE 2001]:

19

− Modelo P2P puro.

− Modelo P2P com servidor de registro de pontos.

− Modelo P2P com servidores de registro de pontos e consulta.

2.3.1 Modelo P2P puro

No modelo P2P puro, cada ponto da conexão estabelece sua própria política de

conexão, diferente do modelo cliente-servidor onde o servidor dita as regras. Cada ponto

pode fazer requisições de serviço para o outro ponto, transferir dados de e para outro

ponto, ou seja, cada ponto funciona como cliente e servidor. A grande desvantagem deste

modelo é que como descobrir outros pontos na rede. Como não existe um servidor para

concentrar pontos, o usuário deve conhecer o endereço do ponto que deseja se conectar.

A figura 2 ilustra o modelo P2P puro.

FIGURA 2 – Modelo P2P puro.

2.3.2 Modelo P2P com servidor de registro de pontos

Para solucionar o problema encontrado no modelo anterior, este novo modelo

possui um servidor com uma tabela com todos os pontos conectados e seus respectivos

endereços de rede. Quando um novo ponto se conecta da rede P2P, ele deve primeiro

20

registra-se no servidor de pontos. A partir deste momento, o novo ponto pode receber

informações sobre os endereços de todos os pontos da rede P2P. Um grande problema

deste modelo (e do modelo anterior) é que um usuário deve visitar cada ponto da rede

P2P a procura da informação desejada. A figura 3 ilustra o modelo P2P de registro de

pontos.

FIGURA 3 – Modelo P2P com servidor de registro de pontos.

2.3.3 Modelo P2P com servidores de registro de pontos e consulta

O modelo P2P com servidores de registro de pontos e consulta oferece um

serviço de consulta de serviços oferecidos por cada ponto que não existe nos dois

modelos anteriores. O servidor de consulta armazena informações sobre estes serviços e

cada ponto da rede P2P pode consultá-lo. Todos os pontos da rede que oferecem algum

tipo de serviço devem atualizar suas informações de serviço no servidor de consultas

constantemente. A figura 4 ilustra este modelo.

21

FIGURA 4 – Modelo P2P com servidores de registro de pontos e procura.

2.4 Modelo P2P e compartilhamento de arquivos

Uma das formas mais comuns de uso do modelo P2P é para compartilhamento

de arquivos. Em uma rede P2P de compartilhamento de arquivos, cada usuário (ou ponto)

da rede compartilha fisicamente um determinado número de arquivos. Todos os usuários

da rede podem acessar estes arquivos. Normalmente os programas para acessar uma rede

P2P para compartilhamento de arquivos possuem uma interface pela qual é possível fazer

consultas sobre disponibilidade de um arquivo. Os resultados da consulta são mostrados

pela interface ao usuário que pode então acessar esses arquivos. Este tipo de serviço

oferece transparência de localização do arquivo ao usuário. O sistema como um todo

funciona logicamente como um grande repositório de arquivos acessível a todos usuários.

A figura 5 ilustra o modelo físico do sistema e a figura 6 ilustra o modelo lógico.

22

FIGURA 5 – Modelo físico do sistema de compartilhamento de arquivos P2P.

FIGURA 6 – Modelo lógico do sistema de compartilhamento de arquivos P2P.

23

2.5 Exemplo de aplicações P2P para compartilhamento de arquivos

No final dos anos 90, surgiram na Internet vários softwares de

compartilhamento de arquivos que utilizavam o modelo P2P. Esta seção faz uma breve

explicação de dois dos mais populares:

− Napster: O Napster [NAP 2002] foi o primeiro software com tecnologia

P2P para compartilhamento de arquivos que fez sucesso. No auge de seu uso,

chegou a incrível marca de 30 milhões de usuários. Era utilizado para

compartilhar arquivos de música. Utilizava o modelo P2P com servidores de

registro de pontos e consultas. Um servidor registrava todos usuários online. Ao

se registrar no sistema, o software do usuário enviava para o servidor uma lista

com todos os arquivos de música compartilhados. Para fazer uma pesquisa

sobre um arquivo específico, era enviada uma consulta ao servidor que

retornava uma lista de usuários online com o arquivo. A partir daí era possível

transferir o arquivo.

− Kazaa: O Kazaa [KAZ 2002] é muito semelhante ao Napster, mas possui

a vantagem de compartilhar qualquer tipo de arquivo. O usuário escolhe uma

lista de diretórios que deseja compartilhar e se registra no sistema com um nome

de usuário. É possível fazer pesquisas sobre tipos de arquivos específicos ou

pesquisas de arquivos de um usuário. O Kazaa é um dos programas P2P mais

utilizados atualmente.

24

3 Inteligência Artificial Distribuída

Sistemas de Inteligência Artificial Distribuída (Distributed Artificial

Intelligence – DAI) [FER 99] [RIC 94] podem ser definidos como sistemas cooperativos

onde um conjunto de entidades, denominados agentes, atuam em conjunto para

solucionar um problema. A DAI é uma sub-área da Inteligência Artificial (Artificial

Intelligence – AI) [RIC 94] que estuda problemas que também são comuns à área de

Sistemas Distribuídos (Distributed Systems – DS) [COU 94]. Estes sistemas utilizam uma

abordagem de solução de problemas baseada no comportamento das sociedades humanas,

em contraposição à abordagem clássica da AI, centrada no comportamento do ser

humano como indivíduo, ou seja, a DAI concentra-se em sistemas de agentes enquanto

que a AI estuda o agente propriamente dito. Sua ênfase de estudo está nas ações e

interações da sociedade, utilizando para isso métodos clássicos de AI como representação

de conhecimento e métodos de inferência.

Esta abordagem é útil porque, para alguns problemas complexos, que exigem

um alto grau de poder processamento, a única possibilidade de solução é através de um

sistema distribuído. A DAI pode ser considerada então uma evolução da AI clássica.

3.1 Definição de agentes

Atualmente existem diversas definições para o termo agente. Agentes podem ser

descritos como “componentes ativos e persistentes que percebem, tomam decisões, atuam

e se comunicam” [HUH 98]. Baseado em sua funcionalidade, um agente pode ser

definido como: “uma entidade conceitual envolvida na análise, estruturação e

implementação do processo de resolver um problema complexo” [ATT 2000]. Outra

definição para agente pode ser “um sistema encapsulado, que está situado em um

ambiente e é capaz de executar ações flexíveis e autônomas neste ambiente de forma a

alcançar seus objetivos” [WOO 97].

25

Executar ações em um ambiente significa que os agentes não são figuras

passivas e sim, a origem das ações de seu ambiente. As ações são tomadas baseadas no

domínio de conhecimento do agente, determinado seu comportamento. De uma forma

metafórica, os seres humanos são os exemplos mais óbvios de agentes que habitam o

planeta terra, mas não são os únicos. Animais, empresas, governos também são bons

exemplos de agentes.

Ainda utilizando a metáfora do planeta terra como exemplo de ambiente de

agentes, existe uma clara distinção entre agentes racionais e irracionais, ou como são

classificados em DAI, agentes cognitivos e reativos, respectivamente. Dos inúmeros seres

que habitam a terra, o ser humano se destaca por sua excepcional capacidade de se

adaptar ao mundo em que vive. O ambiente planeta terra está sempre mudando, seja por

eventos aleatórios da natureza, seja por atos de seus agentes. Um agente percebe estas

mudanças e executa ações baseadas em sua percepção do mundo para atingir um estado

de equilíbrio, ou objetivo. Por exemplo, no caso de um funcionário de uma empresa que

quer ir de sua casa para o local de trabalho de carro. O funcionário ao sair de casa

percebe que há um excessivo tráfego de carros na estrada que o leva até seu local de

trabalho e, para evitar um possível atraso, resolve ir de metrô. Neste exemplo, o agente

funcionário, com o objetivo de ir ao trabalho, percebe que há um congestionamento de

carros na sua rua. O funcionário deste exemplo é um típico caso de um agente cognitivo.

Um agente pode ser dito cognitivo se ele tenta atingir seus objetivos baseado em suas

crenças sobre o ambiente em que vive. Um agente cognitivo em nível de software pode

ser definido como “um agente que contém não apenas dados e métodos procedimentais,

mas sim uma base de conhecimento do qual é possível inferir novos conhecimentos”

[ATT 2000].

Os agentes reativos diferenciam-se dos agentes cognitivos pelo fato de não

agirem deliberadamente e sim devido a eventos externos, ou seja, apenas reagem a

situações, por isso o nome reativo. Por este motivo um agente reativo é mais simples que

um agente cognitivo e por si só não realiza modificações significativas no ambiente onde

atua. Um comportamento complexo inteligente emerge de um conjunto de muitos agentes

reativos. Utilizando mais uma vez o planeta terra com exemplo de ambiente, a

organização de uma sociedade de abelhas representa bem uma sociedade de agentes

26

reativos. Uma abelha sozinha parece não fazer mudanças no meio que habita, mas é um

fato que a polinização, tarefa vital para a reprodução das plantas é um exemplo de

comportamento complexo que emerge de ações em conjunto.

Existe uma série de atributos que definem o comportamento de um agente [BIG

2001][STO 97][WOO 94]. Dependendo da forma de implementação do agente, estes

atributos podem estar presentes em maior ou menor grau, mas sempre estarão presentes.

Entre estes atributos, destacam – se:

− Adaptabilidade: Um agente pode mudar seu comportamento para melhor

se adaptar a seu ambiente.

− Autonomia: Capacidade de o agente operar sem intervenção direta de um

usuário, e também possuir um certo controle sobre suas ações.

− Interatividade: Interação entre agentes ou de agentes com os usuários

através de uma linguagem de comunicação de agentes.

− Mobilidade: Um agente pode ser capaz de migrar de uma plataforma para

outra.

− Pró-atividade: Agentes devem ser capazes de planejar seus atos e não

simplesmente reagir a estímulos externos.

− Racionalidade: Entre diversas opções de ações a disposição de um agente

em um determinado momento, ele deve ser capaz de escolher a que julgar

melhor.

− Reatividade: Agentes percebem os estímulos externos e respondem com

uma ação respeitando seu comportamento.

− Sociabilidade: Define se um agente é cooperativo (benevolente, altruísta)

ou competitivo (egoísta).

Muitos destes aspectos só são válidos de analisar em um contesto de sociedade

de agentes, ou sistema de agentes. A próxima seção deste capítulo mostra como agentes

são organizados em uma sociedade.

27

3.2 Resolução distribuída de problemas e sistemas multiagentes

A DAI divide-se em duas grandes áreas de estudo: a Resolução Distribuída de

Problemas (Distributed Problem Solving – DPS) e Sistemas Multiagentes (Multiagent

Systems – MAS) [STO 97] como mostra a figura 7 [STO 97].

FIGURA 7 – Classificação da DAI

Na DPS os agentes possuem por objetivo comum a resolução de um problema

pré-determinado. Os agentes são projetados para resolver à apenas este problema

especificamente e, para resolvê-lo, é necessário cooperação, já que cada agente possui

apenas uma visão parcial do problema. Esta cooperação caracteriza-se basicamente por

compartilhamento de conhecimento sobre o problema e sobre o processo de obter uma

solução. A dinâmica de coordenação de ações dos agentes é determinada durante o

projeto do sistema.

Os MASs, por sua vez, não são projetados baseados em um problema

específico, e sim em dois aspectos: a construção do sistema através de múltiplos agentes

independentes e dos mecanismos de coordenação do comportamento destes agentes. Um

agente independente é aquele que possui seus próprios interesses, ou objetivos.

Os MASs são a base do trabalho proposto nesta monografia e devido a esse

motivo eles serão explicados com maiores detalhes a partir de agora.

28

3.3 Considerações sobre sistemas multiagentes

Os MAS são considerados uma nova abordagem para solução de problemas em

AI. A abordagem MAS provê meios para construção de sistemas complexos compostos

por múltiplos agentes e mecanismos para coordenação do comportamento dos agentes do

sistema [STO 97].

3.3.1 Classificação de sistemas multiagentes

Segundo [STO 97], os sistemas de Inteligência Artificial Distribuída podem ser

classificados utilizando os seguintes critérios:

- Sistema homogêneo ou heterogêneo.

- Método de coordenação (cooperativo ou competitivo).

- Formas de comunicação (quadro negro ou mensagens, comunicação em

baixo-nível ou alto-nível).

3.3.2 Sistemas multiagentes homogêneos e heterogêneos

Os MAS podem ser classificados também quanto ao tipo dos agentes que

pertencem ao sistema, ou seja, um MAS pode ser classificados como homogêneo ou

heterogêneo. Um MAS é considerado homogêneo é se todos os agentes pertencentes ao

sistema são do mesmo tipo, ou seja, todos os agentes deste sistema possuem a mesma

estrutura interna, o que incluí objetivos, domínio do conhecimento e ações, além de

deliberarem suas ações através dos mesmos procedimentos. Em um MAS heterogêneo os

agentes podem ser dos mais diversos tipos, o que torna este tipo de sistema muito mais

complexo que um MAS homogêneo. Esta diversidade de agentes apresenta-se em muitas

formas, desde agentes com objetivos diferentes até reações diferentes para os mesmos

tipos de estímulos.

3.3.3 Métodos de coordenação

29

A diversidade dos agentes em um MAS heterogêneo implica em agentes com

objetivos diferentes, algumas vezes conflitantes. Por este motivo, podem existir agentes

cooperativos e agentes competitivos. Agentes cooperativos ajudam-se uns aos outros para

atingirem seus respectivos objetivos. Por outro lado, agentes competitivos não ajudam

outros agentes, e estão interessados apenas em atingir seu próprio objetivo. A figura 8

mostra uma classificação para coordenação de agentes.

FIGURA 8 – Classificação de tipos de coordenação de agentes.

A cooperação em MAS surgiu da seguinte pergunta: Por quê utilizar apenas um

agente para realizar um serviço se é possível utilizar vários trabalhando juntos para

concluir a tarefa? Com vários agentes trabalhando em conjunto é possível pensar em um

MAS com agentes menos complexos, utilizando uma estratégia de projeto do tipo dividir

para conquistar.

A coordenação de um conjunto de agentes não é uma tarefa trivial. Para uma

coordenação ter sucesso, é necessário haver um planejamento das ações do sistema. Em

um planejamento centralizado, um agente, que possui uma visão geral do problema, é

responsável em dar ordens para os outros agentes do grupo para atingirem uma solução

30

do problema em conjunto. No modelo distribuído, também conhecido por modelo

organizado em equipes, cada equipe se compromete a atingir uma meta para alcançar o

objetivo. Os agentes trocam mensagens para saber do progresso das outras equipes, o que

estabelece uma relação de comprometimento entre agentes.

Em contraposição ao agente cooperativo existe o agente competitivo. A idéia

baseia-se no fato de que um agente quer sempre o melhor para si, o que ocasionará

conflitos com outros agentes. Agentes com maior inteligência e com maior conhecimento

específico sobre uma determinada tarefa possuem maiores chances de sucesso em fazer

valer a sua vontade em um MAS. Quando agentes conflitantes interagem entre si, é

necessário haver um processo de negociação para que eles possam tentar atingir uma

ação de consenso para tingir seus respectivos objetivos. Quando não ocorre o consenso,

os agentes precisam entrar em um acordo através de concessões e propostas de acordo.

A distinção entra agentes cooperativos e competitivos na prática, é uma tarefa

difícil. Em aplicações reais, faz sentido agentes cooperativos que possuem objetivos

comuns se ajudarem, mas é difícil imaginar a situação em que agentes com objetivos

diferentes e/ou conflitantes cooperem entre si. Para alguns autores [KOR 92], agentes são

sempre competitivos (egoístas), baseado na idéia que agentes cooperam não para ajudar

uns aos outros e sim para atingir o seu próprio objetivo.

3.4 Comunicação em sistemas multiagentes

Algumas abordagens para MAS consideram agentes como partes especiais do

ambiente, o que torna a comunicação entre agentes simplesmente uma pequena parte da

interação dos agentes com o ambiente. Apesar de ser considerada uma “pequena” parte

dos processos de interação de um MAS, a comunicação entre agentes é um assunto

bastante complexo.

3.4.1 Atos da fala

A Teoria dos Atos da Fala desenvolvida por John Searle [SEA 70] é a base de

quase todos protocolos de comunicação de agentes. Para a lógica proposicional, um

31

enunciado verbal é sempre considerado verdadeiro ou falso. Na Teoria dos Atos da Fala,

este enunciado pode ter vários significados. Enunciados que não podem ser classificados

como verdadeiros ou falsos são chamadas “performativas”. Esta teoria, basicamente,

apresenta o papel da linguagem como ação, decompondo o ato da fala em três tipos de

ação:

- Locução, que é o meio físico da expressão ou forma de expressão. Ex:

voz.

- Ilocução, que é a intenção passada do locutor para o ouvinte.

- Perlocução, que é a ação decorrente da ilocução, ou conseqüência do ato

da ilocução.

Em uma sociedade humana, por exemplo, uma afirmação de um operário de

uma fábrica do tipo “estou cansado” pode indicar não só a interpretação direta do ato

locucionário (informar como o operário se sente), como também pode ser interpretado de

forma indireta (pedido de ajuda a um outro operário qualquer para ajudá-lo em sua

tarefa). Percebe-se que a ilocução é uma característica subjetiva, porque a intenção da

locução depende de que a interpreta. A perlocução depende que como a locução foi

interpretada. Já em um MAS, esta subjetividade é elimina devido às mensagens

normalmente explicitarem a ação ilocucionária para evitar ambigüidades de interpretação.

A classificação das performativas [SEA 70] é dada a seguir:

- Assertivas ou Representativas: O locutor comunica que acredita na

verdade do enunciado, ou seja, é a performativa utilizada para a constatação de

um fato. Ex: Asserção, conclusão.

- Comissivas: O locutor se compromete com a realização de uma ação

futura, ou seja, é a performativa utilizada para comprometimentos. Ex:

Promessa, ameaça.

- Declarativas: O locutor altera imediatamente o estado do seu ambiente, ou

seja, é a performativa utilizada para afirmar fatos. Ex: Declaração de guerra.

32

- Diretivas: O locutor tem por intenção fazer com que o ouvinte realize uma

ação, ou seja, é a performativa utilizada para solicitações. Ex: Ordem, pergunta,

permissão, proibição, requisição.

- Expressivas: O locutor expressa um estado psicológico, ou seja, é a

performativa utilizada para expressar emoções.

Em suma, a Teoria dos Atos da Fala é usada em MAS para definir os tipos de

mensagens por meio da força da ilocução, que restringe a semântica da comunicação. A

ação desejada pelo locutor é definida sem ambigüidades, facilitando o projeto de MAS.

3.4.2 Modelo de comunicação

Em todos os tipos de MAS, especialmente os heterogêneos, deve haver um

conjunto de linguagens e protocolos para interação entre agentes. Esta seja talvez uma

das maiores dificuldades encontradas por quem está desenvolvendo um MAS. Como

agentes com representações internas diferentes, criados em tempos diferentes e operando

em ambientes diferentes podem se comunicar e coordenar suas ações efetivamente? Um

modelo de cinco camadas é adotado para representação da comunicação entre agentes

como objetivo de incentivar o desenvolvimento de protocolos específicos para cada

camada. Este modelo de camadas é um modelo geral, que não precisa ser seguido para

implementação de um MAS, porém o seu uso é aconselhável para facilitar futuras

mudanças de protocolos. As cinco camadas de comunicação são:

- Linguagem de Conteúdo: É a linguagem utilizada para representar o

conhecimento que será utilizado como conteúdo de uma mensagem. Exemplos:

Knowledge Interchange Format – KIF, Semantic Language – SL, Constraint

Choice Language – CCL, Resource Description Framework – RDF.

- Linguagem de Comunicação: É o protocolo utilizado para representação

da linguagem de comunicação baseada em atos da fala, formada por um

conjunto de tipos de mensagem e descrições dos efeitos das mensagens sobre os

agentes que a enviam e sobre os que a recebem. Atualmente as duas linguagens

33

de comunicação mais utilizadas são o Knowledge Query and Manipulation

Language – KQML e o Foundation for Intelligent Physical Agents - Agent

Communication Language – FIPA ACL.

- Métodos de Comunicação: A forma como os agentes se comunicam, que

pode ser através de quadro-negro, federação de agentes, mensagens diretas e

difusão de mensagens.

- Transporte de Mensagens: Protocolo utilizado para transporte de uma

mensagem de um agente para o outro. Os protocolos mais utilizados nessa

camada são: HyperText Transfer Protocol – HTTP, Internet InterORB Protocol

– IIOP, Remote Method Invocation – RMI, Simple Mail Transfer Protocol –

SMTP.

- Mecanismo de Transporte: Define o protocolo de rede utilizado para a

comunicação entre agentes. Normalmente é utilizado o Transport Control

Protocol / Internet Protocol – TCP/IP, mas com a popularização de dispositivos

como palmtops e telefones celulares, protocolos para comunicação sem fio

como o Short Message Service - SMS e Wireless Application Protocol - WAP

também podem ser utilizados.

A figura 9 ilustra um exemplo de modelo de cinco camadas para comunicação

de agentes.

34

FIGURA 9 – Exemplo de modelo de camadas para comunicação de agentes.

KIF é a mais conhecida linguagem de conteúdo de mensagens. Ela foi

desenvolvida para o intercâmbio de conhecimento entre agentes, baseada na lógica de

predicados. Sua sintaxe é muito parecida com a da linguagem de programação List

Processing – LISP, mas KIF não é utilizada para esse fim e sim para representar

conhecimento. SL é muito utilizado no padrão FIPA (ver capítulo 4), assim como CCL e

RDF.

A linguagem de comunicação KQML fornece uma infra-estrutura (framework)

para programas e agentes trocarem informações e conhecimento. Foi desenvolvida pela

Defense Advanced Research Projects Agency - DARPA. KQML define formatos e

protocolos para tratamento de mensagens entre agentes. KQML não define o conteúdo

das mensagens, mas sim as operações de consultas e manipulação na base de

conhecimento dos agentes e provê uma arquitetura básica para agentes compartilharem

conhecimento e informações através de um tipo especial de agente conhecido por agente

facilitador. As mensagens em KQML são chamadas performativas, devido ao termo

utilizado na Teoria dos Atos da Fala.

35

A linguagem FIPA ACL, assim como o KQML, baseia-se nas ações da fala. Sua

especificação [FIP 2002g] consiste de um conjunto de mensagens e descrições dos efeitos

destas mensagens. A sintaxe FIPA ACL é muito parecida com a KQML. As

performativas KQML são chamadas em FIPA ACL de primitivas de comunicação, ou

ações comunicativas.

Agentes podem se comunicar utilizando diversos métodos. O método do

quadro-negro permite a um grupo de agentes um meio comum para comunicação.

Agentes escrevem e lêem mensagens em um meio compartilhado (quadro-negro) O

conhecimento neste sistema é compartilhado por todos os agentes, o que torna esse

método útil quando o sistema é cooperativo. O sistema de agentes federados é útil quando

o sistema possui muitos agentes e uma organização hierárquica é a melhor solução. Neste

sistema, uma agente A que deseja enviar uma mensagem para um agente B não a envia

diretamente e sim para um agente facilitador, hierarquicamente superior, que se

responsabiliza pelo envio da mensagem. Este agente facilitador encontra o destinatário da

mensagem através do envio de mensagens para outros agentes facilitadores. O método da

mensagem direta, como o próprio nome já informa, um agente envia a mensagem

diretamente para outro agente, enquanto que no método da difusão, a mensagem é

enviada para um grupo de agentes.

Os protocolo de transporte de mensagens e mecanismos de transporte tratam do

transporte de mensagens no nível de protocolos de rede e a explicação detalhada destes

protocolos foge ao escopo desta monografia.

3.5 Ferramentas para construção de sistemas multiagentes

Para finalizar este capítulo, a seguir é feita uma breve descrição de ferramentas

para desenvolvimento de agentes [BIG 2001]. A maioria destas ferramentas é baseada em

Java. Java é com certeza a linguagem de programação mais utilizada no desenvolvimento

orientada a agente, mas não é a única. Os ambientes de desenvolvimento, ferramentas e

frameworks são descritos a seguir:

36

− AgentBuilder, Reticular Systems: é um conjunto integrado de ferramentas

para construção de software que utilizam agentes inteligentes. Consiste em

ferramentas de construção e de um sistema de ambiente de execução. Entre as

ferramentas, destacam-se: gerenciador de processo de desenvolvimento,

analisador de domínio de operações do agente, ferramentas de projeto e

desenvolvimento de redes de comunicação de agentes, mecanismos para definir

comportamento e meios para depurar erros.

− Aglets, IBM: São agentes autônomos e móveis baseados em Java. Os

aglets são livres para viajar entre servidores que rodam o servidor aglet, e pode

seguir um roteiro de viagem. Um processo aglet pode ser suspenso, deportado

para outro sistema hospedeiro aglet, e reiniciado.

− FIPA-OS: Iniciativa do grupo NortelNetworks para desenvolvimento de

agentes baseados em Java compatíveis com as especificações FIPA (ver

capítulo 4).

− Java Agent Template Lite – JATLite: Desenvolvido pela Universidade de

Stanford, utiliza uma arquitetura de camadas para construção de MAS.

− Java Expert System Shell – JESS: é uma implementação Java do ambiente

baseados em regras CLIPS que foi desenvolvido pelos Laboratórios Sandia

National. Não é um ambiente de agentes, mas provê um sistema de regras de

inferência em Java.

− SAIC Afterburner: Framework para agentes autônomos desenvolvidos em

Java que utilizam a linguagem de comunicação KQML.

− Voyager, ObjectSpace: É um Object Request Broker – ORB (ver capítulo

4) que utiliza agentes desenvolvidos em Java. Os agentes Voyager são

autônomos e móveis, mas não são inteligentes.

− ZEUS: Ferramenta para construção de agentes da BritishTelecom, é um

framework para o desenvolvimento de agentes colaborativos, baseados em

autonomia e cooperação.

37

4 FIPA e FIPA-OS

Este capítulo apresenta a Foundation for Intelligent Physical Agents – FIPA,

fundação que cria padrões para desenvolvimentos de agentes e Sistemas Multiagentes,

além do Foundation for Intelligent Physical Agents Open Systems – FIPA-OS, uma

plataforma de desenvolvimentos de Sistemas de Multiagentes que segue totalmente aos

padrões FIPA.

4.1 Introdução

A FIPA é uma organização internacional sem fins lucrativos criada em

dezembro de 1996 como o objetivo de criar padrões e expandir o uso da tecnologia de

agentes inteligentes, através de especificações para a interoperabilidade entre sistemas de

agentes e aplicações baseadas em agentes. Existem várias empresas e universidades que

colaboram com a FIPA, e todos os resultados das atividades da fundação estão

disponíveis para avaliação. Atualmente a fundação possui mais de 50 membros de 11

países diferentes

Para fins de identificação, as especificações FIPA recebem identificadores

formais e informais. Um identificador de especificação formal é formado pela palavra

“FIPA” concatenada com o número decimal que representa a especificação. Por exemplo,

o identificador formal da especificação de arquitetura abstrata FIPA é “FIPA00001”. O

identificador de especificação informal é formado por um sufixo que representa o estágio

de desenvolvimento concatenado com o número decimal que representa a especificação.

Por exemplo, a especificação FIPA no estágio de desenvolvimento standard de

gerenciamento de agentes recebe o identificador informal “SC00023”. A letra “C” no

sufixo é de component (componente).

As próximas seções descrevem as principais especificações FIPA. Ao final de

cada seção há uma referência à especificação FIPA utilizada para descrevê-la.

38

4.2 Arquitetura Abstrata FIPA

A arquitetura abstrata FIPA define em um nível abstrato como dois agentes se

localizam e trocam mensagens. Um agente antes de enviar quaisquer mensagens a outros

agentes deve registrar-se no sistema. Agentes registrados em diferentes sistemas podem

trocar mensagens. Para que isso seja possível, deve existir um grau elevado de

interoperabilidade entre estes sistemas.

Para aumentar o grau de interoperabilidade entre diferentes sistemas de agentes,

a arquitetura FIPA especifica padrões para a implementação das características comuns a

todos os sistemas de agentes, aumentando também o grau de abstração da arquitetura. A

idéia básica é que cada arquitetura concreta baseada na arquitetura abstrata FIPA é livre

para escolher com que linguagem de comunicação os agentes irão se comunicar ou qual

será o protocolo de transporte de mensagens e, mesmo assim, os sistemas poderão

interoperar porque foram baseadas na mesma arquitetura. É claro que para tornar isso

possível, deve haver meios para converter os diferentes tipos de protocolos e linguagens

utilizadas em cada arquitetura concreta.

A arquitetura abstrata FIPA é composta por uma série de elementos. Muitos

deles tratam de interoperabilidade de sistemas de agentes. Uma arquitetura concreta, que

segue o padrão FIPA, deve possuir obrigatoriamente os seguintes elementos:

- Um modelo de registro e consulta de serviços disponíveis para os agentes

e para outros serviços.

- Interoperabilidade de transporte de mensagens entre agentes.

- Suporte para várias formas de representação de ACL.

- Suporte para várias formas de linguagem de conteúdo.

- Suporte para múltiplas representações de serviços de diretório.

Existem outros elementos que não são definidos na arquitetura abstrata FIPA,

como por exemplo, o ciclo de vida de uma agente e, mesmo assim, são obrigatórios em

uma arquitetura concreta compatível com o padrão FIPA. O ciclo de vida de um agente,

ou estados de operação de um agente, depende muito do sistema do qual o agente está

inserido, o que dificulta muito a abstração deste tipo de elemento. Porém é indispensável

39

que em uma arquitetura concreta os agentes possuam uma descrição de seus estados

internos.

Alguns elementos da arquitetura abstrata FIPA são considerados opcionais em

termos de implementação em uma arquitetura concreta. Elementos da arquitetura abstrata

FIPA que são definidos em uma arquitetura concreta são ditos “realizados”. Uma

arquitetura concreta pode realizar todos ou parte dos elementos da arquitetura abstrata

FIPA.

4.2.1 Serviços

Um serviço pode ser definido como “um conjunto coerente de mecanismos que

suportam a operação de agentes e outros serviços” [FIP 2002a]. A interoperação entre

agentes se baseia no uso de serviços.

A arquitetura abstrata FIPA não define como devem ser implementados os

serviços, o que significa que eles podem ser agentes, procedimentos ou funções de

linguagem de programação ou interfaces do tipo encontradas em Java ou C++. No caso

de ser implementado através de um agente (agente de serviço), ele não terá autonomia

para recusar-se a oferecer o serviço. A figura 10 mostra o modelo se serviços da

arquitetura abstrata FIPA.

FIGURA 10 – Modelo de serviços da arquitetura abstrata FIPA.

Quando um agente é inicializado, é oferecida a ele uma raiz de serviços

(Service-Root – SR). O SR consiste de um conjunto de serviços, cada um localizado em

40

uma entrada de diretório de serviço (Service-Directory-Entry – SDE). Uma analogia

válida para um SR é um diretório raiz de sistema de arquivos de um sistema operacional

enquanto que cada SDE equivale a um arquivo.

Entre as várias SDE de um SR, obrigatoriamente deve haver ao menos uma para

cada um dos seguintes serviços:

- Serviço de Diretório de Agente (Agent-Directory-Service – ADS).

- Serviço de Diretório de Serviços (Service-Directory-Service – SDS).

- Serviço de Transporte de Mensagens (Message-Transport-Service –

MTS).

4.1.1.1 Serviço diretório de agente – ADS

O ADS armazena descrições de agentes. Cada descrição de agente fica

armazenada em uma entrada de diretório de agente (Agent-Directory-Entry – ADE). A

principal função do ADS é servir como um ponto de referência para agentes procurarem

outros agentes. Cada ADE é formada por uma tupla com os seguintes atributos:

- Nome do agente (agent-name): É o nome pelo qual o agente é conhecido

no sistema. Este nome deve ser único no sistema.

- Localizador do agente (agent-locator): Contém informações sobre como

se comunicar com o agente, conhecidas como descrições de transporte.

- Atributos de descrição do agente, tais como: serviços oferecidos, custo de

uso, restrições de uso e etc.

Os atributos de nome e localizador do agente são obrigatórios enquanto que os

atributos de descrição são opcionais. A figura 11 ilustra um exemplo de uma ADE.

41

FIGURA 11 – Representação de uma Entrada de Diretório de Agente – ADE.

4.2.1.2 Serviço diretório de serviços – SDS

Os registros e localização de serviços são feitos no SDS. Todos os serviços

registrados no SDS possuem uma descrição de serviço associada. Exemplos de serviços

são: MTS e ADS. Um SDS de uma implementação da arquitetura abstrata FIPA pode

oferecer o seguinte conjunto de ações:

- Registrar: Um serviço registra uma descrição de serviço em uma SDE do

SDS.

- Desregistrar: Um serviço desregistra uma SDE de um SDS.

- Procurar: Um serviço ou agente pode procurar por SDEs em um SDS.

- Modificar: Um serviço pode modificar ema SDE registrada em um SDS.

4.2.1.3 Serviço transporte de mensagens – MTS

O MTS é responsável entrega de mensagens. O MTS é um dos elementos

obrigatórios da arquitetura abstrata FIPA. O MTS provê suporte para quatro tipos de

ação:

- Amarração de Transporte (bind-transport-action): Um agente utiliza esta

ação de um MTS para criar um vínculo com um determinado tipo (protocolo) de

transporte para o envio e recepção de mensagens.

42

- Desamarração de Transporte (unbind-transport-action): É a ação inversa à

Amarração de Transporte. Um agente utiliza esta ação de um MTS para

terminar o vínculo de transporte para envio e recepção de mensagens.

- Enviar Mensagens (send-message-action): Um agente utiliza esta ação do

MTS para enviar mensagens de transporte para outros agentes

- Entrega de Mensagem (deliver-message-action): Um MTS utiliza esta

ação para entregar mensagens para agentes.

A arquitetura abstrata FIPA é descrita em [FIP 2002a].

4.3 Gerenciamento de Agentes

O modelo FIPA de gerenciamento de agentes especifica todas as regras de

criação, registro, localização, comunicação, migração e finalização de agentes. A figura

12 ilustra esse modelo. Ele é constituído dos seguintes componentes lógicos:

- Agente: Utiliza o mesmo conceito de agente do capítulo 2. O

gerenciamento de agentes independe de como o agente foi implementado

internamente, deixando o programador livre para implementar o agente da

forma mais adequada ao sistema. Todos agentes possuem uma identificação

(Agent Identification – AID) única no sistema.

- Plataforma de Agente (Agent Platform – AP): É a infra-estrutura em que

os agentes são desenvolvidos, ou seja, é o conjunto de componentes físicos e

lógicos utilizados no desenvolvimento dos agentes, composto por:

• Microcomputador – uma plataforma de agente não precisa

necessariamente estar localizada no mesmo microcomputador. FIPA

especifica meios para distribuição de AP entre vários microcomputadores.

• Sistema operacional – deve ter suporte a multitarefa e possuir

protocolos de rede.

• Software para desenvolvimento de agentes – deve ser compatível

com o sistema operacional.

• Componentes - DF, AMS, MTS e agentes.

43

- Facilitador de Diretórios (Directory Facilitator – DF): É utilizado

principalmente para consulta sobre serviços oferecidos por outros agentes, o que

torna seu funcionamento análogo às páginas amarelas de uma lista telefônica. O

DF faz parte da concretização do ADS da arquitetura abstrata FIPA.

- Sistema de Gerenciamento de Agentes (Agent Management System –

AMS): É utilizado principalmente para consulta de AIDs, ou seja, é análogo em

funcionamento às páginas brancas de uma lista telefônica. O AMS faz parte da

concretização do ADS da arquitetura abstrata FIPA.

- Serviço de Transporte de Mensagens (Message Transport Service – MTS):

Responsável pelo transporte de mensagens na AP ou entra APs.

- Software: Esta classe inclui todas as funções, procedimentos e programas

executáveis externos (software não-agente) acessados por um agente.

FIGURA 12 – Modelo de gerenciamento de agentes FIPA.

4.3.1 Identificação de agentes

Para fins de identificação, cada agente possui um identificador de agente, ou

AID é uma tupla composta dos seguintes valores:

44

- Nome (name): Identificador do agente, é único no sistema. É composto

pela concatenação do nome do agente + @ + endereço da plataforma

(normalmente no formato umdominio.com).

- Endereços (addresses): É uma lista com todos os endereços que o agente

utiliza para receber mensagens. É a concretização do localizador do agente, da

arquitetura abstrata FIPA.

- Resolvedores (resolvers): É uma lista de resolvedores de nomes de

agentes.

Um resolvedor é um serviço fornecido por um agente especial (normalmente o

AMS) que mapeia nomes de agentes com seus respectivos endereços de transporte. O seu

funcionamento é análogo ao de um Domain Name Server – DNS em uma rede TCP/IP.

4.3.2 Facilitador de diretório – DF

Para tornar públicos os seus serviços, um agente precisa registrar em um DF. É

permitido a um agente, além de registrar e consultar, modificar e desregistrar seus

serviços de um DF. Os DFs são componentes opcionais de uma AP, o que significa que

podem não existir nenhum DF em uma AP. No outro extremo, podem haver vários DFs

em uma mesma AP. Neste caso, os DF são organizados em federação. A AID do DF é

única, reservada e parecida com:

( agent-identifier :name [email protected] :addresses (sequence umdominio_transport_address)) onde umdominio é um nome de domínio qualquer.

Um DF pode registra-se em outros DF. Quando vários DFs registram-se uns aos

outros é criado uma estrutura federada de DFs. Um agente sempre consulta o DF local

quando procura por um serviço. Se o serviço não se encontra no DF local, este DF pode

propagar a consulta em todos os DFs que possui registrado.

45

4.3.3 Sistema de gerenciamento de agentes – MAS

O AMS funciona basicamente como um controlador de uso e acesso da AP e é

único nesta plataforma. Um agente só é considerado como parte de uma AP depois de

registrar-se no AMS. Ele mantém uma lista com AID de todos os agentes registrados. A

AID do AMS é única, reservada e parecida com:

( agent-identifier :name [email protected] :addresses (sequence umdominio_transport_address)) onde umdominio é um nome de domínio qualquer.

Além do registro de agentes, um AMS deve suportar funções para desregistrar,

modificar e procurar agentes além de oferecer uma função para obter descrições de

agentes.

Um agente pode modificar sua descrição no AMS se obtiver autorização do

mesmo, procurar por descrições de outros agentes e desregistrar-se do AMS, que

significa terminar o seu ciclo de vida na AP.

0utra função do AMS é fornecer meios para a AP criar, executar, invocar,

suspender, terminar, reiniciar agentes além de gerenciar recursos da plataforma.

4.3.4 Serviço de transporte de mensagens – MTS

O MTS é responsável pelo roteamento de mensagens de agentes para AP local

ou para APs remotas. Todos os agentes registrados no AMS têm acesso à pelo menos um

MTS. Um agente acessa MTSs de APs remotas através de um canal de comunicação de

agente (Agent Communication Channel – ACC). O nome mensagem é utilizado no nível

de comunicação de agentes. Ao chegar em um MTS, a mensagem é transformada em uma

mensagem de transporte. A figura 13 ilustra o processo de transformação de uma

mensagem em mensagem de transporte.

46

FIGURA 13 – Transformação de uma mensagem em mensagem de transporte.

Uma mensagem de transporte é composta por duas partes:

- Envelope (envelop): Representa informações de transporte como, por

exemplo, endereço de transporte do destinatário.

- Carga Útil (payload): É o conteúdo da mensagem, no formato de uma

Agent Communication Language – ACL.

Observa-se que uma mensagem FIPA é análoga uma carta de correio

convencional. O envelope carrega informações de transporte tais como: remetente e

destinatário enquanto que o conteúdo da carta descreve a mensagem.

4.3.4.1 Envelope

Um envelope carrega as informações necessárias para transportar uma

mensagem para seu destino. Ele é composto por diversos parâmetros, sendo que quatro

deles são obrigatórios:

47

- to: Parâmetro que contém o(s) endereço(s) de transporte do(s) agente(s)

destinatário(s) da mensagem.

- from: O(s) endereço(s) de transporte do agente remetente da mensagem.

- date: Data e hora do envio da mensagem pelo remetente.

- acl-representation: O nome do tipo de sintaxe utilizada para representar a

mensagem ACL.

4.3.4.2 Carga útil

A carga útil é na verdade a mensagem representada em ACL. As mensagens

ACL são codificadas antes de serem transportadas. O tipo de codificação ACL, também

chamada sintaxe de representação ACL pode ser um dos três tipos a seguir:

- Representação Bit-Efficient: É usada quando o tamanho da mensagem é

crítico, como por exemplo, em aplicações que utilizam o protocolo de transporte

de rede WAP. A especificação [FIP 2002j] descreve a representação de

mensagens ACL por Bit-Efficient.

- Representação String: Descreve a mensagem em texto American Standard

Code for Information Exchange - ASCII. A grande vantagem desta

representação é que a mensagem pode ser facilmente compreendida, já que é

escrita em texto puro. A especificação [FIP 2002k] descreve a representação de

mensagens ACL por String.

- Representação XML: Utilizada a sintaxe XML para descrever a

mensagem. A especificação [FIP 2002l] descreve a representação de mensagens

ACL por XML.

4.3.4.3 Canal de comunicação de agente – ACC

A ACC é a entidade do MTS responsável pelo envio de mensagens para agentes

de APs remotas. Um agente pode enviar mensagens para agentes de outras APs de três

formas diferentes:

48

- Envio Indireto: É a forma mais comum de envio de mensagens entre

diferentes plataformas. Um agente envia a mensagem através do ACC do MTS

local que se encarrega do roteamento da mensagem.

- Envio Por ACC Remoto: O agente envia a mensagem para o ACC do

agente remoto. Para que isso seja possível, o agente remetente da mensagem

precisa ter acesso à interface do protocolo de transporte do ACC remoto.

- Envio Direto: O agente envia a mensagem diretamente para o agente

remoto, sem o intermédio de um ACC. Todo o tratamento de envio e recepção

da mensagem, tais como: transferência, endereçamento e tratamento de erros

devem ser feitos pelos agentes que participam da conversação.

A figura 14 ilustra as três formas de envio de mensagem.

FIGURA 14 – Formas de comunicação entre agentes de plataformas diferentes.

Uma mensagem pode ter um ou mais destinatários. Cada destinatário pode ter

um ou mais endereços de transporte. Neste caso, o ACC utiliza o primeiro endereço de

transporte da lista de endereços de transporte da descrição do agente. Se o endereço de

transporte escolhido falhar, ele tentará enviar para o próximo endereço de transporte da

lista e assim sucessivamente, até encontrar um endereço de transporte válido ou, caso

contrário, enviar ao remete uma mensagem de falha. As mensagens recebidas por todos

os destinatários são idênticas, ou seja, todas possuem o mesmo envelope e carga útil.

O gerenciamento de agentes é descrito em [FIP 2002f].

49

4.4 A linguagem de comunicação de agentes – ACL

A ACL foi desenvolvida com o objetivo de permitir a agentes uma comunicação

em alto nível de abstração. Mensagens ACL são trocadas entre agentes, em um processo

chamado interação. Cada uma destas mensagens possui uma estrutura básica, além de um

significado explícito, definido por uma performativa e um conteúdo representado em uma

linguagem de conteúdo. Cada um destes aspectos será descrito nas próximas seções.

4.4.1 Estrutura da mensagem FIPA ACL

Uma mensagem FIPA ACL, ou carga útil de uma mensagem possui diversos

parâmetros, mas apenas o parâmetro performative é obrigatório. A tabela 1 mostra a lista

de todos os parâmetros FIPA ACL. A interpretação de cada um destes parâmetros fica a

cargo dos agentes participantes da conversação. Outros parâmetros podem ser criados e

utilizados, mas o nome destes novos parâmetros deve ter o prefixo “x-“ para manter a

compatibilidade com o padrão FIPA.

TABELA 1– Todos os parâmetros de uma mensagem FIPA ACL.

Categoria do parâmetro Parâmetro Tipo do ato comunicativo performative

Participante da conversação sender

receiver reply-to

Conteúdo da mensagem content

Descrição do conteúdo language encoding ontology

Controle da conversação

protocol conversation-id

reply-with in-reply-to reply-by

O parâmetro performative define a qual ato de comunicação à mensagem se

refere. Uma descrição completa dos atos de comunicação pode ser encontrada na seção

4.4.2.

50

Os parâmetros sender e receiver denotam o nome dos agentes remetente e

destinatário(s), respectivamente. É possível enviar mensagens anônimas através da

anulação do parâmetro sender. Também é possível enviar uma mensagem para vários

destinatários através da atribuição de uma lista de nomes de agentes em receiver. O

parâmetro reply-to indica o nome do agente para qual uma resposta à mensagem deve ser

enviada.

O conteúdo das mensagens ACL é encontrado no parâmetro content. O

significado do conteúdo da mensagem deve ser interpretado pelo receptor da mensagem,

com o auxílio dos parâmetros de descrição de conteúdo. O parâmetro language denota a

linguagem utilizada para descrever o conteúdo da mensagem e pode ser omitido se o

receptor da mensagem tem conhecimento da linguagem utilizada. O parâmetro encoding

indica a codificação utilizada no conteúdo da mensagem. Se este parâmetro for nulo, a

codificação utilizada deve estar presente no envelope da mensagem. O parâmetro

ontology é utilizado para a interpretação da simbologia utilizada no conteúdo da

mensagem. Normalmente, agentes em uma conversação possuem uma ontologia em

comum e por este motivo este parâmetro normalmente não é utilizado.

O protocolo de geração de mensagens ACL é definido no parâmetro protocol.

Para que um agente envolvido em diversas conversações simultâneas possa distinguir

cada uma das conversações, utiliza-se o parâmetro conversation-id. Este identificador de

conversação é único no sistema e o padrão FIPA recomenda que ele seja formado pelo

nome do agente remetente da mensagem mais um número inteiro qualquer.

Os parâmetros reply-with e in-reply-to são utilizados para indicar que a

mensagem é uma resposta a um determinado tópico entre várias conversações

simultâneas. Por exemplo, quando uma agente envia uma mensagem ACL com o

parâmetro reply-with contendo uma expressão “x“, este agente vai entender que as

mensagens recebidas com o parâmetro in-reply-to com a expressão “x” são resposta à

mensagem enviada originalmente. O parâmetro reply-by indica o tempo ou data em que o

agente remetente da mensagem ACL deseja receber uma resposta à mensagem. A

definição de o que é considerado tempo fica a cargo dos agentes envolvidos na

conversação.

51

Maiores informações sobre a especificação FIPA para estrutura de mensagens

ACL podem ser encontradas em [FIP 2002h].

4.4.2 Atos de comunicação

Os atos de comunicação ACL são baseados na Teoria dos Atos da Fala descrita

no capítulo 2. São utilizados para determinar a ação que o agente esta tentando expressar

através da mensagem ACL. Em termos de mensagem ACL, os atos de comunicação são

chamados performativas. Cada performativa possui um significado e a utilização de uma

performativa para imprimir uma ação com significado diferente da estabelecida pelo

padrão FIPA não é proibido, apenas fortemente desaconselhável por motivos de

interoperabilidade. A tabela 2 mostra todas as performativas definidas pelo padrão FIPA.

Cada performativa possui um conteúdo associado, normalmente valores ação e/ou

proposição (expressão verbal), que são utilizados pelo receptor da mensagem ACL para

entender o contexto da mensagem.

TABELA 2 – Performativas FIPA.

Performativa Significado do ato Accept Proposal Aceitação da proposta de execução da ação

desde que a proposição seja respeitada Agree Concordância em executar a ação, desde

que a proposição seja respeitada Call For Proposal Solicita propostas de outros agentes para a

execução da ação Cancel Informa ao um agente que a execução da

ação deve ser cancelada Confirm Utilizada como resposta de confirmação a

uma proposição Disconfirm Utilizada como resposta de desconfirmação

a uma proposição Failure Informa a um agente que a tentativa de

execução da ação falhou e um motivo para falha

Inform Informa a um agente que a proposição verdadeira.

Inform If Informa a um agente quando a proposição é ou não verdadeira

52

Performativa Significado do ato

Inform Ref Solicita a descrição sobre um objeto de referência

Not-Understood Informa a um agente que a performativa recebida não foi entendida devido a um

motivo

Propagate

A mensagem embutida na mensagem original recebida deve ser propagada para

um grupo pré-estabelecido de agentes respeitando um limite para a propagação

Propose Envia uma proposta para um agente executar uma ação

Proxy

O agente remetente da mensagem deseja que o receptor selecione agentes que

obedeçam a um critério e envie uma nova mensagem embutida na mensagem original

para todos os agentes selecionados, respeitando um limite para a propagação

Query-If Pergunta a um agente se a proposição é ou não verdadeira

Query-Ref Pergunta a um agente sobre um objeto a partir de uma descrição

Refuse Recusa em executar a ação, explicando o motivo

Reject Proposal Rejeição de uma proposta recebida, explicando o motivo

Request Requisita a um agente para a execução de uma ação

Request When Requisita a um agente para executar uma ação quando uma proposição for verdadeira

Request Whenever Requisita a um agente para executar uma

ação sempre que uma proposição for verdadeira

Subscribe Para manter o agente informado sobre alterações no objeto referenciado

Maiores informações sobre a especificação FIPA para a biblioteca de atos de

comunicação podem ser encontradas em [FIP 2002g].

4.4.3 Linguagem de conteúdo

O conteúdo de uma mensagem ACL é a representação do que se quer

comunicar. A interpretação do conteúdo da mensagem depende principalmente de uma

53

ontologia comum sobre um domínio de discurso entre os agentes participantes da

conversação e de uma linguagem de representação de conteúdo compartilhada.

Atualmente, o padrão FIPA possui especificações para quatro tipos de linguagens de

conteúdo:

- Semantic Language – SL: Utiliza proposições lógicas para expressar

atitudes mentais e ações do agente. A especificação SL [FIP 2002b] se encontra

no estágio de desenvolvimento padrão.

- Constraint Choice Language – CCL: Permite a comunicação entre agentes

em aplicações que exigem trocas sobre múltiplas escolhas inter-relacionadas.

Baseada na representação de problemas de escolha como problemas do tipo

Constraint Satisfaction Problem - CSP. A especificação CCL [FIP 2002c] se

encontra no estágio experimental de desenvolvimento.

- Knowledge Interchange Format – KIF: A linguagem KIF possui

semântica declarativa, o que facilita a compreensão das expressões. Esta

semântica é baseada na idéia de concepção do mundo em termos de objetos e

suas relações. A especificação KIF [FIP 2002d] se encontra no estágio

experimental de desenvolvimento.

- Resource Description Framework – RDF: Baseado no modelo entidade-

relacionamento e sintaxe derivada da eXtensible Markup Language - XML. A

especificação RDF [FIP 2002e] se encontra no estágio experimental de

desenvolvimento.

4.4.4 Protocolos de interação

Todas as conversações entre agentes apresentam um padrão de trocas de

mensagens, onde em determinadas ocasiões um tipo de mensagem específico é esperado.

A esse padrão de trocas de mensagens dá-se o nome Protocolos de Interação.

É claro que nem todas as trocas de mensagens seguem um determinado padrão,

mas o uso destes padrões é encorajado para aumentar o reuso de protocolos de interação,

além de prover padrões de interação entre agentes testados, que podem ser úteis em

54

vários aspectos de sistemas baseados em agentes. A tabela 3 resume os principais

protocolos de interação. Todos eles são especificações FIPA do tipo standard.

TABELA 3 – Protocolos Padrão de Interação FIPA.

Performativas Envolvidas Protocolo de Interação Iniciante Participante

Especificação FIPA

Request request refuse, agree, failure e inform FIPA00026

Query query-if e query-ref refuse, agree, failure e inform FIPA00027

Request When request-when refuse, agree, failure e inform FIPA00028

Contract-Net call for proposal, accept-proposal e

reject-proposal

refuse, propose, failure e inform FIPA00029

Iterated Contract-Net

call for proposal, accept-proposal e reject-proposal,

refuse, propose, failure e inform FIPA00030

Brokering proxy refuse, agree, failure e inform FIPA00033

Recruiting proxy refuse, agree, failure e inform FIPA00034

Subscribe subscribe refuse, agree, inform e failure FIPA00035

Propose propose accept -proposal e reject-proposal FIPA00036

Além dos protocolos de interação da tabela 3, FIPA especifica dois protocolos

experimentais chamados English Auction (especificação FIPA00031) e Dutch Auction

(especificação FIPA00032). Estes protocolos descrevem trocas de mensagens em leilões,

ou seja, um agente oferece um produto por um preço enquanto que outros agentes

envolvidos na conversação fazem suas ofertas. A diferença entre os dois é que no English

Auction, o preço do produto é mínimo e vai aumentado conforme as ofertas, enquanto

que no Dutch Auction, o preço do produto é máximo, caindo gradativamente até um

agente adquiri-lo. Estes protocolos de interação são muito utilizados em MAS que

simulam comércio eletrônico

55

4.5 Transporte de mensagens de agente

O transporte de mensagens em uma AP ou entre APs é realizado pelo MTS,

através do ACC, como foi descrito na seção 4.3.4. Para que este transporte seja possível,

deve existir protocolos de rede apropriados para roteamento de mensagens. O protocolo

de transporte utilizado em um MAS é chamado Message Transport Protocol – MTP.

FIPA possui especificações para três tipos de MTPs: IIOP, WAP e HTTP.

4.5.1 IIOP

O Object Management Group – OMG é uma organização com mais de 800

membros em todo mundo, que tem por objetivo criar padrões para computação

distribuída. Esta organização especifica padrões para comunicação entre ORBs. Um

Object Request Broker – ORB é uma espécie de tradutor universal para comunicação

entre objetos distribuídos. Ele serve como um intermediário na comunicação entre

objetos remotos. Os ORBs se encontram distribuídos por toda a rede. O padrão definido

pelo OMG para comunicação entre ORBs é chamado Internet Inter-ORB Protocol –

IIOP. Ele é baseado na especificação Commom Object Request Broker Architecture –

CORBA.

A especificação [FIP 2002m] descreve o protocolo de transporte HTTP com

detalhes.

4.5.2 WAP

WAP não é só um protocolo de comunicação, é também um ambiente de

aplicações. É uma tecnologia padrão para aplicações distribuídas, com plataformas

heterogêneas. É muito parecida com as tecnologias HTML e HTTP, com a vantagem de

ser otimizada para aplicações que rodam em plataformas com baixa largura de banda,

pouca memória e poucos recursos visuais, como o Personal Digital Assistant - PDA,

telefones celulares, pagers ou outros dispositivos eletrônicos portáteis.

A especificação [FIP 2002n] descreve o protocolo de transporte WAP

detalhadamente.

56

4.5.3 HTTP

O avanço do uso da Internet tornou o HTTP um dos protocolos mais populares

do mundo. Ele é famoso por ser o protocolo utilizado em conjunto com a linguagem

HTML para visualizar páginas da Internet. Mas o também pode ser usado de forma

genérica para comunicação entre ACCs em sistemas baseados em agentes.

A troca de mensagens é feita da seguinte forma: uma agente remetente faz uma

requisição HTTP e recebe uma resposta HTTP. Tanto a requisição quanto a resposta

HTTP é composta por uma linha de requisição (ou resposta), cabeçalho e corpo.

A linha de requisição (ou resposta) deve conter o método (POST), identificador

de recurso (Uniform Resource Identifier - URI) e versão (HTTP/1.1) da requisição. O

cabeçalho deve conter informações sobre interpretação da mensagem, como por exemplo,

tipo e tamanho do conteúdo da mensagem. O corpo da mensagem contém a mensagem

em si, ou seja, o envelope e a carga útil.

A especificação [FIP 2002o] descreve o protocolo de transporte HTTP com

detalhes.

4.6 FIPA-OS

A Nortel Networks, empresa com sede em Harlow, Inglaterra foi responsável

pela criação do FIPA Open Source ou FIPA-OS, uma ferramenta para desenvolvimento

de agentes que implementa todos os elementos obrigatórios do padrão FIPA. Segundo a

Nortel Networks: “a primeira meta do FIPA-OS é reduzir as atuais barreiras para adoção

da tecnologia FIPA através da suplementação dos documentos de especificações FIPA

com código-fonte aberto. Ele visa a qualidade e funcionalidade do seu código-fonte, que

irá evoluir com sua popularização, oferecendo um benefício mútuo para todos os usuários

e permitindo o progresso do paradigma orientado à agentes”. Em um software de código

aberto, o código-fonte é oferecido ao usuário juntamente com os arquivos executáveis. O

código-fonte é livre e sua licença de uso não proíbe os usuários de modificá-lo ou

distribuí-lo. Com isso, os usuários podem utilizar arquivos executáveis personalizados ao

invés dos originais.

57

FIPA-OS é totalmente desenvolvido com tecnologia Java, portanto ao invés de

arquivos executáveis, esta ferramenta é composta por uma coleção de arquivos de classe

que são interpretados por uma Java Virtual Machine – JVM. Os arquivos de classes

representam todos os elementos obrigatórios do padrão FIPA, além de alguns elementos

opcionais. A versão atual do FIPA-OS é a 2.1.0 e toda as considerações a respeito do

FIPA-OS nesta monografia se referem a essa versão.

4.6.1 Distribuição FIPA-OS

Como foi descrito na seção anterior, o FIPA-OS foi desenvolvido com

tecnologia Java. Ele é distribuído na forma de pacotes. Pacotes são coleções de classes

Java que, normalmente, compartilham alguma característica comum. A tabela 4 descreve

cada um dos nove pacotes da distribuição FIPA-OS:

TABELA 4 – Pacotes FIPA-OS.

Pacote Descrição

fipaos.agent Contém as classes que implementam os

elementos obrigatórios do padrão FIPA de um agente.

fipaos.comm Contém as classes que implementam a

comunicação e transporte de mensagens na plataforma.

fipaos.fipa Contém as classes utilizadas

especificamente pelo FIPA-OS, ou seja, classes para gerenciamento interno.

fipaos.ont Contém classes de ontologia.

fipaos.parser Contém classes com parsers de linguagens.

fipaos.platform Contém classes utilizadas pela plataforma, que não são componentes de agente.

fipaos.skill Contém classes para prover habilidades para os agentes.

fipaos.tool Contém classes para teste e depuração.

fipaos.util Contém classes úteis para a construção de agentes, mas que não são obrigatórias no

padrão FIPA.

58

4.6.2 Componentes FIPA-OS

Além dos componentes obrigatórios do padrão FIPA, o FIPA-OS possui

componentes adicionais para o gerenciamento da plataforma de agentes. A figura 15

apresenta uma visão geral destes componentes.

FIGURA 15 – Visão geral dos componentes FIPA-OS.

4.6.2.1 Implementação do agente

O FIPA-OS fornece um modelo chamado Agent Shell para a construção de

agentes. Um novo agente implementado com o FIPA-OS deve derivar da classe

FIPAOSAgent, que fornece métodos para registro com a plataforma, envio de

mensagens, configuração de tarefas (Tasks) e finalização do agente.

4.6.2.2 Estrutura de agente JESS - JESS Agent Shell

O Java Expert System Shell – JESS é uma ferramenta para desenvolvimento de

sistemas especialistas. Um sistema especialista é um conjunto de regras elaboradas a

partir de um conjunto de fatos, que são executadas quando um conjunto de pré-condições

é satisfeito. A estrutura de agente JESS fornece uma interface para o JESS, permitindo

que agentes possam ter uma base de conhecimento e capacidade deliberativa. A estrutura

59

de agente JESS é implementada na classe JessAgent, que é uma classe derivada da

classe FIPAOSAgent (mais informações na próxima seção).

4.6.2.3 Estrutura de agente - Agent Shell

A classe FIPAOSAgent fornece a estrutura básica para implementação de um

agente através da especialização (derivação) desta classe. Uma classe derivada de

FIPAOSAgent trata automaticamente de todas as inicializações dos componentes

centrais do FIPA-OS. A estrutura de agente fornece a seguinte funcionalidade:

− Envio de mensagens: Através do método forward() da classe

FIPAOSAgent ou Task. Essa mensagem é passada para o CM através do

sendMessage().

− Métodos para encontrar informações sobre o agente, tais como: AID e

estado, por exemplo.

− Métodos para registro na plataforma: O registro como os agentes AMS e

DF são feitos pelos métodos registerWithAMS() e

registerWithDF(), respectivamente.

− Configuração de tarefas: Provê acesso direto a classe TaskManager. A

próxima seção mostra detalhes sobre tarefas e gerenciamento de tarefas.

− Finalização de agente: Provê o método shutdown(), que finaliza o

agente na plataforma, disponibilizando seu recursos.

4.6.2.4 Gerenciador de tarefas

Para facilitar o desenvolvimento de agentes, o FIPA-OS introduziu o conceito

de tarefas. Uma tarefa encapsula parte da funcionalidade de um agente em uma classe

chamada Task. Dessa forma, o comportamento funcional de um agente pode ser dividido

em pequenas partes. Há diversas vantagens nesta abordagem:

− Tarefas são reusáveis por outros agentes.

60

− Torna mais fácil isolar e encontrar erros de programação, devido ao fato

do uso de tarefas incentivar a programação modular.

− Tarefas são executadas em linhas de execução paralelas (threads),

permitindo que os agentes possam executar várias tarefas simultaneamente.

O Gerenciador de Tarefas – Task Manager - TM é responsável pela coordenação

das tarefas de um agente. Ele é um objeto que possui um conjunto de referências para

todas tarefas ativas de um agente. O processo de coordenação de tarefas do TM é baseado

em eventos. Os eventos são enfileirados e processados um por vez pelo TM. A tabela 5

descreve os principais eventos que um TM processa.

TABELA 5 – Eventos tratados por um TM.

Evento Descrição

InitialisedEvent Indica que uma Task foi inicializada (através do método startTask()).

ConversationUpdateEvent Indica o recebimento de uma mensagem

por uma Task envolvida em uma conversação.

ChilDoneEvent Indica que uma classe-filha de uma Task

completou sua execução.

ChilDoneWithResultEvent Indica que uma classe-filha de uma Task completou sua execução e produziu um

resultado.

ChilTimeoutEvent

Indica que o tempo de execução de uma classe-filha de uma Task acabou e deve ser finalizada mesmo antes de completar

sua execução.

ChildFailureEvent Indica que ocorreu uma exceção na classe-

filha de uma Task.

Uma nova Task é criada a partir do método newTask() do TM ou de outra

Task. No segundo caso, a nova Task é chamada filha, ou classe-filha da primeira

Task.

61

Mensagens podem ser enviadas a partir de uma Task. Todas as conversações

iniciadas a partir de uma Task são associadas a esta Task pelo TM, para garantir que as

mensagens recebidas nesta conversação sejam repassadas para a Task correta.

4.6.2.5 Gerenciador de conversações – CM

Todas as mensagens trocadas entre agentes fazem parte de uma conversação. O

Gerenciador de Conversações – Conversation Manager – CM é responsável por agrupar

as mensagens de uma conversação. Também é responsabilidade do CM assegurar que

ambos os lados de uma conversação utilizem o mesmo protocolo de conversação.

4.6.2.6 Serviço de Transporte de Mensagem - MTS

A descrição geral do funcionamento de um Serviço de Transporte de Mensagem

- MTS se encontra na seção 4.3.4. O MTS do FIPA-OS é organizado em um modelo de

camadas de serviços. A figura 16 ilustra como é composto o modelo de camadas.

As mensagens enviadas por um agente chegam no MTS e sofrem modificações

à medida que elas passam de uma camada superior para uma inferior, até chegarem na

camada do Protocolo de Transporte de Mensagem - MTP. O protocolo MTP utilizado

para transportar a mensagem vai depender se essa mensagem destina-se à AP local ou a

uma AP remota. No caso da AP local, a mensagem é enviada para o agente de destino

passando pelas mesmas camadas de serviços, só que na ordem contrária. Se a mensagem

destina-se a uma AP remota, as camadas de serviços pela qual a mensagem deverá passar

vão depender de como o MTS remoto é implementado.

62

FIGURA 16 – Composição lógica do modelo de camadas do MTS do FIPA-OS.

As duas principais vantagens em adotar esse modelo são:

− Dividir a funcionalidade do MTS em pequenos módulos independentes

(serviços), que podem ser testados individualmente.

− Facilitar a introdução de novos serviços.

Os serviços mais comuns encontrados em cada uma das camadas são serviços

de parser e de-parser de linguagens de conteúdo.

4.6.2.7 Protocolos de transporte de mensagens - MTP

Um protocolo de transporte de mensagens (Messages Transport Protocol -

MTP) é que fornece os mecanismos para o transporte físico de mensagens entre agentes.

O FIPA-OS divide estes protocolos em dois tipos: Internos e Externos.

63

− MTPs Internos: São os MTPs encarregados de transportar mensagens

entre agentes de uma mesma AP. Para essa tarefa, o FIPA-OS utiliza o

Remote Method Invocation – RMI. O RMI é uma implementação da empresa

Sun, que faz parte da distribuição Java 2 Standard Edition. Como a utilização

do RMI se restringe ao Java, ela é eficiente para agentes implementados em

Java e não pode ser utilizada em agentes implementados em outra linguagem

de programação. Por estes dois motivos o RMI foi escolhido como MTP

interno padrão do FIPA-OS.

− MTPs Externos: São os MTPs encarregados de transportar mensagens

entre agentes de AP diferentes.Para essa tarefa, o FIPA-OS utiliza o IIOP

(seção 4.5.1). O IIOP possui a vantagem de ser potencialmente interoperável

com quaisquer agentes escritos em linguagens que suportem as especificações

CORBA (seção 4.5.1). Por este motivo, o IIOP foi escolhido como MTP

externo padrão do FIPA-OS.

4.6.3 Configuração e execução do ambiente FIPA-OS

Antes de executar o FIPA-OS, é necessário configurá-lo. O FIPA-OS é

distribuído com um script de configuração chamado SetupFIPAOS. Este script confira

um diretório de instalação para as classes FIPA-OS além de criar alguns arquivos de

configuração da plataforma chamados perfis (profiles). Estes arquivos são:

− acc.profile: Informações de configuração sobre o ACC da plataforma

local.

− default.profile: É um perfil padrão para agentes sem perfis definidos.

− loader.profile: Descreve os tipos de agentes que o AgentLoader pode

inicializar.

− platform.profile: Informações de configuração da plataforma, tais como:

nome da plataforma, localização do AMS e localização de outros perfis.

64

Só após a correta configuração do FIPA-OS é possível utilizá-lo. O script

StartFIPAOS inicializa todos os serviços necessários para executar agentes FIPA-OS, tais

como: RMI, IIOP, DF e AMS, além de executar o AgentLoader. O AgentLoader (figura

17) é uma interface gráfica que fornece meios de inicializar e finalizar agentes. Apesar de

agentes FIPA-OS poderem ser inicializados de outras formas, é extremamente

aconselhável inicializar agentes apenas através do AgentLoader.

FIGURA 17 – Interface gráfica do AgentLoader.

65

5 Sistema de Compartilhamento de Arquivos para FIPA-OS

Neste capítulo será descrito um sistema de compartilhamento de arquivos

desenvolvido com o FIPA-OS. A funcionalidade deste sistema é baseada nos softwares

de compartilhamento de arquivos descritos no capítulo 2.

5.1 Visão geral

Utilizando a abordagem de desenvolvimento de sistemas multiagentes com a

ferramenta FIPA-OS, foi desenvolvido um software para compartilhar arquivos em uma

AP ou entre APs. Ele é composto de duas partes: uma responsável pelo compartilhamento

e transmissão de arquivos e outra pelo consulta, requisição e conseqüentemente, recepção

de arquivos. O usuário utiliza uma interface gráfica gerenciar estes processos. O sistema

roda no ambiente FIPA-OS, e é inicializado a partir do AgentLoader (ver capítulo 4) ou

através de um arquivo de script, caso a máquina que irá rodar o software na tenha uma

instalação do FIPA-OS.

5.2 Descrição dos agentes

Os agentes utilizados no sistema desenvolvido são reativos, ou seja, apenas

respondem a estímulos externos e não possuem uma base de conhecimento. Essa

abordagem foi escolhida devido ao comportamento do sistema ser do tipo consulta –

resposta. O comportamento consulta – resposta é definido por um sistema com elementos

ativos, que dão início aos processos do sistema, e os elementos passivos, que despertam

para ações através de um estímulo externo. Os elementos ativos no sistema de

compartilhamento de arquivos desenvolvido são as consultas e as transferências de

arquivos, enquanto que são considerados elementos passivos as respostas às consultas. Os

elementos ativos e passivos do sistema de compartilhamento de arquivos desenvolvido

66

são incorporados por dois tipos de agentes, chamados FFA e SFMA. Os FMAs e SFMAs

são descritos com maior nível de detalhes à seguir.

Para consulta, foi desenvolvido um agente chamado File Finder Agent – FFA.

Ele é responsável por fazer consultas por arquivos em todas as plataformas acessíveis.

Também é responsabilidade do FFA tratar das tarefas de recebimento do arquivo na

plataforma local, tais como: definir um diretório de chegada de arquivos, gravar o

arquivo recebido no diretório de chegada, além do recebimento do arquivo propriamente

dito.

Arquivos que se encontram em todas as plataformas acessíveis por um FFA só

podem ser encontrados se estiverem sendo compartilhados da forma adequada. Para

compartilhar os arquivos, foi desenvolvido um agente chamado Shared Files Manager

Agent – SFMA. Sua função é informar, quando solicitado, se um arquivo se encontra ou

não compartilhado pela plataforma. Além disso, ele é responsável pelo envio de arquivos

para outras plataformas.

5.2.1 File Finder Agent – FFA

Como já foi descrito anteriormente, a principal função do FFA é encontrar

arquivos em APs rodando pelo menos um SFMA. O FFA fornece uma interface gráfica

para facilitar a interação do usuário com o agente. É nesta interface que são fornecidos o

nome dos arquivos que se deseja encontrar e transferir. A interface também fornece

meios para visualizar informações gerais dos arquivos encontrados em uma consulta, tais

como: nome, tamanho e identificador do agente SFMA que compartilha o arquivo.

A funcionalidade do agente FFA é definida através de quatro tipos de ações:

− Consultar a existência do arquivo no sistema.

− Caso o arquivo exista, requerer a transferência do arquivo.

− Transferir o arquivo.

− Cancelar a transferência do arquivo.

Para consultar sobre a disponibilidade de um arquivo, o usuário fornece à

interface gráfica do FFA o nome do arquivo desejado, através do campo de texto de

consulta (figura 18) e confirma a consulta através do botão de consulta. A partir deste

momento, o FFA vai começar um processo de busca nos DFs do sistema por serviços de

67

compartilhamento de arquivo. Ao término desta busca, o agente FFA receberá uma lista

com descrições de todos agentes SFMA registrados no sistema até então. Com a ajuda

desta lista, o agente FFA enviará mensagem de consulta sobre o arquivo desejado para

cada agente SFMA da lista. O resultado da busca é mostrado na janela de arquivos

encontrados.

FIGURA 18 – Interface gráfica do agent FFA.

Para começar um processo de transferência de arquivo, o usuário seleciona o

arquivo na janela de arquivos encontrados e confirma o início do processo no botão de

transferência de arquivo. O início do processo consiste do envio de uma mensagem de

requisição de transferência de arquivo para o agente SFMA que compartilha o arquivo.

Após uma troca de mensagens de inicialização, o processo de transferência do arquivo é

estabelecido. O progresso desta transferência pode ser acompanhado na interface gráfica,

na janela de andamento de transferências de arquivo. A qualquer momento, uma

transferência de arquivo pode ser interrompida. Para fazer isso, o usuário deve selecionar

a transferência que deseja cancelar na janela de andamento de transferências de arquivo e

68

confirma o cancelamento no botão de cancelamento de transferência. Quando um

cancelamento de transferência é sinalizado para um FFA, ele envia uma mensagem de

cancelamento de transferência para o SFMA participante do processo.

5.2.1.1 Modelo interno do FFA

As ações de um FFA foram descritas de uma forma abstrata na seção anterior.

Nesta seção será descrito como estas ações foram implementadas no FFA com a ajuda da

ferramenta FIPA-OS. O modelo interno do FFA é ilustrado na figura 19.

FIGURA 19 – Modelo interno do FFA.

Um agente FIPA-OS é derivado de uma classe abstrata para descrição de

agentes chamada FIPAOSAgent. O FFA deriva desta classe. A funcionalidade do FFA

descrita na seção anterior foi implementada com o uso de Tasks. As Tasks (ver capítulo

3) são classes FIPA-OS utilizadas para descrição de tarefas realizadas por agentes. As

Tasks desenvolvidas para utilização do agente FFA são:

− FileQueryTask: Define a tarefa de consultar um SFMA específico

sobre a existência do arquivo desejado. Ela é realizada através do envio de uma

mensagem de consulta para o SFMA e espera por uma mensagem que informa a

existência ou não do arquivo. Esta tarefa possui um tempo fixo para ser

concluída. Se ao final do tempo o FFA não obtiver nenhuma resposta do SFMA

consultado, a tarefa será concluída sem resultados.

69

− FileQueryAllTask: Define a tarefa de consultar todos os SFMAs

encontrados pelo FFA. Para isso, cria várias tarefas FileQueryTask, uma

para cada SFMA consultado. Esta tarefa também possui um tempo fixo para ser

concluída.

− FileRequestTask: Define a tarefa de requisitar a um SFMA a

transferência de um arquivo. Ela é realizada através do envio de uma mensagem

de requisição de transferência de arquivo. Esta é a única ação executada por

essa tarefa.

− ReceiveFileTask: Defina a tarefa de receber os pacotes com dados

do arquivo requerido. Ela é iniciada pela IdleTask do FFA após este receber

uma mensagem informativa que sinaliza o início do recebimento do arquivo. A

primeira mensagem que ReceiveFileTask recebe é uma mensagem

informativa com conteúdo relativo aos parâmetros da transmissão, tais como:

número de pacotes de dados em que o arquivo será dividido para transmissão e

tamanho destes pacotes. Pacotes são partes de arquivos que estão anexadas ao

conteúdo da mensagem. As mensagens informativas seguintes já contêm os

dados do arquivo e uma informação sobre número de seqüência do pacote. Para

cada uma destas mensagens que é processada com sucesso, o FFA envia uma

mensagem de confirmação para o SFMA emissor. Uma mensagem de

desconfirmação poderá ser enviada caso o pacote que chegar não possua o

número de seqüência adequado. Uma tarefa ReceiveFileTask é finalizada

após receber o último pacote ou via intervenção do usuário, com o

cancelamento da transferência do arquivo.

5.2.1.2 Interação interface gráfica – FFA

A interação entre interface gráfica e agente FFA é feita através de eventos. O

agente FFA é registrado como ouvinte dos eventos da interface gráfica. A interface

dispara três tipos de eventos relativos à transferência de arquivos:

− FileQueryEvent: Evento disparado quando o usuário confirma o

nome do arquivo consultado através do botão de consulta,

70

− FileRequestEvent: Evento disparado quando o usuário confirma a

requisição de transferência de arquivo através da escolha do arquivo na janela

de resultados da consulta seguido da confirmação no botão de transferência de

arquivo.

− FileTransferCancelEvent: Evento disparado quando o usuário

solicita o cancelamento de uma transferência de arquivos em curso, através da

seleção da respectiva barra de progresso de transferência de arquivos seguido da

confirmação no botão de cancelamento de transferência.

A figura 20 mostra as interações entre a interface gráfica e o FFA.

FIGURA 20 – Interação interface gráfica – FFA.

5.2.2 Shared Folders Manager Agent – SFMA

O SFMA é um pouco menos complexo que o FFA principalmente por não ser

um agente ativo no sistema. Sua tarefa é informar, quando consultado, a existência ou

71

não de determinados arquivos. Também é responsável por transmitir arquivos para FFAs

que os requisitarem.

A funcionalidade do SFMA divide-se entre quatro tipos de ações:

− Adicionar e remover diretórios do compartilhamento.

− Responder sobre a existência ou não, no compartilhamento, do arquivo

consultado.

− Caso o arquivo se encontre compartilhado, transmiti-lo ou não,

dependendo da situação.

− Cancelar uma transferência em curso.

Através do SFMA um usuário pode selecionar diretórios do sistema operacional

da máquina que pertence à plataforma do SFMA para compartilhamento, através de uma

interface gráfica. Todos os arquivos dos diretórios selecionados serão compartilhados,

mas apenas arquivos. Se existir um outro diretório dentro de um diretório previamente

selecionado para compartilhamento, o primeiro deve ser selecionado manualmente,

através da janela de seleção de diretórios para compartilhamento (figura 21). Este

procedimento é utilizado para todos os diretórios escolhidos para compartilhamento.

72

FIGURA 21 – Interface gráfica do SFMA.

Toda vez que um diretório é adicionado ao compartilhamento, o SFMA

adiciona a uma lista de arquivos compartilhados referências a todos os arquivos contidos

neste diretório. É esta lista que o SFMA utiliza como base de pesquisa de consultas feitas

por FMAs. Os nomes dos novos arquivos compartilhados são mostrados em uma janela

de avisos da interface gráfica.

5.2.2.1 Modelo interno do SFMA

A implementação das ações realizadas pelo SFMA,é descrita a seguir. O modelo

interno do SFMA é ilustrado na figura 22.

73

FIGURA 22 – Modelo interno do SFMA.

Novamente, a exemplo do FFA, foram utilizadas Tasks para a implementação

das ações do SFMA. Foram utilizadas três Tasks na implementação do SFMA:

− FileQueryResponseTask: Define a tarefa de responder a uma

consulta por disponibilidade de um arquivo feita por um FFA, A resposta, que é

enviada em uma mensagem informativa, depende se o arquivo encontra-se ou

não na lista de arquivos compartilhados do SFMA. A resposta (sim ou não) está

no conteúdo da mensagem informativa. Esta tarefa é finalizada logo após o

envio da resposta.

− FileRequestResponseTask: Define a tarefa de responder a uma

requisição de transferência de arquivos feita por um FFA. O tipo da mensagem

de resposta depende se o SFMA concorda ou não em transferir o arquivo. Se

concordar, o SFMA envia uma mensagem de concordância e inicia uma tarefa

SendFileTask, senão envia uma mensagem de recusa. Esta tarefa é

finalizada logo após estes procedimentos.

− SendFileTask: Define a tarefa de transmissão do arquivo para o FFA.

Ela é iniciada pela FileRequestTask. A primeira ação desta tarefa é enviar

uma mensagem informativa com informações sobre os parâmetros da

transmissão, tais como: número de pacotes de dados em que o arquivo será

dividido para transmissão e tamanho destes pacotes. As mensagens seguintes

são mensagens informativas com os dados empacotados e com o número de

74

seqüência. Após enviar o último pacote, SendFileTask fica esperando uma

mensagem informativa de fim de transmissão. Quando esta mensagem chega, a

tarefa é finalizada. Se esta mensagem não chegar, a SendFileTask será

finalizada após um tempo pré-determinado.

5.2.2.2 Interação interface gráfica – SFMA

Assim como o FFA, o SFMA também possui uma interface gráfica com o

usuário baseada em eventos. O agente SFMA é registrado como ouvinte dos eventos da

interface gráfica. A interface dispara dois tipos de eventos relativos à transferência de

arquivos:

− SharedFoldersListUpdatedEvent: Evento disparado quando o

usuário adiciona ou remove um diretório na lista de diretórios compartilhados.

− FileTransferCancelEvent: É o mesmos evento utilizado pela

interface gráfica do FFA e é utilizado de forma análoga. É disparado quando o

usuário solicita o cancelamento de uma transferência de arquivos em curso,

através da seleção da respectiva barra de progresso de transferência de arquivos

seguido da confirmação no botão de cancelamento de transferência.

A figura 23 mostra as interações entre a interface gráfica e o SFMA.

75

FIGURA 23 – Interação interface gráfica – SFMA.

5.3 Modelo de organização do sistema de compartilhamento de arquivos

O sistema é organizado na forma de um MAS heterogêneo. Além dos agentes

sempre presentes na plataforma FIPA-OS como o AMS e o DF, o sistema é composto por

agentes FFA e SFMA. Não há uma restrição lógica ao número de agentes FFA e SFMA

em uma mesma máquina de uma plataforma, porém existe uma restrição física, porque os

agentes consumem recursos de sistema, principalmente os agentes FIPA-OS que são

desenvolvidos em Java e por isso necessitam de uma JVM para serem interpretados. De

qualquer forma, para procurar arquivos em plataformas remotas, é necessário pelo menos

carregar um agente FFA e para compartilhar arquivos de uma plataforma é necessário

pelo menos um agente SFMA.

Ao serem executados, os agentes FFA e SFMA automaticamente registram seus

serviços no DF local. O DF local pode estar registrado em outros DFs remotos, criando

uma estrutura federada. Quando um FFA faz uma consulta de disponibilidade de um

arquivo, inicialmente o DF local procura por serviços de SFMA registrados localmente,

isto é, nele mesmo. Em seguida, faz uma busca em todos os DFs nele registrado. O

resultado é passado para o FFA.

76

5.4 O modelo de troca de mensagens

Para executar suas tarefas, os FFAs e SFMAs estão constantemente trocando

mensagens. Estas mensagens representam os atos de comunicação definidos em [FIP

2002g] e são utilizadas conforme mostra a figura 24.

FIGURA 24 – Modelo de troca de mensagens.

77

O modelo de troca de mensagens define o protocolo de interação entre os

agentes FFA e SFMA. O modelo ilustrado na figura 24 não mostra as mensagens de

cancelamento de transferência porque estas podem acontecer a qualquer momento da

conversação. Também não mostra as mensagens do tipo not-understood, devido ao

mesmo motivo. O que é importante saber é que quando uma mensagem com conteúdo de

cancelamento de transferência ou do tipo not-understood ocorrer, o processo de

conversação será finalizado.

A ação de consulta começa com o envio, por parte FFA, de uma mensagem

query-if para o SFMA, que responde com uma mensagem inform-if. O conteúdo da

mensagem queri-if é uma string “Have file?” e uma lista de descrições de arquivos

encontrados. É importante observar que strings são utilizadas nesse sistema para

representar atos da locução da fala (ver capítulo 3). A mensagem inform-if pode ter como

conteúdo a string “Yes” e uma lista de arquivos com o nome consultado ou a string

“No”.

A ação de requisição, que só começa se a ação de consulta teve sucesso, isto é,

se encontrou algum resultado, consiste do envio por parte do FFA de uma mensagem

request para o SFMA, que responde com uma mensagem agree, se concordar em

começar a ação de transferência de arquivo ou responde com uma mensagem refuse, caso

contrário. O conteúdo da mensagem request é a string “Transfer file” juntamente com a

descrição do arquivo. Tanto as mensagens agree e refuse têm como conteúdo a descrição

do arquivo, mas a mensagem refuse também possui uma string com o motivo da recusa.

Se o SFMA aceitar a requisição de transferência de arquivo do FFA, o processo

de transferência do arquivo poderá começar. O SFMA envia para o FFA uma mensagem

inform-if, que têm por conteúdo uma string “File transfer start” e duas informações, uma

indicam o número total de pacotes e outra que sinaliza o tamanho de cada pacote. Se o

FFA receber esta mensagem, enviará como resposta uma mensagem confirm, que tem por

conteúdo uma string “Send next, que indica que o FFA está pronto para receber uma

próxima parte do arquivo. Como resposta a mensagem de confirm recebida, o SFMA

envia uma outra mensagem inform-if com os dados do arquivo. Este processo se repete

até o FFA enviar uma mensagem inform-if que tenha por conteúdo uma string “Transfer

78

done” que sinaliza que o FFA recebeu todos os pacotes. Este é o fim da transferência de

arquivo com sucesso

O processo de transferência do arquivo pode ser cancelado a qualquer momento

por qualquer uma das partes envolvidas no processo.

5.5 Execução do sistema

Para que o sistema possa ser utilizado, é necessário que a plataforma seja

inicializada. Isto pode ser feito através do script StartFIPAOS da instalação do FIPA-

OS. Com uma plataforma inicializada, é possível que agentes FFAs e SFMAs registrem-

se à essa plataforma.

Os scripts startFFA e startSFMA carregam os protocolos e classes Java

necessárias para a execução dos agentes FFA e SFMA, respectivamente. Estes scripts

inicializam os serviços de registro RMI e IIOP necessários para o transporte de

mensagens. Após este inicialização, o arquivo com o perfil da plataforma é carregado. É

neste arquivo que deve conter as informações sobre o endereço do AMS para que o

agente FFA ou SFMA possa registrar-se na plataforma.

Quando o script startFFA é executado, o FFA tenta registrar-se ao AMS

local e o seus serviços no DF local. Se estas duas tentativas de registro tiverem sucesso, a

interface gráfica do FFA será carregada e o usuário poderá fazer consulta por

disponibilidade de arquivos em todos os SFMA registrados na plataforma.

O processo de execução do SFMA ocorre de forma semelhante, exceto que o

script de inicialização é startSFMA Quando um SFMA se registra na plataforma, ele

estará apto a disponibilizar arquivos para todos os FFAs registrados na plataforma e,

eventualmente, em outras plataformas.

79

6 Conclusão

Ao concluir este trabalho, cabe ressaltar como foi a preparação para começar todo

o processo de desenvolvimento do sistema de compartilhamento de arquivos P2P

apresentado nesta monografia. Na fase de elaboração, uma série de problemas foi

encontrada, e uma abordagem para resolução de cada um destes problemas foi escolhida.

A seguir são listados os principais problemas encontrados e quais as soluções encontradas

para resolver estes problemas:

− O desenvolvimento de aplicações de sistemas distribuídos em grandes

redes exige, devido à complexidade e características, tais como distribuição

física dos elementos e heterogeneidade de plataformas que dão suporte a estas

aplicações, ferramentas de desenvolvimento compatíveis com estas

necessidades.

− No caso específico de uma aplicação para compartilhamento de arquivos

em uma rede de computadores, um grande problema é como projetar a aplicação

de forma que esta possa trabalhar com os diversos sistemas operacionais

existentes e a linguagem de programação Java resolveu este problema. O acesso

a arquivos e recursos do sistema operacional é abstraído em classes, que são

interpretadas por uma máquina virtual Java adequada ao sistema operacional

utilizado.

− Outro problema era como encontrar e acessar os vários hosts de uma rede

de computadores para utilizar o serviço de compartilhamento de arquivos. A

organização destes hosts em plataformas habitada por agentes que fornecem o

serviço de compartilhamento de arquivos, isto é, um sistema multiagentes, foi

uma forma intuitiva de resolver este problema.

− Para implementação do sistema multiagente, era necessária uma

ferramenta que fornecesse a infra-estrutura adequada para o desenvolvimento de

agentes. A ferramenta para desenvolvimento de agentes FIPA-OS atendeu a

80

essa necessidade, além de possuir duas características importantes: é totalmente

desenvolvida em Java e segue as especificações FIPA.

Após escolher a abordagem para o desenvolvimento, foi possível tentar alcançar o

objetivo traçado no início do desenvolvimento do trabalho. O objetivo geral era

desenvolver um sistema de compartilhamentos de arquivos P2P utilizando uma

abordagem multiagentes. Para tanto, foram estabelecidos como objetivos específicos

propor uma arquitetura de sociedade de agentes que possa ser aplicada na implementação

do sistema de compartilhamento de arquivos, um modelo de agentes que represente de

forma adequada às funções de cada nodo do sistema, tais como: gerência, consulta e

transferência de arquivos através da rede, a utilização de mecanismos de comunicação e

cooperação entre os agentes do sistema, para viabilizar a execução das funções do

sistema, organizar esta arquitetura de forma que cada agente represente um nodo do

sistema e contribuir para o a popularização da utilização da abordagem multiagente para

desenvolvimento de software.

Apesar destes objetivos terem sido alcançados, muitos outros aperfeiçoamentos

poderiam ter sido feitos. Estes aperfeiçoamentos aumentariam a usabilidade do sistema,

mas fugiam um pouco ao escopo da motivação do trabalho e, por isso, não foram

implementados. Cabe ressaltar também as principais contribuições específicas realizadas

neste trabalho:

− A apresentação de uma abordagem multiagentes para desenvolvimento de

aplicações P2P para compartilhamento de arquivos.

− O estabelecimento de um modelo de agentes para troca de arquivos em uma

rede de computadores.

− A proposição de um modelo de coordenação dos agentes adequados à tarefa

de compartilhar e transferir arquivos em uma rede de computadores.

Com base nas contribuições específicas citadas acima, espera-se que este trabalho

sirva de incentivo para o desenvolvimento de novos sistemas para compartilhamento de

arquivos que utilizem a abordagem multiagentes e que estes sistemas venham a se tornar

81

o padrão para este tipo de aplicação, já que eles podem apresentar características que os

sistemas mais populares dos dias de hoje, como o Kazaa [KAA 2002], não apresentam,

tais como: capacidade de coordenação, aprendizagem, cooperação e comportamento

inteligente.

Para finalizar, uma lista dos aperfeiçoamentos que aumentariam muito a

usabilidade do sistema desenvolvido é mostrada a seguir:

− Aprimoramento da cooperação entra agentes com a adição de meios de um

agente buscar um mesmo arquivo de vários outros agentes.

− Oferecer suporte a restabelecimento de transferência de arquivos perdidas.

− Desenvolvimento de uma agente com uma base de conhecimento de

localização dos arquivos no sistema, para acelerar a consulta de arquivos.

82

7 Bibliografia

[ATT 2000] ATTOUI, A. & INGRAM, S. Real-Time and Multi-Agent Systems. Chambery: Springer Verlag, 2000.

[BIG 2001] BIGUS, J.P. & BIGUS, J. Constructing Intelligent Agents Using Java.

New York: John Wiley & Sons, Inc, 2001. [COU 94] COULOURIS, G & DOLLIMORE, J & KINDBERG, T. Distributed

Systems – Concepts and Design. London: Addison-Wesley, 1994. [DRE 2001] DREAMTECH SOFTWARE TEAM. Peer-to-Peer Application

Development – Cracking The Code. New York: Hungry Minds Inc, 2001.

[FER 99] FERBER, J. Multi-Agent Systems: An Introduction to Distributed

Artificial Intelligence. USA: Addison-Wesley Pub Co, 1999. [FIP 2002a] FIPA. Abstract Architecture Specification. Foundation for Intelligent

Physical Agents, 2000. Disponível em <http://www.fipa.org/specs/fipa00070/>. Acesso em: 10 de set.2002.

[FIP 2002b] FIPA. SL Content Language Specification. Foundation for Intelligent

Physical Agents, 2000. Disponível em <http://www.fipa.org/specs/fipa00070/>. Acesso em: 10 de set.2002.

[FIP 2002c] FIPA. CCL Content Language Specification. Foundation for Intelligent

Physical Agents, 2000. Disponível em <http://www.fipa.org/specs/fipa00070/>. Acesso em: 10 de set.2002.

[FIP 2002d] FIPA. KIF Content Language Specification. Foundation for Intelligent

Physical Agents, 2000. Disponível em <http://www.fipa.org/specs/fipa00070/>. Acesso em: 10 de set.2002.

[FIP 2002e] FIPA. RDF Content Language Specification. Foundation for Intelligent

Physical Agents, 2000. Disponível em <http://www.fipa.org/specs/fipa00070/>. Acesso em: 10 de set.2002.

[FIP 2002f] FIPA. Agent Management Specification. Foundation for Intelligent

Physical Agents, 2000. Disponível em <http://www.fipa.org/specs/fipa00070/>. Acesso em: 10 de set.2002.

83

[FIP 2002g] FIPA. Communicative Act Library Specification. Foundation for Intelligent Physical Agents, 2000. Disponível em <http://www.fipa.org/specs/fipa00070/>. Acesso em: 10 de set.2002.

[FIP 2002h] FIPA. ACL Message Structure Specification. Foundation for Intelligent

Physical Agents, 2000. Disponível em <http://www.fipa.org/specs/fipa00070/>. Acesso em: 10 de set.2002.

[FIP 2002i] FIPA. Agent Message Transport Service Specification. Foundation for

Intelligent Physical Agents, 2000. Disponível em <http://www.fipa.org/specs/fipa00070/>. Acesso em: 10 de set.2002.

[FIP 2002j] FIPA. ACL Message Representation in Bit-Efficient Encoding

Specification. Foundation for Intelligent Physical Agents, 2000. Disponível em <http://www.fipa.org/specs/fipa00070/>. Acesso em: 10 de set.2002.

[FIP 2002k] FIPA. ACL Message Representation in String Specification.

Foundation for Intelligent Physical Agents, 2000. Disponível em <http://www.fipa.org/specs/fipa00070/>. Acesso em: 10 de set.2002.

[FIP 2002l] FIPA. ACL Message Representation in XML Specification. Foundation

for Intelligent Physical Agents, 2000. Disponível em <http://www.fipa.org/specs/fipa00070/>. Acesso em: 10 de set.2002.

[FIP 2002m] FIPA. Agent Message Transport Protocol for IIOP Specification.

Foundation for Intelligent Physical Agents, 2000. Disponível em <http://www.fipa.org/specs/fipa00070/>. Acesso em: 10 de set.2002.

[FIP 2002n] FIPA. Agent Message Transport Protocol for WAP Specification.

Foundation for Intelligent Physical Agents, 2000. Disponível em <http://www.fipa.org/specs/fipa00070/>. Acesso em: 10 de set.2002.

[FIP 2002o] FIPA. Agent Message Transport Protocol for HTTP Specification.

Foundation for Intelligent Physical Agents, 2000. Disponível em <http://www.fipa.org/specs/fipa00070/>. Acesso em: 10 de set.2002.

[FIPA 2002p] FIPA-OS. Foundation for Intelligent Physical Agents Open Source.

Nortel Networks Corporation. Disponível em <http://fipa-os.sourceforge.net/>. Acesso em: 18 de set.2002.

[HUH 98] HUHNS, M.N. & SINGH, M.P. & GASSER, L. Readings in Agents.

Morgan Kaufmann Publishers, 1998. [KAZ 2002] KAZAA. Sharman Networks Ltd. Disponível em

<http://www.kazaa.com/>. Acesso em: 30 de out.2002.

84

[MIL 2002] MILOJICIC, D.S. & KALOGERAKI, V. & LUKOSE, R. &

NAGARAJA, K. & PRUYNE, J. & RICHARD, B. & ROLLINS, S. & XU, Z. Peer-to-Peer Computing. Palo Alto: HP Laboratories, 2002.

[NAP 2002] NAPSTER. Roxio Inc. Disponível em <http://www.napster.com/>. Acesso

em: 30 de out.2002. [ORA 2001] ORAN, A. Peer-to-Peer: Harnessing the Power of Disruptive

Technologies. USA: O’Reilly & Associates, 2001. [RIC 94] RICH, E. & KNIGHT, K. Inteligência Artificial. São Paulo: McGraw-

Hill, 1994. [RIP 2002] RIPEANU, M. Peer-to-Peer Architecture Case Study - Gnutella

Network. Proceedings of the First International Conference on Peer-to-Peer Computing, 2002.

[SEA 70] SEARLE, J.R. Speech Acts: An Essay in the Philosophy of Language.

Cambridge: Cambridge University Press, 1970. [STO 97] STONE, P & VELOSO, M.M. Multiagent Systems: A Survey from a

Machine Learning Perspective. Technical Report. Pittsburgh: Carnegie Mellon University, 1997.

[SUB 2000] SUBRAHMANIAN, V.S. & BONATTI, P. & DIX, J. & EITER, T. &

OZCAN, F. Heterogeneous Agent Systems. USA: MIT Press, 2000. [SYC 98] SYCARA, K.P. Multiagent Systems. AI Magazine. Disponível em

<http://www.aaai.org/Library/Magazine/Vol19/19-02/vol19-02.html>. Acesso em: 01/01/2003.

[TAN 97] TANENBAUN, A.S. Redes de Computadores. Rio de Janeiro: Campus,

1997. [TOR 2001] TORRES, G. Redes de Computadores: Curso Completo. Rio de

Janeiro: Axcel Books, 2001. [WEI 2000] WEISS, G. Multiagent Systems: A Modern Approach to Distributed

Artificial Intelligence. USA: MIT Press, 2000. [WOO 95] WOOLDRIDGE, M. & JENNINGS, N.R. Intelligent Agents: Theory

and Practice. Knowledge Engineering Review, Vol. 10, No. 2. Cambridge: Cambridge University Press, 1995.

85

[WOO 97] WOOLDRIDGE, M. Agent-Based Software Engineering. IEEE Proceedings. Software Engineering 144(1), pag.26-27, 1997.

[ZEU 2002] ZEUS. The ZEUS Agent Building Tool-Kit. British

Telecommunications. Disponível em

<http://more.btexact.com/projects/agents.htm>. Acesso em: 13/11/2002.