3 Teoria de Agentes

3.1 Introdução

O termo agente é utilizado na literatura computacional para determinar diversos tipos de programas. Estes programas não precisam, necessariamente, apresentar um comportamento "inteligente". Obviamente, torna-se difícil estabelecer o que seria um comportamento inteligente, uma vez que o termo "inteligência" ainda é causa de controvérsia entre os estudiosos da Inteligência Artificial (IA). Discussões sobre este problema podem ser encontradas em (Wooldridge & Jennings, 1994), em seu estudo sobre agentes inteligentes, e em uma entrevista com Marvin Minsky (1994). A questão sobre estabelecer um conceito para agentes não é um problema apenas entre as diversas áreas da Computação. Segundo Franklin & Graesser (1996), mesmo entre os pesquisadores envolvidos com trabalhos referentes a agentes inteligentes, existem diversas definições sobre o tema.

Como apresentado por Hendler (1996), pode-se afirmar que os pesquisadores em agentes inteligentes procuram, de forma geral, desenvolver programas sofisticados que podem ser úteis em ambientes de importância para os humanos. Estes ambientes podem variar desde locais físicos de difícil acesso ou perigosos para os humanos até domínios virtuais, como as redes de computadores.

Trabalhos mais recentes (Spector, 1997) enfatizam que um agente pode ser qualquer sistema autônomo que percebe e age para alcançar um estreito conjunto de metas dentro de um específico ambiente virtual ou real. Os sistemas tradicionais de IA têm sido projetados para operar sob o controle do usuário e sobre um olho cuidadoso, enquanto agentes são lançados no mundo para agir autonomamente, geralmente sob suas próprias crenças. Spector (1997) ainda acredita que uma característica positiva dos agentes é sua facilidade de implementação, uma vez que são programas para atuar sob sistemas autônomos e limitados. Sendo assim, seria possível gerar programas agentes automaticamente (programação evolutiva-genética). Nesta abordagem, os agentes seriam o resultado de uma constante evolução, onde aqueles mais especializados e com melhor desempenho seriam os sobreviventes para uma nova geração de agentes.

Pattie Maes (1996) aborda também a utilização da evolução artificial. Entretanto, ela não acredita que a construção de agentes seja tão simples, uma vez que agentes diferem de programas tradicionais principalmente pela capacidade de serem entidades independentes que devem aprender da experiência e responder a situações não previstas com um grande número de métodos diferentes.

Knapik e Johnson (1998) acreditam que agentes se tornarão cada vez mais permanentes nos sistemas computacionais e de comunicação. O motivo principal desta afirmação é a versatilidade dos agentes. Eles podem oferecer serviços como introduzir inteligência às interfaces atuais, mapear informação em conhecimento, realizar comércio eletrônico, além de atuar como procuradores para os usuários nas mais diversas situações.

Para demonstrar a grande abrangência de atuação dos agentes inteligentes pode-se verificar algumas possíveis aplicações:


3.2 Histórico

O conceito de decompor sistemas complexos em diferentes entidades na tentativa de obter maior eficiência não é uma abordagem recente em computação. Durante muitos anos, pesquisadores em Inteligência Artificial buscaram a construção de agentes isolados com alguma conduta inteligente. Segundo Kay (1984), a idéia de agentes foi originada em meados da década de 50 com John McCarthy e Oliver Selfridge. Eles tinham em mente um sistema onde dada uma meta, uma seqüência de ações seria executada na tentativa de satisfazer aquela meta. Este sistema também poderia solicitar ajuda quando necessário. Um agente seria um robô virtual (soft robot) vivendo e realizando seus negócios dentro de um universo computacional.

Os primeiros agentes trabalhavam na resolução de problemas usando heurísticas ou métodos baseados em conhecimento. Alguns destes agentes poderiam ainda planejar, aprender e modificar suas percepções sobre o ambiente no qual estavam inseridos. Estas características ainda estão presentes em um grande número de aplicações da IA.

Na década de 70, Hewitt (1977) propôs um agente com o conceito de um objeto auto-suficiente, interativo e com execução concorrente, o qual ele denominava ator. Este objeto teria alguns estados internos encapsulados e responderia a mensagens de objetos similares.

Entretanto, o crescente interesse por paralelismo e distribuição na IA marcou a última década. De acordo com Bond (1988), o desenvolvimento de poderosos computadores, a proliferação de redes de computadores e a consideração sobre o uso de grupos de indivíduos para resolver problemas fizeram com que a Inteligência Artificial Distribuída (IAD) se tornasse uma área emergente.

Nwana (1996) também enfatiza o crescimento da IAD e separa as pesquisas realizadas na área em duas linhas distintas: a primeira do período de 1977 até os dias atuais, e a segunda partindo de 1990. A primeira linha trabalha com agentes ativos, estando mais relacionados a tipo de agente deliberativo com modelos simbólicos internos. Um agente deliberativo é aquele que possui uma representação explícita, um modelo simbólico do mundo, e cujas decisões (ações a executar) são realizadas através de um raciocínio simbólico (Wooldridge e Jennings, 1994). A segunda linha de pesquisa, em rápido desenvolvimento, enfatiza a diversificação das tipologias ou classes de agentes, onde os agentes apresentam uma evolução em sua inteligência e autonomia. Bradshaw (1997) afirma que esta linha demonstra a evolução da deliberação para a execução, do raciocínio para a ação remota.

Chaib-draa (1995) considera que a motivação para a IAD pode ser caracterizada pelos seguintes tópicos:

A IAD pode ser vista como sendo um subcampo da Inteligência Artificial voltado para a construção de agentes inteligentes. A IAD está diretamente ligada a agentes inteligentes, uma vez que estes podem ser vistos como entidades dentro de um sistema inteligente distribuído. Estas entidades são autônomas e podem cooperar entre si através de algum mecanismo de natureza inteligente. Segundo Chaib-draa (1995), os agentes precisam tomar decisões que permitam alcançar os seus objetivos em um mundo povoado por outros agentes inteligentes e com seus próprios objetivos.

Oliveira (1996) define IAD como sendo o estudo computacional da conduta inteligente, resultando na interação de diversas entidades autônomas. Estas entidades são usualmente chamadas de agentes, e o sistema como um todo é usualmente chamado de sociedade. Os conceitos de interação e conduta social também estão presentes no trabalho de Sichman et al (1992). Sichman considera que estes aspectos podem ser utilizados para a construção de uma inteligência coletiva. Este item em particular diferencia a IAD da IA tradicional, a qual trabalha com representação do conhecimento e métodos de inferência voltados para a construção de uma inteligência individual.

A Inteligência Artificial Distribuída pode ser subdividida em duas grandes áreas:

É importante ressaltar que o termo MAS tem sido utilizado, atualmente, para definir quaisquer sistemas onde múltiplos agentes interagem (Durfee & Rosenschein, 1994). Entretanto, a divisão apresentada procura mostrar os diferentes tipos de problemas, além de tentar evitar o mau uso do termo. De acordo com Scherer & Schlageter (1995), o principal ponto de pesquisa em MAS está focado na coordenação. Estes autores continuam afirmando que as abordagens MAS atuais possuem um aspecto inerentemente estático. MAS são projetados para seguir uma filosofia top-down, onde, normalmente, não é permitido a adição ou remoção dinâmica de agentes. Além disso, ambientes MAS têm usado um forte acoplamento, onde os agentes não têm capacidade de decidir por si próprios se devem ou não cooperar.

Tanto em problemas MAS quanto em problemas DPS, existem diversos agentes compartilhando um mesmo ambiente. A principal diferença está na forma de interação entre os agentes. Em um modelo DPS, os agentes buscam a cooperação para alcançar suas metas (por este motivo, problemas deste tipo são também conhecidos por problemas DPS cooperativos). Neste caso, os agentes lidam com problemas que estão além de suas capacidades individuais e apenas a cooperação mútua permitirá a resolução do problema global. Em um modelo MAS, os agentes competem por recursos e precisam atuar coletivamente para identificar e resolver conflitos. Ao mesmo tempo, os agentes procuram se beneficiar com as ações tomadas por outros agentes.

Segundo Durfee & Rosenschein (1994), sistemas DPS procuram trabalhar na base da confiança, sinceridade, divisão de tarefas e outras propriedades que são muito difíceis de serem alcançadas em uma coleção de indivíduos. Sendo assim, os sistemas MAS basearam-se na teoria dos jogos para demonstrar que um agente precisa ser racional, ou seja, todas as suas ações devem ser no sentido de maximizar o seu próprio custo/benefício.

Entretanto, o trabalho de Durfee & Rosenschein não procurou separar totalmente sistemas DPS de sistemas MAS, mas apresentou três visões de relacionamento entre eles. Em uma primeira proposta, sistemas DPS podem ser vistos como sendo um subconjunto dos sistemas MAS. Nesta situação, um sistema MAS assegura algumas propriedades como metas comuns e projeto centralizado. Na segunda proposta, os sistemas MAS fornecem a base para os sistemas DPS. Sendo assim, um sistema MAS procura trabalhar com a individualidade e o interesse próprio de cada agente para definir como serão feitas as interações com outros agentes. O sistema DPS procura então, verificar como estas interações podem ser exploradas de forma a resolver algum problema mais global. Na terceira proposta, os sistemas MAS são vistos como sendo complementares aos sistemas DPS. Neste caso, um sistema MAS procura responder de que forma algumas propriedades coletivas podem ser percebidas em um ambiente particular. Enquanto, sistemas DPS procuram responder como uma coleção particular de agentes pode obter algum desempenho eficiente se as propriedades do ambiente são dinâmicas e não controláveis.

3.3 Definições de Agentes

Como enfatizado anteriormente, existem diversas definições para agente. Normalmente, estas definições estão associadas a diferentes pontos de vista e dependem muito da funcionalidade fornecida pelo agente em questão. Entretanto, a visão de vários conceitos auxilia no processo de entendimento de aspectos importantes que envolvem o termo agente. Este trabalho procura abordar apenas agentes de software, embora muitas das características que serão discutidas poderem estar presentes em agentes de hardware.

Antes de abordar conceitos mais técnicos, este trabalho considera importante verificar qual o significado da palavra agente na língua portuguesa para se ter uma idéia inicial sobre o tema. O dicionário interpreta agente como:

agente n.

1. Alguém que atua

2. alguém atuando ou fazendo negócios por outro

3. procurador, delegado.

... (Merriam-Webster, 1996).

Apesar das definições supracitadas atenderem algumas características, agentes inteligentes possuem um significado bem mais amplo do ponto de vista da comunidade de pesquisadores em Inteligência Artificial. Algumas destas abordagens serão vistas nesta seção.

Wooldridge e Jennings (1994) afirmam que agentes são sistemas que apresentam um comportamento determinado por um processo de raciocínio baseado na representação de suas atitudes, tais como crenças, comprometimentos e desejos. Eles acreditam que um sistema pode ser visto como um agente se ele possuir as seguintes propriedades:

Seguindo a mesma linha de raciocínio da definição anterior, Genesereth and Ketchpel (1994) descrevem agentes como componentes de software que se comunicam com seus pares através da troca de mensagens em uma expressiva linguagem de comunicação de agentes.

Uma definição mais voltada para o uso de agentes como assistentes pessoais é proposta por Maes (1994). Ela define agentes como sendo componentes de software que atuam autonomamente de forma a atender os interesses do usuário.

Russell e Norvig (1995) apresentaram uma nova proposta de entender Inteligência Artificial. Em seu trabalho, eles estabelecem que inteligência está altamente ligada com ações racionais. Agir racionalmente significa agir de forma a alcançar as metas definidas por alguém, dadas as crenças deste alguém. Neste sentido, ele definem genericamente um agente como sendo algo com a capacidade de atuar sobre um ambiente através de sua percepção sobre este ambiente.

Franklin e Graesser (1996) procuraram não apenas definir um agente, mas estabeleceram uma taxonomia baseada na principal noção de autonomia. Eles consideram que um agente autônomo é um sistema que faz parte de um ambiente, onde ele percebe e atua para atender suas próprias metas.

Nissen (1995) utiliza uma definição mais informal. Ele define um agente como sendo alguém ou alguma coisa que atua como um procurador com o propósito específico de realizar ações que podem ser entendidas como benéficas à parte representada.

Agentes podem também ser definidos operacionalmente em termos de domínios no qual fornecem seus serviços (Knapik e Johnson, 1998), incluindo busca por informação, filtragem de dados, ajuda sensível ao contexto, assistência em tempo real, além da execução de tarefas conforme as necessidades de um usuário e outros. Neste contexto, uma abordagem possível para definir agentes pode ser através de sua organização, seguindo algum tipo de classificação.

Uma definição mais específica e que deve ser aceitável pela maioria dos pesquisadores é proposta por (Shoham, 1997). Ele define agente como sendo uma entidade de software funcionando continuamente e de forma autônoma em um ambiente particular, freqüentemente habitado por outros agentes e processos.

Como visto, existem diversas propostas para definir o que é um agente. Entretanto, pode-se observar claramente que todas possuem características em comum. Dentre estas características deve-se enfatizar propriedades como autonomia, capacidade de responder a determinadas situações, facilidades para comunicação e capacidade para aprender como alcançar seus objetivos. Por serem muito importantes no entendimento de agentes, estas propriedades serão exploradas na próxima seção.

3.4 Atributos dos Agentes

Foi discutido anteriormente que um agente pode ser definido a partir de suas características básicas. O conjunto destas características é ainda utilizado como uma forma para agrupar os agentes em classes ou tipologias. Um agente não precisa possuir todas estas características ou atributos, embora suas capacidades estejam diretamente associadas a presença delas.

Esta seção não procura apresentar todos os atributos existentes, mas apenas os mais relevantes. É importante ainda ressaltar que os atributos discutidos não estão em ordem de importância. A escolha de quais atributos devem estar presentes em um agente depende da funcionalidade que o projetista pretende dar ao seu agente.

3.4.1 Autonomia

Segundo Nwana (1996), autonomia refere-se ao princípio de que os agentes podem agir baseados em seus próprios princípios, sem a necessidade de serem guiados por humanos. Os agentes possuem estados e metas internos, agindo de maneira a atingir estas metas em favor de seus usuários. O elemento chave da autonomia é a pró-atividade, que é a sua habilidade de tomar iniciativas, sem a necessidade de agir em virtude de uma mudança de seu ambiente (Wooldridge e Jennings, 1994).

Nissen (1995) relaciona o controle somente ao usuário final quando estabelece que um agente inteligente deve possuir a habilidade de praticar ações para desenvolver tarefas ou alcançar objetivos, sem necessitar da interferência do usuário final.

De acordo com Foner (1993), os agentes detentores de um alto grau de autonomia podem manter suas agendas independentes daquelas de seus usuários. Para tanto, os agentes apresentam 3 aspectos básicos: ações periódicas, execução espontânea e iniciativa. Estes requisitos habilitam o agente autônomo a efetivar ações preemptivas e independentes que poderão eventualmente beneficiar o usuário.

No contexto da Internet, Nissen (1995) afirma que autonomia é a habilidade de operar, mesmo quando o usuário final está desconectado da rede. Neste caso, esta propriedade normalmente está associada a outra: mobilidade.

3.4.2 Mobilidade

A capacidade de poder se mover através de uma rede de computadores parece ser interessante para agentes que auxiliam seus usuários na busca de informações, principalmente dentro da Internet. Entretanto, este atributo pode causar sérios problemas de sobrecarga na rede, uma vez que eles trafegam entre as máquinas conectadas. Knapik e Johnson (1998) apresentam outro problema que está relacionado com segurança: um agente móvel pode conter problemas de código ou até mesmo estar transportando um vírus de computador. Sendo assim, a implantação de agentes móveis deve ser acompanhada de processos de autorização, além da garantia de que a memória e os recursos da máquina estarão protegidos.

3.4.3 Cooperação

Cooperação pode ser entendida como a capacidade que os agentes tem de trabalharem em conjunto de forma a concluírem tarefas de interesse comum. Nwana (1996) acredita que a cooperação entre agentes é fundamental, sendo a razão principal para a existência de um ambiente multi-agente. Para permitir esta cooperação, o agente deve ser dotado de uma certa habilidade social, capacitando-o a interagir com outros agentes e possivelmente humanos através de alguma linguagem de comunicação (Wooldridge e Jennings, 1994).

3.4.4 Comunicabilidade

Quando existe mais de um agente envolvido, há uma necessidade óbvia por um modelo de comunicação. Entretanto, o conceito de comunicabilidade não estabelece apenas a troca de informações entre agentes. Franklin e Graesser (1996) afirmam que agentes podem se comunicar com outras entidades além de agentes, incluindo-se humanos e o seu ambiente.

Por ser um atributo importante no contexto deste trabalho, a seção 2.6 discute a comunicação entre agentes com maior detalhe.

3.4.5 Aprendizagem

Um dos atributos que mais caracterizam agentes inteligentes é a capacidade de aprender. Uma real autonomia só pode estar presente quando um agente possui a habilidade de avaliar as variações de seu ambiente externo e escolher qual a ação mais correta. Entretanto, mesmo quando um agente não reconhece nenhuma ação a ser executada, é esperado que ele procure encontrar uma saída. A questão não é acertar sempre, mas aprender continuamente por experiência, seja através de sucessos ou de fracassos.

O aprendizado pode ser também um processo interativo. Nestes casos, o treinador pode fornecer ao agente o conhecimento através de uma seqüência de instruções ou informá-lo apenas quando o agente não possuir o conhecimento necessário (Lemon et al, 1996).

3.4.6 Reatividade

Reatividade é a habilidade que um agente tem de reagir a mudanças no seu ambiente. Para tal, o agente deve ser capaz de perceber seu ambiente e atuar sobre ele. Este atributo está presente em praticamente todas as definições de agente (Wooldridge e Jennings, 1994), (Russell e Norvig, 1995), (Franklin e Graesser, 1996).

3.4.7 Habilidade Social

Este atributo está diretamente associado com a característica de comunicabilidade, uma vez que representa a habilidade de interagir com outros agentes. Genesereth e Ketchpel (1994) indicam a necessidade de uma linguagem comum para a comunicação de agentes.

3.4.8 Pró-atividade

Este atributo pode ser também denominado iniciativa, uma vez que representa um comportamento independente. As ações são dirigidas pelo objetivo e não simplesmente por mudanças no seu ambiente. O agente que implementa este atributo possui maior flexibilidade, pois é capaz de resolver problemas causados por situações inesperadas.

3.5 Tipologia de Agentes

A grande quantidade de atributos discutidos na seção anterior ajuda a perceber que seria muito difícil implementar um agente que incorporasse todos aqueles atributos. Até porque as características de um agente são dependentes do tipo de aplicação a que ele se propõe.

A análise dos atributos que estão presentes nos agentes tem sido utilizada pelos pesquisadores para organizar os agentes em tipologias. Uma tipologia é uma classificação por tipos de agentes que possuem atributos em comum. Alguns dos principais atributos utilizados na formação de uma tipologia foram discutidos na seção anterior (3.4).

Nwana (1996) propõe uma tipologia de agentes que identifica diferentes dimensões de classificação. Ele acredita que agentes podem ser classificados de acordo com:

Após estabelecer sua tipologia, Nwana estabeleceu 7 categorias de agentes: agentes colaborativos, agentes de interface, agentes móveis, agentes de informação, agentes reativos, agentes híbridos e agentes inteligentes.
 


Fig. 2 – Tipologia de Agentes proposta em (Nwana, 1996).


 


Franklin e Graesser (1996) acreditam que um agente, por definição, deve ser um processo em contínua execução e possuir, pelo menos, os atributos de autonomia, reatividade e pró-atividade. Wooldridge e Jennings (1994) acrescentam ainda que um agente precisaria também possuir a habilidade social. Franklin e Graesser (1996), após estudar várias definições de agentes, apresentaram uma taxonomia que engloba grande parte dos trabalhos em andamento (fig. 3).

Caglayan e Harrison (1997) estabelecem uma taxonomia através dos conceitos de ambiente, tarefa e arquitetura. Por ambiente deve-se entender o universo onde o agente atua, como um sistema operacional em particular ou a Internet. O conceito de tarefa está relacionado com o quê um agente pode fazer. Arquitetura representa como o agente organiza internamente seu conhecimento. Utilizando estes conceitos, os autores dividiram os agentes em 3 categorias: desktop, Internet e Intranet. Agentes Desktop são basicamente agentes de interface que oferecem serviços de assistência aos seus usuários. Na categoria Internet, os agentes oferecem serviços de busca, filtragem e recuperação de informações. Os agentes móveis e de notificação também estão inclusos nesta categoria. Os agentes da categoria Intranet incluem aqueles que possuem capacidade para automatizar processos do fluxo de trabalho dentro das organizações. Outros agentes Intranet manipulam bancos de dados e alocam recursos em uma arquitetura cliente/servidor.
 

Fig. 3 – Taxonomia de Agentes proposta por Franklin e Graesser (1996).


 



3.5.1 Agentes Colaborativos

Em sistemas colaborativos, cada agente contribui com sua própria técnica inteligente para a solução de um problema complexo. Agentes colaborativos enfatizam autonomia e cooperação com outros agentes de forma a executar tarefas para seus donos. Neste ambiente, torna-se clara a necessidade de negociação para estabelecer acordos e comprometimentos mútuos. Apesar de aprendizado não ser a principal ênfase da operação de agentes colaborativos, eles podem demonstrar um aprendizado limitado. Para que um processo de colaboração possa acontecer, é clara a necessidade de se definir uma linguagem comum para a comunicação entre agentes.

3.5.2 Agentes de Interface

Os agentes de interface podem ser conhecidos também como sendo agentes que podem aprender ou assistentes pessoais. Eles enfatizam a autonomia e o aprendizado para executarem tarefas para seus donos. Este tipo de agente atua normalmente em background, analisando as ações do usuário, encontrando padrões repetitivos e automatizando estes padrões com a aprovação do usuário.

A idéia de utilizar agentes inteligentes como assistentes pessoais (Minsky, 1994) torna-se mais clara a medida que a tecnologia de agentes evolui. Segundo Fleischhauer (1996), esta nova tecnologia vem aproximar ainda mais o usuário do seu computador pessoal. Maes (1994) também idealiza estes agentes através da metáfora de um assistente pessoal que colabora com o usuário em um mesmo ambiente de trabalho. Torna-se importante verificar que a colaboração citada não precisa utilizar uma linguagem explícita para a comunicação, uma vez que ela é feita diretamente com o usuário e não com outros agentes.

Essencialmente, agentes de interface suportam e providenciam assistência, tipicamente para o usuário aprender a usar uma aplicação em particular, como um sistema operacional, por exemplo. O agente observa o usuário e monitora suas atividades na interface, aprendendo maneiras novas de executar tarefas, e sugerindo maneiras melhores de executá-las. Desta maneira, conforme Nwana (1996), o agente atua como um assistente pessoal autônomo que coopera com o usuário realizando algumas tarefas na aplicação. Os agentes de interface aprendem para oferecerem um melhor auxílio aos seus usuários. Segundo Maes (1994), os agentes de interface podem aprender a partir de quatro maneiras:

Atualmente, há um grande número de aplicações na Internet que dizem possuir a habilidade de aprendizado. Normalmente, estes agentes estão relacionados com recomendação de serviços, tais como livros ou músicas.

Um bom exemplo de agente de interface é o Open Sesame! (Caglayan et al, 1996). Este agente utiliza uma abordagem híbrida para a aquisição de conhecimento e mecanismos de inferência que combina redes neuronais e sistemas especialistas.

3.5.3 Agentes Assistentes

No contexto deste trabalho, agentes assistentes são agentes pessoais inteligentes. Apesar de possuírem semelhanças com os agentes de interface, os assistentes adicionam facilidades de ajuda, diagnóstico e orientação, além de poderem executar tarefas autonomamente, sem a intervenção humana.

Um assistente deve ser capaz de identificar situações onde o usuário pode precisar de ajuda e, então, fornecer alguma informação adicional para auxiliá-lo. Outra facilidade é a habilidade de representar seu usuário de forma autônoma, utilizando uma base de crenças criada a partir dos interesses de seu usuário. Desta forma, humanos poderão participar de um processo cooperativo envolvendo outros humanos e agentes.

Um exemplo de agente assistente é o agente de domínio do projeto GRACILE (Ayala e Yano, 1995, 1996). O contexto deste agente é um ambiente de aprendizado colaborativo para o ensino da língua japonesa. Este agente é capaz de assistir alunos através da apresentação de estruturas de linguagem e realização de análises sobre as construções produzidas por eles.

3.5.4 Agentes de Recuperação de Informação

Estes agentes são capazes de buscar informação de uma forma inteligente. É importante notar que estes agentes não devem ser confundidos com simples mecanismos de busca utilizados na Internet. O objetivo não é simplesmente encontrar informações que satisfaçam um conjunto de palavras-chave, mas espera-se que este tipo de agente possa reconhecer padrões de informação e encontrar aquelas mais relevantes. Além disso, este agente deve poder operar em modo autônomo, realizando filtragens e em alguns casos aplicando inferências. Neste caso, o agente consegue transformar pedaços de informação em conhecimento altamente produtivo para seu usuário. Estes agentes tem ampla aplicação em organizações que possuem grande volume de informação espalhada geograficamente ou em vários bancos de dados.

3.6 Comunicação entre Agentes

Os sistemas modernos de computação freqüentemente envolvem múltiplos computadores interagindo de forma distribuída (Finin et al, 1994). Neste sentido, a habilidade de comunicação é um importante atributo que os agentes inteligentes devem possuir. Ambientes que possuem mais de um agente, praticamente exigem o intercâmbio de informações. Neste sentido, torna-se claro a necessidade de uma linguagem de comunicação comum. Apesar desta afirmação ser clara e bem aceita pela comunidade de pesquisadores, o problema é definir qual a linguagem ideal. Atualmente, não existe uma linguagem padronizada e aceita mundialmente para a representação de informações trocadas por agentes. A presença de uma linguagem comum para troca de mensagens é uma das características que diferencia um agente de um objeto na programação orientada a objetos. Uma mensagem no contexto dos agentes carrega uma semântica independente do agente, enquanto que uma mensagem no contexto dos objetos pode variar de um objeto para outro.

Finin et al (1993) estabelecem que existem diversos níveis nos quais sistemas baseados em agentes devem interagir:

O projeto de uma linguagem de comunicação entre agentes utiliza normalmente uma das seguintes abordagens: procedural ou declarativa. Na abordagem procedural, a comunicação acontece através de diretivas. Tanto comandos individuais quanto programas completos podem ser transmitidos e executados no lado receptor. Linguagens baseadas em scripts, tais como TCL e Telescript, são exemplos da abordagem procedural.

Na abordagem declarativa, a comunicação ocorre através da troca de estruturas declarativas, tais como definições, asserções e outras. A abordagem declarativa pode ser encontrada no trabalho de Genesereth e Ketchpel (1994), que escolheram a Linguagem de Comunicação entre Agentes (ACL - Agent Communication Language) como a base de comunicação para sua plataforma de Engenharia de Software baseada em agentes. A ACL foi o resultado do grupo ARPA KSE (Knowledge Sharing Effort) (Neches et al, 1991). Pode-se dividir a ACL em três partes:

Uma mensagem ACL é uma expressão KQML na qual os argumentos são termos ou sentenças KIF formadas por palavras no vocabulário ACL. Entretanto, é importante ressaltar que a linguagem KQML não foi idealizada para transmitir apenas um conteúdo baseado em KIF. Na verdade, KQML pode ser bem mais abrangente, permitindo até a transmissão de um conteúdo definido pelos próprios projetistas do sistema multi-agente em questão. Obviamente, a não utilização de uma linguagem padronizada e com habilidade de representação de conhecimento, como KIF, reduz a possibilidade de interação entre agentes desenvolvidos por projetistas diferentes.

Por ser importante para o contexto deste trabalho, a linguagem KQML será apresentada em mais detalhes na próxima subseção.

3.6.1 KQML

A linguagem KQML fornece uma plataforma para programas e agentes trocarem informações e conhecimento. KQML está focada nos formatos de mensagem e em protocolos de manipulação destas mensagens entre agentes em execução. Entretanto, KQML não se preocupa com o formato da informação propriamente dita. Suas expressões usualmente encapsulam estruturas de outras linguagens denominadas "linguagens de conteúdo". Como visto, o grupo KSE utiliza a linguagem KIF como responsável por carregar o conteúdo. KQML é uma linguagem que permite programas realizarem operações sobre as bases de conhecimento de cada agente envolvido.

É importante notar que, por se tratar de uma linguagem, alguns termos apresentados neste trabalho não serão traduzidos. Uma mensagem KQML é chamada performative. Cada mensagem tem o objetivo implícito de realizar alguma ação específica. Como pode ser observado na especificação da linguagem (Finin et al, 1993), existe um grande número de performatives definidas e a maioria dos sistemas baseados em agente suportam somente um pequeno subconjunto delas. As performatives, ou tipos de mensagem, são palavras reservadas em KQML. Usando performatives, agentes podem perguntar a outros agentes por informações, dizer a outros agentes fatos, divulgar seus serviços a outros agentes e solicitar serviços de outros agentes.

KQML adota o uso de ontologias. Ontologias são um conjunto de especificações explícitas de significado, conceitos e relacionamentos aplicáveis a algum domínio específico. Desta forma, pode-se assegurar que dois agentes estejam utilizando a mesma linguagem durante o processo de comunicação. Em outras palavras, a utilização de uma ontologia permite a definição de um contexto único, eliminando-se a ambigüidade.

Mensagens KQML codificam informação em três diferentes níveis arquiteturais: conteúdo, mensagem e comunicação. Sua sintaxe está baseada na linguagem Lisp e é composta de uma ação (performative) e parâmetros. A ordem de posicionamento dos parâmetros não é importante. Os parâmetros são codificados como pares <palavra-chave valor>, onde a palavra-chave é precedida pelo símbolo ":".

Um exemplo de uma mensagem KQML é apresentado na figura 4. No exemplo, um agente user1 solicita o conceito de um objeto (em um provável curso de programação orientada a objetos) para outro agente user2.

A performative KQML utilizada é ask-one. O parâmetro :content define o nível de conteúdo da mensagem com uma estrutura da linguagem Prolog que espera retornar em X, o conceito de um objeto. Os parâmetros :sender e :receiver especificam a informação ao nível de comunicação. O nome da performative, a especificação da linguagem (:language) e o nome da ontologia usada (:ontology) fazem parte do nível de mensagem. É importante notar que a mesma mensagem poderia ser enviada com um conteúdo e linguagem diferentes, ou ainda, exatamente a mesma mensagem com uma ontologia diferente. Neste caso, o significado da mensagem seria outro, completamente diferente do mostrado no exemplo.
 


Fig. 4 – Exemplo de uma mensagem KQML.


 


Uma característica interessante da linguagem KQML é que ela pode oferecer uma forma de acesso à informação, mesmo para programas que não sejam agentes. Segundo Finin et al (1993), a implementação de um agente não é necessariamente estruturada como sendo uma base de conhecimento. Sua implementação pode ser um simples sistema de banco de dados ou um programa utilizando um estrutura de dados especial encapsulada por uma interface de acesso semelhante a uma base de conhecimento. Isto permitiria que outros agentes tivessem acesso às informações disponíveis. Desta forma, cada agente poderia gerenciar uma base de conhecimento virtual (VKB – Virtual Knowledge Base).

3.7 Arquiteturas de Agentes

Uma arquitetura de software pode ser descrita como sendo a configuração dos componentes que constituem um sistema e das conexões que coordenam as atividades entre estes componentes (Abowd et al, 1996). Entretanto, uma arquitetura para agentes refere-se ao modo de organização dos agentes dentro de um sistema e como estão estruturados seus relacionamentos e interações.

Assim como existem diversas arquiteturas de software, o mesmo ocorre com relação as arquiteturas de agentes, as quais possuem certas características que permitem a avaliação de sua qualidade e eficácia.

Segundo Wooldridge e Jennings (1994), uma arquitetura de um agente pode ser estruturada através de uma metodologia específica para definir agentes. Sendo assim, a arquitetura abrangeria técnicas e algoritmos para suportar esta metodologia.

Conforme Knapik e Johnson (1998), a discussão sobre a qualidade de uma arquitetura de agentes torna-se subjetiva, uma vez que os detalhes desta discussão dependem de aspectos específicos da aplicação agente que se pretende desenvolver. No entanto, Mowbray (1995) procura estabelecer alguns conceitos que podem ser úteis para o desenvolvimento de uma arquitetura promissora:


3.7.1 Classificação de Arquiteturas

Em computação, o termo arquitetura pode compreender uma faixa razoável de possibilidades, principalmente no aspecto complexidade. Arquiteturas de agentes não são uma exceção e podem ser classificadas de acordo com as necessidades da aplicação, dos usuários, e o grau de sofisticação ou nível de inteligência dos agentes. De acordo com Knapik e Johnson (1998), a complexidade de uma arquitetura pode ser classificada em três grupos:

Wooldridge e Jennings (1994) se baseiam na forma de construção dos agentes envolvidos para dividir as arquiteturas em três áreas:


3.7.2 Arquitetura M

Esta arquitetura, proposta por Riecken (1994), adota a premissa que um assistente pode ser implementado através de vários agentes integrados. Ela resultou na idealização de M, um programa assistente que procura reconhecer, classificar, indexar, armazenar, recuperar, explicar e apresentar informações relacionadas à interação homem-computador em um ambiente de conferência multimídia.

M é uma arquitetura complexa, envolvendo a interação e a coordenação de vários agentes direcionados a objetivos, os quais colaboram e contribuem na realização de tarefas complexas.

A arquitetura M é composta por vários tipos de componentes que providenciam capacidades espaciais, estruturais, funcionais, temporais, causais, baseadas em explanação, e raciocínio baseado em casos. Seu desenvolvimento baseou-se na decomposição de tarefas. A figura 5 ilustra como as diferentes tarefas estão associadas à diferentes tipos ou classes de agentes e outros componentes funcionais.

O componente quadro negro (Blackboard) corresponde a uma estrutura global usada pelo sistema para armazenar dados relacionados a tarefas e as entidades envolvidas nesta estrutura.

As redes semânticas encapsulam parte do conhecimento em nós conectados por relacionamentos. Quando um nó é ativado, ou seja, determinado conhecimento é acessado por outro agente ou componente, outros nós também podem ser acessados ou ativados, através dos relacionamentos.
 


Fig. 5 – Arquitetura de Software M (Riecken, 1994).


 


O sistema baseado em regras utiliza a abordagem clássica para a definição da base de conhecimento que consiste de fatos e regras que podem ser disparadas de acordo com certas condições. Estas regras incluem validações e descrições explícitas sobre algum domínio.

Os scripts são estruturas que representam uma seqüência de eventos realizados para a resolução de um problema do passado. Um agente segue um script ou um script pode realizar um histórico das atividades dos agentes do sistema. Esta é a forma proposta pela arquitetura para implementar a abordagem baseada em casos.

Uma interessante característica da arquitetura proposta é a flexibilidade oferecida. O assistente poderia ser aplicado a diversos tipos de domínio, promovendo sua reusabilidade.

3.7.3 Arquitetura proposta por Genesereth

O trabalho de Genesereth e Ketchpel (1994) está focado na interoperabilidade de software. A proposta foi facilitar a criação de sistemas com habilidade de interação através de uma engenharia de software baseada em agentes. Nesta abordagem, os programas de aplicação são escritos como sendo agentes de software. Estes agentes podem ser interpretados como componentes que comunicam-se com seus pares por meio da troca de mensagens através de uma linguagem de comunicação de agentes. Apesar da semelhança com objetos, os agentes utilizam uma linguagem comum com uma semântica independente de agente enquanto que mensagens entre objetos podem variar de objeto para objeto. Esta arquitetura adota a abordagem ACL (Agents Communication Language), apresentada na seção 2.6, para a comunicação entre os agentes.

Uma questão também tratada por Genesereth e Ketchpel foi a preocupação com os programas já existentes. Sendo assim, eles proporam três abordagens para o que denominaram agentificação:

Uma vez que a arquitetura tem definida sua plataforma de comunicação, torna-se importante entender como os agentes estão organizados. Existem duas abordagens diferentes: comunicação direta e coordenação assistida. Na comunicação direta, a coordenação é gerenciada pelo próprio agente. Na coordenação assistida, o agente delega a atividade de coordenação à programas especiais.

A principal vantagem da comunicação direta está na não dependência de outros programas. Duas arquiteturas conhecidas que implementam a comunicação direta são as redes de contrato (contract net) e compartilhamento de especificação (specification sharing). Nas redes de contrato, um agente solicita que outros agentes submetam suas propostas, os quais declaram-se para a realização de certa atividade. O agente recebe e analisa as declarações recebidas e estabelece um contrato com agente mais promissor. O compartilhamento de especificação usa a abordagem inversa, onde os agentes divulgam seus interesses e capacidades para os demais agentes. Neste caso, o número de mensagens trocadas é menor que nas redes de contrato, pois não há necessidade de haver sempre uma negociação.

O maior problema destas abordagens é a quantidade de tráfego gerado, uma vez que são soluções baseadas na difusão de mensagens. A complexidade do processo de negociação também é repassada aos agentes. Sendo assim, é proposta uma solução baseada em comunicação indireta denominada sistema federado.

No sistema federado, a interação dos agentes é assistida por um programa especial denominado facilitador, o qual oferece um conjunto de serviços de coordenação. A figura 6 apresenta uma arquitetura baseada em um sistema federado.
 


Fig. 6 – Federação de agentes.


 


Nesta proposta, os agentes utilizam uma estrutura semelhante ao compartilhamento de especificação, mas apenas com seu facilitador. O facilitador atua então como um mediador, roteando mensagens (solicitações e respostas) de acordo com seu conhecimento interno.

A principal característica dos facilitadores que o diferenciam de simples roteadores de mensagens (brokers) está associada à sofisticação de processamento. Um facilitador pode utilizar a documentação das necessidades e capacidades de um agente expressada através da ACL para melhorar o processo do roteamento de mensagens.