Você está na página 1de 75

UNIVERSIDADE DA AMAZÔNIA

CENTRO DE CIÊNCIAS EXATAS E TECNOLOGIA

AGENTES INTELIGENTES – CONCEITOS,


CARACTERÍSTICAS E APLICAÇÕES

BRUNO TRAVASSOS DA ROSA BRAGA


JOSÉ LEONARDO AYRES PEREIRA

Belém - Pa
2001
“Exalta a sabedoria, e ela te
exaltará, e abraçando-a tu, ela te
honrará”.

Provérbios 4:8
AGRADECIMENTOS

Gostaria de agradecer a minha família,


principalmente a minha mãe, por sempre me
ajudar quando eu preciso. Aos meus amigos
Anamélia Contente de Souza e José Leonardo
Ayres Pereira que fizeram deste trabalho um
trabalho inesquecível.

BRUNO TRAVASSOS DA ROSA BRAGA


Devo agradecer acima de tudo a Deus, que é
por sua vontade que as coisas acontecem. À
minha família por sua compreensão, à Mestra e
amiga Anamélia Contente de Souza por seu
apoio, ao meu companheiro de trabalho, Bruno
Travassos por sua dedicação e ao meu
orientador, Cláudio Alex Rocha por sua
paciência, entrega e crença em nossa
capacidade de vitória.

JOSÉ LEONARDO AYRES PEREIRA


RESUMO

O trabalho apresenta a tecnologia de agentes de forma clara e objetiva, não


tendo como meta abordar por completo o tema “agentes inteligentes”, e sim apenas
desmistificar a visão que sugere que agentes inteligentes é uma tecnologia distante da atual
realidade.

Todo conteúdo é apresentado de forma a oferecer uma compreensão


progressiva do assunto procurando oferecer um claro entendimento do mesmo.

A tecnologia de agentes é estudada por vários profissionais da área de


computação e é uma tecnologia presente nos dias atuais e que no futuro deverá estar
constantemente em evidência.

Serão abordados tópicos que foram considerados importantes no estudo de


agentes inteligentes e ao final do trabalho é apresentado um exemplo básico de agente que
pode ser utilizados no dia-dia e permite futuros incrementos e adições.

i
UNIVERSIDADE DA AMAZÔNIA
CENTRO DE CIÊNCIAS EXATAS E TECNOLOGIA

AGENTES INTELIGENTES – CONCEITOS,


CARACTERÍSTICAS E APLICAÇÕES

BRUNO TRAVASSOS DA ROSA BRAGA


JOSÉ LEONARDO AYRES PEREIRA

AVALIADORES

__________________________________

__________________________________

__________________________________

NOTA: ____________________________

DATA: ____________________________
UNIVERSIDADE DA AMAZÔNIA

CENTRO DE CIÊNCIAS EXATAS E TECNOLOGIA

AGENTES INTELIGENTES – CONCEITOS,


CARACTERÍSTICAS E APLICAÇÕES

Trabalho de Conclusão de Curso


apresentado à Universidade da
Amazônia, para obtenção do grau em
Tecnólogo em Processamento de Dados,
sob a orientação do Professor Cláudio
Alex Rocha.

BRUNO TRAVASSOS DA ROSA BRAGA


JOSÉ LEONARDO AYRES PEREIRA

Belém - Pa
2001
SUMÁRIO

CAPÍTULO 1 – INTRODUÇÃO..........................................................................1

CAPÍTULO 2 – VISÃO GERAL DE AGENTES ....................................................4

2.1. HISTÓRICO .............................................................................................4

2.2. DEFINIÇÃO DE AGENTES INTELIGENTES .................................................5

2.2.1. DEFINIÇÃO DO TERMO “AGENTE” .......................................................5

2.2.2. DENIFIÇÃO DO(S) TERMO(S) “INTELIGENTE/INTELIGÊNCIA .................7

2.2.3. DEFINIÇÃO DE AGENTE INTELIGENTE .................................................9

2.3. CARACTERÍSTICAS DE AGENTES INTELIGENTES .....................................11

2.3.1 CARACTERÍSTICAS GERAIS DE AGENTES ...............................................11

2.3.2. CARACTERÍSTICAS ESPECÍFICAS DE AGENTES INTELIGENTES ...............12

2.4. CLASSIFICAÇÃO DE AGENTES INTELIGENTES .........................................14

2.4.1. QUANTO AO NÍVEL DE INTELIGÊNCIA ..................................................15

2.4.2. QUANTO À TAREFA QUE EXECUTAM ....................................................15

2.4.3. QUANTO À MOBILIDADE ......................................................................16

2.4.4. QUANTO À AQUISIÇÃO DE INTELIGÊNCIA.............................................16

2.4.5. QUANTO A ÊNFASE DADA A ALGUNS ATRIBUTOS PRIMÁRIOS ...............17

2.4.6. CLASSIFICAÇÃO GERAL DOS AGENTES .................................................18

2.5. ÁREAS DE APLICAÇÃO ............................................................................20

CAPÍTULO 3 – AGENTES INTELIGENTES ........................................................23

3.1.ARQUITETURA DE AGENTES ....................................................................23

3.1.1. ARQUITETURA BÁSICA ........................................................................23


3.2. CARACTERÍSTICAS QUE TORNAM UMA APLICAÇÃO APROPRIADA PARA

AGENTES. ......................................................................................................24

3.3. INTELIGÊNCIA ARTIFICIAL DISTRIBUÍDA (IAD) .....................................26

3.3.1. RESOLUÇÃO DISTRIBUÍDA DE PROBLEMAS ..........................................27

3.3.2. SISTEMAS MULTI-AGENTES ................................................................28

3.4. LINGUAGENS DE AGENTES .....................................................................29

3.4.1. LINGUAGENS DE COMUNICAÇÃO DE AGENTES .....................................29

3.4.2. LINGUAGENS DE PROGRAMAÇÃO DE AGENTES ....................................31

3.5. AGENTES X OBJETOS ..............................................................................33

3.6. AGENTES E INTERNET.............................................................................34

3.6.1. PROBLEMAS RELATIVOS À DEMANDA DE INFORMAÇÃO .......................35

3.6.2. INSTRUMENTOS DE BUSCA E AGENTES INTELIGENTES ..........................36

CAPÍTULO 4 – EXEMPLO DE AGENTE – AGENTE FLASH ................................39

4.1. APRESENTAÇÃO .....................................................................................39

4.2. MODELAGEM..........................................................................................40

4.3. FUNCIONAMENTO ...................................................................................42

CAPÍTULO 5 – CONCLUSÃO ...........................................................................46

CAPÍTULO 6 – REFERÊNCIAS BIBLIOGRÁFICAS .............................................48


LISTA DE FIGURAS

2.1. INTERAÇÃO DE AGENTES COM O AMBIENTE ATRAVÉS DE SENSORES

E REAGENTES .................................................................................................10

2.2. CLASSIFICAÇÃO DE AGENTES QUANTO A ÊNFASE DADA A ALGUNS

ATRIBUTOS PRIMÁRIOS ..................................................................................17

2.3. TOPOLOGIA DE AGENTES .......................................................................18

3.1. ARQUITETURA BÁSICA DE UM AGENTE AUTÔNOMO BASEADA

EM COMPUTADOR..........................................................................................23

3.2. ORIGEM DA INTELIGÊNCIA ARTIFICIAL DISTRIBUÍDA.............................26

4.1. INTERFACE DIAL-UP ..............................................................................43

4.2. TELA INICIAL DO AGENTE FLASH ........................................................44

4.3. LISTA DE SITES FORNECIDA PELO USUÁRIO.............................................44


CAPÍTULO 1

INTRODUÇÃO

É indiscutível que na atual realidade em que vivemos, as mudanças

tecnológicas ocorrem em uma velocidade visivelmente maior do que a velocidade com a qual

conseguimos absorver as mesmas.

No meio de tantas informações e novidades, surgiu na última década algo

que revolucionou, sem sombra de dúvida, a vida de toda a humanidade: a Internet. A Internet

veio para mudar a maneira de viver de cada cidadão que tenha acesso a ela, quebrar fronteiras,

sugerir novos conceitos, novas maneiras de comércio, de comunicação e acima de tudo,

acesso livre e quase ilimitado à informação.

No meio do “boom” da Internet, surgiram muitas outras tecnologias,

propostas de padrões e soluções fantásticas sugerindo possibilidades infinitas para a sua

utilização. E nesse emaranhado de tecnologias e necessidades que surgiram nesse novo

mundo, surge uma tecnologia com ares de ficção científica, os “Agentes Inteligentes”.

O termo “Agente Inteligente” provém da inteligência artificial. Diferente do

que possamos pensar, a tecnologia de Agentes não está tão distante de nossa realidade. A

Internet é um campo vasto onde os agentes se proliferam e nos ajudam nas mais diversas

tarefas, sendo que como meros usuários, às vezes não tomamos conhecimento disso.
A tecnologia de agentes vem mudar radicalmente o modo como o usuário

utiliza seu computador, permitindo, por exemplo, que o software seja um assistente ao

usuário. Esta tecnologia deverá aproximar ainda mais o usuário do seu computador.

Essa tecnologia é, atualmente, uma das áreas de pesquisas que representa

um grande interesse em desenvolvimento de novas aplicações. Ela expõe ao usuário

facilidades que são baseadas, como foi dito acima, em conceitos de inteligência artificial.

O trabalho está organizado como se segue. No segundo capítulo será apresentado um

breve histórico sobre agentes e em seguida serão apresentados conceitos fundamentais para a

compreensão de todo o estudo que será feito. Ainda no segundo capítulo veremos as

classificações adotadas para agentes inteligentes assim como as características de agentes e

agentes inteligentes. Ao final do capítulo são apresentadas algumas áreas nas quais os agentes

são aplicados.

O terceiro capítulo é sobre agentes inteligentes, e é neste capítulo em que

são apresentadas os estudos que fundamentam a tecnologia de agentes. Também serão visto

neste capítulo as Linguagens que são utilizadas para desenvolvimento de agentes, linguagens

essas divididas em: Linguagens de Comunicação de Agentes e Linguagens de Programação

de Agentes. O terceiro capítulo também apresentada de forma simples, a Inteligência

Artificial Distribuída (IAD) e suas técnicas, assim como um comparativo entre Agentes e

Objetos e um breve descritivo do uso de Agentes na Internet.


O exemplo de agente será visto no quarto capítulo, que dedica-se a

explanação completa do agente, assim como o processo de modelagem e o funcionamento do

mesmo.
CAPÍTULO 2

VISÃO GERAL DE AGENTES

2.1.HISTÓRICO

Durante os anos 80, a comunidade de Inteligência Artificial, começou a


explorar novas áreas onde sistemas de IA pudessem ter um domínio mais dinâmico.
Ao invés de olhar para resultados simulados, simbólicos em mundos artificiais,
começaram a explorar as possibilidades de interações complexas com o mundo
físico, através de um mecanismo denominado agentes.

Vários pesquisadores como Marvin Minsk, Oliver Selfridge, Alan Kay,

Nicholas Negroponte, Rodney Brooks e Pattie Maes, passaram a estudar problemas que

pudessem demonstrar algum tipo de comportamento dos agentes.

Ao mesmo tempo, uma outra comunidade estava se formando usando

também o termo agente. Era a comunidade de agentes de software, que estava explorando o

desenvolvimento de partes de código menores e mais confiáveis.

Entretanto, uma barreira surgiu para a comunidade científica, muitos termos

estavam sendo usados para descrever agentes, como: intelligent agents, intelligent interfaces,

adaptive interfaces, knowbots, softbots, userbots, taskbots, personal agents e network agents,

dentre outros. Sendo que cada termo utilizado referenciava o papel exercido pelo agente.
2.2.DEFINIÇÃO DE AGENTES INTELIGENTES

O termo agente é utilizado em muitas áreas da Ciência da Computação, mas

especialmente na área de Inteligência Artificial. Nos últimos anos, o termo tornou-se muito

popular e tem sido usado de diversas maneiras.

Para tornar mais clara toda a abordagem que será feita em torno dos Agentes

Inteligentes, neste trabalho, será examinada a definição das palavras “Agente” e

“Inteligente/Inteligência” isoladamente e logo após apresentaremos um conceito formal sobre

agentes inteligentes.

2.2.1.Definição do termo “Agente”

Será examinada inicialmente palavra “agente”. Esta é uma palavra que

sugere várias definições diferentes, mas será utilizada a definição mais aplicável para o

contexto segundo o Novo Dicionário da Língua Portuguesa (HOLANDA FERREIRA, 1975):

Agente: aquele que trata de negócio por conta alheia.

Um agente é algo ou alguém que age em seu benefício, com sua permissão.

Considerando esta definição, cada um de nós já usou algum tipo de agente em nossas vidas.

Se você um dia resolveu comprar uma casa, provavelmente contratou um corretor para cuidar

da procura para você. Se você pretende fazer uma viagem ou excursão, um agente de viagens

pode resolver e preparar tudo para você. Até mesmo o contador que prepara o seu imposto de

renda é seu agente.


É visível que os agentes executam as mais variadas tarefas, mas como

poderíamos transportar esta realidade dos agentes para o software? Quais são as qualidades

pertinentes aos agentes de software e como poderíamos compará-los aos agentes humanos? Se

você olhar os exemplos de agentes humanos anteriormente citados, assim como a definição de

agente segundo o Novo Dicionário da Língua Portuguesa (HOLANDA FERREIRA, 1975),

pode-se chegar a alguns pontos em comum (PALLMANN, 1999):

• Os agentes agem em seu lugar: Agentes podem ser personalizados:

se o software não está fazendo algo por/para você, ele não pode ser

chamado de Agente. Imagine, por exemplo, se um procurador seu

muda um contrato que beneficiará somente a outra parte; você é o

cliente e a sua vontade e seus interesses devem ser superiores a

qualquer outro. Da mesma maneira o agente de software trabalha pra

você e “defende” os seus interesses;

• Os agentes agem com sua permissão: Os agentes executam

somente as funções/tarefas autorizadas pelos seus clientes. Imagino

que você não ficaria nada feliz se o seu corretor na bolsa resolvesse

vender todas as suas ações sem sua permissão, e em conseqüência

disso você tivesse um enorme prejuízo. Entretanto, se você

orientasse o seu corretor para só vender algumas ações e em um

determinado momento, ele só venderia as ações que ele é autorizado

a vender e no momento específico;

• Os agentes são especializados em uma área em particular: Os

agentes são cuidadosos e se preocupam em não ultrapassar os limites

de seu conhecimento ou área de atuação. Considerando mais um


exemplo de agentes humanos. Imagine se você pedisse para o seu

agente de viagem fazer o seu imposto de renda ou até mesmo um

balancete de sua empresa, absurdo não? Os agentes são

especializados, atuam nas áreas para as quais eles foram preparados.

De forma simples; um agente de software representa você e seus interesses.

Agentes fazem somente as coisas que você diz que tem que fazer; como usuários devemos

evitar utilizar agentes em tarefas para as quais eles não foram preparados.

2.2.2.Definição do(s) termo(s) “Inteligente/Inteligência”

Já que, de forma resumida, sabe-se o que é um Agente, serão examinadas as

definições das palavras “Inteligente/Inteligência” dentro de nosso contexto segundo o Novo

Dicionário da Língua Portuguesa (HOLANDA FERREIRA, 1975):

Inteligência: faculdade de aprender, apreender ou compreender; percepção,

apreensão, intelecto, intelectualidade.

Inteligente: que tem ou revela inteligência.

Uma pessoa que toma boas decisões ou faz boas escolhas é considerada

inteligente. A partir disso, nós podemos assumir que os agentes inteligentes devem ser bons

no que fazem. Consideremos como exemplo um agente de viagens. Antes de mais nada, o seu

agente precisa saber onde você quer ir e quais são suas preferências. O seu agente tem que

saber quais são as opções disponíveis de roteiro assim como as opções não disponíveis. E

finalmente o seu agente tem que vislumbrar a melhor escolha de roteiro considerando todo o
perfil que você forneceu a ele; isto indiscutivelmente requer um balanço cuidadoso de todos

os prós e contras da situação.

Se pensarmos nisso vê-se que sempre esperamos o máximo de competência

de qualquer profissional que se propõem a fazer um trabalho. Com agentes, humanos ou não,

a nossa expectativa em torno da competência deles é a mesma. Afinal, os agentes nos

representam em nossa ausência e tomam atitudes que nos afetam, no mínimo esperamos que

eles sejam os melhores no que fazem.

Quando definimos a palavra “agente” há alguns momentos, nós

comentamos a respeito da especialização, que surge como um dos pontos da competência. O

fato de usarmos a palavra “inteligente” só reforça esta idéia. Os agentes devem ser bons no

que fazem ou então ninguém fará uso deles. Tenhamos em mente que um agente de software

mal concebido/desenvolvido pode tornar a vida de uma pessoa que depende dele bem

complicada.
2.2.3.DEFINIÇÃO DE AGENTE INTELIGENTE

“Um agente é um software que sabe fazer coisas que provavelmente você

faria você mesmo se tivesse tempo.”

Ted Selker.

Centro de pesquisas da IBM em Almaden (SILVA e MENESES, 2001)

A definição de agentes é um assunto sobre o qual não existe um consenso

único. Contudo, concorda-se que a “autonomia” é seu ponto principal (SILVA e MENESES,

2001). Considerando este ponto, devemos atentar para o fato de que certas características, que

é o que determina o tipo de ação do agente, aplicam-se em diferentes contextos de atuação.

De forma mais clara; existem situações, por exemplo, em que a capacidade de aprendizado do

agente é muito importante e em outras não, às vezes é até indesejável.

Embora não exista uma definição genérica formada para agentes, esta se faz

necessária para que o termo não acabe por perder seu significado. WOOLDRIDGE (1999)

define agente como: “Um agente é um sistema de computador que está situado em algum

ambiente e que é capaz de executar ações autônomas de forma flexível neste ambiente, a fim

de satisfazer seus objetivos de projeto”. Existem três conceitos nesta definição: ambiente,

autonomia e flexibilidade.

Estar situado em um ambiente corresponde a capacidade do agente de

receber entrada através de sensores do ambiente e executar ações que alterem o mesmo de

alguma maneira através de reagentes. (Figura. 2.1)


Figura. 2.1 - Interação de Agentes com o ambiente através de sensores e reagentes

(RUSSEL e NOVIG, 1995)

Autonomia, aqui, significa dizer que o sistema pode executar tarefas sem o

intermédio do usuário e que possui o controle de suas ações e de seu estado interno.

A “flexibilidade” das ações é o que distingue um agente de um programa de

controle de processos. Segundo JENNINGS (1998), flexibilidade significa que o sistema é:

• Reativo: agentes devem perceber seu ambiente e responder

oportunamente às mudanças que ocorrem nele;

• Pró-ativo: agentes não devem simplesmente atuar em resposta ao

ambiente, devem exibir um comportamento oportunista e

direcionado ao seu objetivo e tomar a iniciativa quando apropriado;

• Social: agentes devem interagir, quando apropriado, com outros

agentes artificiais ou humanos para completar suas próprias soluções

de problemas ou ajudar outros com suas atividades.

Segundo WOOLDRIDGE (1999) as três características citadas, reativo, pró-

ativo e social, são suficientes para classificar um agente como inteligente.

2.3.CARACTERÍSTICAS DE AGENTES INTELIGENTES


Como foi citado anteriormente, segundo WOOLDRIDGE (1999),

reatividade, pró-atividade e sociabilidade são características suficientes para que um agente

seja considerado inteligente.

Apesar disto, Agentes e Agentes Inteligentes possuem características

independentes. Para tornar mais clara essa “separação”, as características serão apresentadas

em dois tópicos: Características Gerais de Agentes, que aborda as características comuns aos

Agentes e Agentes Inteligentes; e Características Específicas de Agentes Inteligentes, que

como o próprio título diz, aborda as caracteríticas presentes somente nos Agentes Inteligentes.

2.3.1.Características Gerais de Agentes

Alguns atributos que caracterizam os agentes de forma geral, são

(WOOLDRIDGE e JENNINGS, 1995):

• Autonomia: atuam sem a necessidade de interferência do usuário e

possuem algum tipo de controle sobre suas ações e seu estado

interno;

• Habilidade Social: interagem com outros agentes e em alguns casos

com seres humanos por algum tipo de linguagem de comunicação;

• Reatividade: percebem seu ambiente (que pode ser o mundo físico,

um usuário através de uma interface gráfica, outros agentes, a

Internet ou talvez tudo isto combinado) e respondem às mudanças

ocorridas. Em alguns casos o agente fica em stand-by e só é ativado

se algum evento específico ocorrer no ambiente;


• Pró-Atividade: não agem simplesmente em resposta ao seu

ambiente, eles são capazes de atingir suas metas tomando iniciativas

para o cumprimento das mesmas;

• Continuidade Temporal: executam continuamente processos que

tanto podem estar ativos, em foreground, quanto adormecidos, em

background;

• Orientação a Objetivos: deve ser capaz de lidar com tarefas

complexas em alto nível. A decisão de como uma tarefa é melhor

subdividida em tarefas menores, e em qual ordem e de que modo

devem ser executadas, deve ser feita pelo próprio agente.

2.3.2.Características Específicas de Agentes Inteligentes

Atualmente os "Agentes Inteligentes" são pesquisados em vários campos,

como: Psicologia, Sociologia e Ciência da Computação. Alguns pesquisadores, que trabalham

no campo da Inteligência Artificial, consideram que o termo agente possui um significado

muito mais amplo do que o significado citado anteriormente. Geralmente os pesquisadore

querem que um agente seja um sistema de computador que, além de ter as características

identificadas anteriormente, sejam implementados usando conceitos que são mais bem

aplicáveis aos humanos. Os agentes que se enquadram nesse grupo têm uma ou mais das

seguintes características (GIESE, 1998):

• Adaptabilidade: um agente deve ser capaz de ajustar-se aos hábitos,

métodos de trabalho e preferências de seus usuários;

• Autonomia: é a capacidade do agente operar separadamente e

decidir o que fazer enquanto opera separadamente;


• Benevolência: é a suposição de que os agentes não têm objetivos

contraditórios e que todo agente consequentemente sempre tentará

fazer o que lhe é solicitado;

• Colaboração: um agente não deve aceitar (e executar) instruções

sem considerações, ele deve levar em conta que o usuário humano

comete erros, omite informações importantes e/ou fornece

informações ambíguas. Neste caso, um agente deve checar estas

ocorrências fazendo perguntas ao usuário. Deve ser permitido a um

agente recusar executar certas tarefas que possam sobrecarregar a

rede ou causar danos a outros usuários;

• Comunicabilidade: também chamado de habilidade social. Um

agente deve ser capaz de se comunicar com outros agentes, usuários,

objetos e seu ambiente;

• Degradação Gradual: é a capacidade do agente executar parte de

uma tarefa quando existe incompatibilidade na comunicação ou

domínio. No contexto das noções de risco, agentes trabalham melhor

quando apresentam esta característica;

• Flexibilidade: um agente deve ser capaz de fazer uma escolha

dinâmica das ações e da seqüência de execução das mesmas, em um

determinado estado do ambiente;

• Inteligência: é o conjunto de recursos, atributos e características que

habilitam o agente a decidir que ações executar, bem como a

capacidade de tratar ambigüidades. O raciocínio desenvolve-se

através de regras, conhecimento e evolução artificial;

• Mobilidade: é a habilidade de um agente se mover pela rede;


• Planejamento: é a habilidade de sintetizar e escolher entre

diferentes opções de ações desejadas para atingir os objetivos;

• Pró-Atividade: um agente deve exibir oportunismo e

comportamento direcionado a objetivos;

• Reatividade: um agente deve perceber o ambiente e responder às

modificações que ocorrerem nele;

• Representabilidade: um agente deve representar o usuário em suas

ações.

2.4.CLASSIFICAÇÃO DE AGENTES INTELIGENTES

Apesar de toda a polêmica que ronda o desenvolvimento de agentes, o

estudo quanto a sua usabilidade e aplicabilidade continua, e deste estudo surgiram

classificações que nos permitem visualizá-los de uma forma mais ampla. Essas classificações

são, por exemplo: quanto ao nível de inteligência, quando à tarefa que executam, quando à

mobilidade, quanto à aquisição de inteligência, e quanto à ênfase dada a alguns atributos

primários.

2.4.1.Quanto ao Nível de Inteligência

Conforme SOUZA (1996), as aplicações com agentes apresentam diferentes

níveis de inteligência, podendo ser classificados nos seguintes níveis:

• Baixo - neste nível, os softwares agentes desempenham tarefas

rotineiras, disparadas por eventos externos. Estes agentes executam

redes de regras complexas, não se adaptam a mudanças e não

demonstram oportunismo com o passar do tempo;


• Médio - estes agentes utilizam uma base de conhecimento para

desenvolver raciocínio em eventos monitorados. Podem adaptar-se a

mudanças de condições na base de conhecimento e manipular as

novas condições, porém, normalmente não demonstram

oportunismo;

• Alto - neste nível de inteligência, os software de agentes utilizam

tanto aprendizado quanto raciocínio na base de conhecimento.

Aprendem com o comportamento do usuário, podem adaptar-se à

mudanças e demonstram oportunismo com o passar do tempo.

2.4.2.Quanto à Tarefa que Executam

De acordo com JENNINGS (1995), os agentes podem ser classificados

quanto à tarefa que executam, da seguinte forma:

• Gopher - são agentes que executam tarefas mais simples, baseando-

se em suposições e regras pré-especificadas. Por exemplo, o agente

pode avisar o usuário que ele possui uma reunião marcada para

sexta-feira as 14:00 hs;

• Prestadores de Serviço - são agentes que executam tarefas de alto

nível, bem definidas, quando requisitadas pelo usuário. Estes agentes

podem organizar uma reunião (negociar datas e horários da reunião

com os participantes);

• Pró-Ativo - são agentes que desempenham as tarefas mais

complexas, eles podem pesquisar informações, filtrar dados ou até

mesmo executar tarefas para o usuário sem que o mesmo as


requisite, sempre que isto for julgado apropriado. Por exemplo, um

agente pode monitorar novos grupos sobre a Internet e retornar

discussões que ele acredita serem de interesse do usuário.

2.4.3.Quanto à Mobilidade

De acordo com NWANA (1996), os agentes podem ser classificados de

acordo com sua capacidade de se mover na rede em:

• Agentes Estáticos - são agentes que não podem se mover pela rede,

ou seja, atuam localmente.

• Agentes móveis - são agentes que possuem a habilidade de se mover

pela rede.

2.4.4.Quanto à Aquisição de Inteligência

Dentro da classificação de agentes quanto à aquisição de inteligência,

existem duas categorias, segundo NWANA (1996) eles podem ser deliberativos e reativos.

Agentes deliberativos são aqueles que possuem um modelo de raciocínio e

um modelo simbólico e interno, utilizado para tomar decisões e executar tarefas necessárias

para alcançar seus objetivos. Estes agentes também são chamados de simbólicos ou

cognitivos.

Agentes reativos, diferentemente dos deliberativos, executam apenas

quando estimulados, em resposta ao estado atual do ambiente no qual estão inseridos. Eles

não possuem um modelo simbólico e interno dos mesmos. Eles também são denominados

reflexivos.
2.4.5.QUANTO A ÊNFASE DADA A ALGUNS ATRIBUTOS PRIMÁRIOS

De acordo com NWANA (1996), os agentes podem ser classificados

levando em conta a ênfase dada para alguns atributos primários e considerados ideais

(cooperação, aprendizado, e autonomia) em: agentes inteligentes, agentes de aprendizado

colaborativo, agentes de interface e agentes colaborativos. (Figura. 2.2).

Agentes Inteligentes Agentes de Aprendizado


Colaborativo

Cooperação Aprendizagem

Autonomia

Agentes Colaborativos Agentes de Interface

Figura. 2.2 - Classificação de Agentes quanto a ênfase dada a alguns atributos primários (NWANA, 1996).

NWANA (1996), reforça a idéia de que estas diferenças não são definitivas.

Por exemplo, os agentes deliberativos, possuem mais ênfase sobre as propriedades de

cooperação e autonomia do que sobre aprendizado, isto não quer dizer que os agentes

deliberativos nunca aprendem.

2.4.6.Classificação Geral dos Agentes

Conforme NWANA (1996), baseando-se nas classes de agentes

apresentadas anteriormente podem ser identificados vários tipos de agentes. (Figura. 2.3).
Agente

Agentes Agentes
Colaborativos Autônomo

Sistemas
Agentes de de Agentes
Interface Heterogêneos

Agentes Agentes
Móveis Híbridos

Agentes de Agentes
Informações Reativos

Figura. 2.3 - Topologia de Agentes (NWANA, 1996).

Os agentes podem ser classificados em:

• Colaborativos: Focalizam autonomia e cooperação (com outros

agentes) para executar suas próprias tarefas. Eles podem aprender,

mas não é dado muita ênfase a esta característica em suas operações.

Geralmente agentes colaborativos podem negociar para alcançar um

consenso sobre alguma questão.

• De Interface: Enfatizam autonomia e aprendizado para executar

suas tarefas. Agentes de interface são agentes que interagem com o

usuário, recebendo especificações do usuário e entregando

resultados.

• Móveis: Agentes móveis são programas escritos tipicamente em

uma linguagem script, o qual pode ser despachado remotamente de

um computador cliente e transportado para um computador servidor

para a sua execução.

• De Informação: Agentes de informações são agentes que acessam

uma, e potencialmente muitas fontes de informações, e são capazes


de colecionar e manipular informações obtidas destas fontes para

responder consultas solicitadas pelo usuário ou outros agentes.

• Reativos: São agentes que executam tarefas quando estas são

solicitadas pelo usuário, ou seja possuem determinado

comportamento quando estimulados.

• Híbridos: Agentes híbridos são os agentes que combinam a filosofia

de um ou mais tipos de agentes.

• Sistemas Heterogêneos: Sistemas de Agentes Heterogêneos,

referem-se a um conjunto de dois ou mais agentes, os quais

pertencem a duas ou mais classes de agentes diferentes. Um sistema

de agente heterogêneo pode também conter um ou mais agentes

híbridos. Sistemas de Agentes Heterogêneos também são entendidos

como sistemas multi-agentes.

• Autônomos: Agentes autônomos são agentes que podem interagir

independente e efetivamente com seus ambientes. Não precisam

necessariamente do usuário.

2.5.ÁREAS DE APLICAÇÃO

O crescimento do estudo em torno dos Agentes fez com que a indústria de

software despertasse para as mais variadas possibilidades de aplicações para os mesmos.

Abaixo são listadas as aplicações onde os Agentes de software fazem-se mais presentes, e

exemplos de ferramentas utilizadas nestes domínios:


• Comércio Eletrônico: O BargainFinder é um agente que compara

lojas virtuais na Internet para encontrar o melhor preço para um

determinado CD. Neste sistema, o usuário informa ao agente os

dados referentes ao CD que gostaria de comprar, baseado nestas

informações o agente realiza uma procura nas lojas virtuais

existentes, comparando o preço para obter o CD mais barato

(NISSEN, 1995).

• Indústria: CIDIM (Sistema de Gerenciamento Distribuído de

Eletricidade) - é responsável pelo gerenciamento de energia, o qual é

um processo de monitoração e controle do ciclo de geração,

transporte e distribuição de energia elétrica para consumidores

industriais e doméstico. Para minimizar as perdas durante o

transporte de energia, a voltagem é alta (132 kV ou mais), antes de

ser colocada em uma rede de transporte. Finalmente, a voltagem é

diminuída e a eletricidade é enviada aos consumidores usando uma

rede de distribuição. Este sistema é composto pelos seguintes

agentes: Identificador da área de blackout, Interface do Sistema de

Controle pré-existente, Supervisor de Breakers e Relés, Sistema

Especialista Agente para Análise de Alarmes não Cronológicos

Existentes, Agente de Restauração de Serviço e Agente de Interface

do Usuário (JENNINGS, 1995).

• Internet: NewT - é um filtro de notícias da USENET. Um agente

NewT é treinado fornecendo a ele uma série de exemplos, artigos

ilustrativos que o usuário escolheria ou não para ler. O agente

começa a oferecer sugestões para o usuário, e é dado um feedback


sobre suas sugestões. O agente NewT não pretende remover a

escolha humana, mas representar uma extensão de seus desejos: o

objetivo é do agente ser capaz de trazer para o usuário artigos que

sejam de seu interesse (WOOLDRIDGE e JENNINGS, 1995).

• Redes de Comunicação: Uma comunidade aberta de diferentes

agentes que cooperam para solucionar uma variedade de problemas

em um sistemas de gerenciamento de redes de telecomunicações

complexo é descrita. As principais funções realizadas pelos agentes

são: estabelecimento e restauração de rotas em uma rede física e

satisfação das necessidades do cliente, e planejamento do

fornecimento e restauração do serviço.

As características mais notáveis deste processo são: é distribuído e

sujeito a falhas, suporta a possibilidade de melhorar a performance

sobre o sistema centralizado e o escopo de redução da quantidade

total de dados passados para um ponto central, e a flexibilidade de

permitir ao sistema distribuído uma degradação mais suave

(BUSUIOC e GRIFFITHS, 1994).

• Simulação: HOMER - é um agente desenvolvido com o objetivo de

simular um robô submarino, o qual existe em “mundo marítimo” de

duas dimensões, sobre o qual ele possui somente conhecimento

parcial. Ele executa instruções do usuário limitadas a um

subconjunto de palavras em inglês com aproximadamente 800

palavras. Instruções podem conter referências temporais sofisticadas

moderadamente. Este agente possui uma memória episódica


limitada, e utiliza isto para ser apto para responder questões sobre

suas experiências passadas (WOOLDRIDGE e JENNINGS, 1995).


CAPÍTULO 3

AGENTES INTELIGENTES

3.1.ARQUITETURA DE AGENTES

Segundo WOOLDRIDGE e JENNINGS (1995) a arquitetura de agentes

envolve técnicas e algorítmos utilizados por uma metodologia específica para a construção de

agentes. Isto determina a forma como os agentes devem ser decompostos para a construção de

um conjunto de módulos-componentes e como estes módulos podem interagir entre si. O

conjunto total dos módulos e suas interações providenciam uma resposta para a questão de

como sensores de dados e o estado interno do agente determinam as ações e futuros estados

internos do agente.

3.1.1.Arquitetura Básica

Conforme DAVIDSSON (1992), todos os agentes autônomos baseados em

computador possuem mais ou menos a mesma arquitetura. (Figura. 3.1).

 
 

 
 -/.$021"3"46587:9
; .
"!$# %'&)(*#$+, <>='?
@"ACB"=$D'E F

   


Figura. 3.1 - Arquitetura básica de um Agente Autônomo Baseada em Computador (DAVIDSSON, 1992).
A seguir é apresentado uma breve descrição sobre cada uma das partes que

compõe a arquitetura do agente:

• Setas - as setas simbolizam o fluxo de dados.

• Sensores - os sensores recebem informações do ambiente e

providenciam dados para o mecanismo de inferência.

• Mecanismo de Inferência - o mecanismo de inferência é o cérebro

do agente inteligente. Quando notificado de algum evento, o

mecanismo de inferência opera sobre conjuntos de regras e execução

de raciocínio simbólico complexo para determinar como reagir ao

evento e qual ação executar.

• Base de Conhecimento - é o local onde o agente armazena seu

conhecimento.

• Atuadores - os atuadores são responsáveis pela execução das ações

do agente sobre o ambiente.

3.2.CARACTERÍSTICAS QUE TORNAM UMA APLICAÇÃO APROPRIADA PARA AGENTES.

Tomando como bases as características comuns dos agentes, pode-se identificar um


conjunto de características que tornam uma tarefa ou aplicação apropriada para ser abordada
com base na tecnologia de agentes. A seguir, as características especificadas por Andrew
Wood (WOOD, 1994):
• Adaptação: Tarefa que requer um certo grau de adaptabilidade; o

agente necessita desenvolver habilidades para executá-la aprendendo

melhores ou novos meios. O que também inclui métodos para evitar

falhas e se adaptar as necessidades, desejos e objetivos pessoais do

usuário.
• Pesquisa: A tarefa não é completamente definida, o agente deve

considerar uma grande quantidade de soluções, escolhendo a melhor

de acordo com sua experiência.

• Demonstração: A tarefa envolve aprendizado e treinamento. Isto

inclui ensinar os usuários a usar ferramentas de software de maneira

mais eficaz e também, por outro lado, fornecer explicações de que o

próprio agente está fazendo.

• Ajuda: A tarefa requer um certo grau de cooperação entre o usuário

e o agente. O agente poderia fazer críticas construtivas ao modo de

trabalhar do usuário, ou dar " dicas " sobre com o utilizar melhor os

recursos do sistema.

• Autonomia: A tarefa requer atenção constante ou regular, mas

pouca ou nenhuma entrada ou interação. Dessa forma, delegar esta

tarefa seria muito útil e benéfico. Um exemplo seria o

monitoramento de sistemas simples, onde uma mudança no

comportamento poderia gerar a execução automática de alguma

tarefa ou ação.

• Assincronia: A tarefa tem um intervalo significativo entre seu início

e término. Este intervalo poderia ser devido ao processamento de

grandes quantidades de informação ou mesmo a falta de informações

vitais para o processamento em um determinado momento.

3.3.INTELIGÊNCIA ARTIFICIAL DISTRIBUÍDA (IAD)


A Inteligência Artificial Distribuída (IAD), é o estudo e projeto de sistema

em que vários agentes interagem, distribuindo-se logicamente, ou algumas vezes,

espacialmente, onde podem ser de chamados autônomos e inteligentes (STONE e VELOSO,

1997).

Inteligência Artificial Distribuída, é a interseção da Computação

Distribuída 1 (CD) e da Inteligência Artificial 2 (IA). (Figura 3.2).

Computação Inteligência
IAD
Distribuída Artificial

Inteligência Artificial
Distribuída

Figura. 3.2 - Origem da Inteligência Artificial Distribuída (STONE e VELOSO, 1997).

De acordo com SOUZA (1996), Inteligência Artificial Distribuída

distingue-se do paradigma simbólico representante da Inteligência Artificial Tradicional nos

seguintes aspectos:

• Inteligência Artificial - Preocupa-se com a representação do

conhecimento e métodos de inferência, estando voltada para a

construção de um programa inteligente.

1
Computação Distribuída, consiste na possibilidade de utilizar mais de um processador para trabalhar sobre um
problema computacional (STONE e VELOSO, 1997).
2
Inteligência Artificial é o estudo de como fazer os computadores realizarem coisas que, no momento, as
pessoas fazem melhor (RICH e KNIGHT, 1993).
• Inteligência Artificial Distribuída - Preocupa-se com a interação e

o comportamento social, estando voltada para a construção de uma

sociedade de programas inteligentes.

Ainda de acordo com STONE e VELOSO (1997), Inteligência Artificial

Distribuída divide-se em duas áreas: Resolução Distribuída de Problemas (RDP), e Sistemas

Multi-Agentes (SMA).

3.3.1.Resolução Distribuída de Problemas

Os Sistemas de Resolução Distribuída de Problemas, conforme STONE e

VELOSO (1997), trabalham com o gerenciamento de informações. Este gerenciamento de

informações consiste em:

• decomposição de tarefas;

• síntese de solução.

Na decomposição de tarefas, uma tarefa complexa é dividida em diversas

sub-tarefas e enviadas para processadores diferentes. Já na síntese de solução, o resultado de

diferentes sub-tarefas são combinadas.


3.3.2.Sistema Multi-Agentes

Ainda conforme STONE e VELOSO (1997), uma vez que existe a

linguagem de comunicação (ou protocolo) e a capacidade de construir agentes está disponível,

a pergunta que surge é: Como os agentes devem ser organizados para conseguirem maior

interação entre si?

Duas abordagens diferentes tem sido exploradas:

• comunicação direta - os agentes mesmos cuidam da coordenação.

• coordenação auxiliada, na qual há programas especiais para

organizar a coordenação.

Apesar das duas abordagens serem interessantes, uma abordagem que

promova a união delas seria mais prática. Utiliza-se então a abordagem chamada de sistema

federado. É um sistema em que os agentes não se comunicam diretamente entre si, mas fazem

uso de um “intermediário”, uma espécie de supervisor, que se encarrega de se comunicar

entre os diversos supervisores e estes por sua vez, encarregam-se da comunicação entre seus

agentes.

O supervisor precisará suportar alguns requisitos básicos, permitindo que os

agentes possam: pedir informações de outros agentes, observar e saber das atividades de

outros agentes, interceptar e mudar os pedidos destinados a outros agentes e estabelecer

comunicação com agentes sob o controle de outros supervisores.

3.4. LINGUAGENS DE AGENTES


Para desenvolver agentes inteligentes são utilizados dois tipos de

linguagens: linguagens de comunicação de agentes e linguagens de programação de agentes

(GIESE, 1998).

3.4.1.Linguagem de Comunicação de Agentes

Conforme GENESERETH e KETCHPEL (1994), existem duas

aproximações populares para o projeto de uma linguagem de comunicação de agente:

• Aproximação Procedural - é baseada na idéia de que a

comunicação pode ser melhor modelada com trocas de diretivas

procedurais. Linguagens script (tal como TCL, Apple Events, e

Telescript) são baseadas nesta aproximação.

• Aproximação Declarativa - é baseada na idéia que a comunicação

pode ser melhor modelada com trocas de sentenças declarativas

(definições, suposições, e o gosto). A linguagem ACL é baseada

nesta aproximação.

Atualmente, existem várias linguagens propostas para realizar a

comunicação entre agentes. A seguir, são descritas algumas destas linguagens:

• Agent Talk: É uma linguagem de descrição de protocolos de

coordenação para sistemas multi-agentes. Na área de Inteligência

Artificial Distribuída, muitos protocolos de coordenação tais como

protocolo de redes de contrato tem sido propostos, e muitos


protocolos para aplicações específicas serão requeridos quanto mais

softwares de agentes forem construídos.

Permite protocolos de coordenação serem definidos

incrementalmente e serem facilmente personalizados para ajustar-se

ao domínio da aplicação incorporando um mecanismo de herança

(FININ, 1997).

• ACL: Agent Communication Language / Linguagem de

Comunicação do Agente - é uma linguagem baseada na aproximação

declarativa, onde baseia-se na idéia que a comunicação pode ser

modelada melhor com a troca de sentenças declarativas (definições,

suposições e gostos) (IBM, 1995).

ACL é composta de três partes, seu vocabulário (dicionário de

palavras apropriadas para áreas de aplicações comuns), uma

“linguagem interna” KIF e uma “linguagem externa” KQML. Uma

mensagem ACL é uma expressão KQML no qual os argumentos são

termos ou sentenças em KIF formadas de palavras do vocabulário

ACL (GENESERETH e KETCHPEL, 1994).

• KIF: Knowledge Interchange Format / Formato de Troca de

Conhecimento - é uma linguagem formal para troca de

conhecimento entre programas disparados. Possui uma semântica

declarativa, e compreendida logicamente, utilizada para representar

o conhecimento sobre a representação de conhecimento,

representação de regras de raciocínio não monotônicos e definição

de objetos, funções e relações. O propósito de KIF é proporcionar o


desenvolvimento independente de programas de manipulação de

conhecimento (FININ, 1997).

• KQML: Knowledge Query and Manipulation Language /

Linguagem de Manipulação e Consulta de Conhecimento - é uma

linguagem e protocolo para troca de informações e conhecimentos.

Pode ser utilizada por um programa para interagir com um sistema

inteligente ou para o compartilhamento de conhecimento por dois ou

mais sistemas inteligentes para resolução de problemas

cooperativamente.

KQML concentra-se a um conjunto extensivo de primitivas as quais

define as operações permitidas que os agentes podem realizar sobre

o conhecimento e objetivos de cada outro agente (FININ, 1997).

3.4.2.Linguagem de Programação de Agentes

Linguagem de Programação de Agentes é a linguagem com que é

desenvolvido um agente. Algumas das Linguagens de Programação de Agentes são

linguagens utilizadas para o desenvolvimento de aplicações comerciais. A seguir, são

relacionadas algumas linguagens de programação existentes:

• Java: É uma linguagem de programação similar em sintaxe ao C++,

mas similar em outros meios com Smalltalk e Objective C. O

sistema inclui um compilador de código de byte e uma máquina

virtual;
• LALO: É uma linguagem de programação orientada a agentes e um

ambiente para desenvolvimento de sistemas multi-agentes. Um

programa escrito em LALO é traduzido em código fonte C++, para

depois ser compilado, e utiliza KQML para comunicação entre

agentes (FININ, 1997);

• Obliq: É uma linguagem interpretada e orientada a objetos com

suporte para computação móvel, tal como agente móvel. Obliq

mantém seu escopo léxico, mesmo onde um programa é distribuído

através da rede (ITA, 1997);

• Phantom: É uma linguagem interpretada projetada para aplicações

distribuídas, interativas e em larga escala, tais como sistemas de

conferência distribuída, jogos em rede, e ferramentas de trabalho

colaborativo (FININ, 1997);

• Python: É uma linguagem script orientada a objetos no espírito do

ABC e Modula-3. É utilizado como um bit em uma linguagem

estendida/embutida em projetos hypermídia, e utilizado como um bit

para processamento de textos e roteiros administrativos que

freqüentemente utilizam Perl (FININ, 1997);

• Tcl/Tk: É um sistema de programação de fácil utilização. O Tcl é a

linguagem de programação básica, enquanto Tk é um conjunto de

objetos gráficos.

O sistema Tcl/Tk pode ser configurado para trabalhar

cooperativamente com outra linguagens tal como C ou C++.

Tcl suporta muitos dos fatores das linguagens procedurais

convencionais, incluindo atribuição de variáveis, chamadas de


procedures, estruturas de controle, e possui acesso fácil para objetos

gráficos (TCL, 1996);

• Telescript: É um software para construção de aplicações

distribuídas utilizando agentes móveis. É uma linguagem de

programação remota orientada a objetos o qual divide todos os

processos em agentes e locais, e permite comunicação entre

processos (NOSCHANG, 1996).

3.5.AGENTES X OBJETOS

Quem trabalha com orientação a objetos pode pensar por um momento que Agentes
são na verdade objetos pensantes. Na verdade existem algumas semelhanças e muitas
diferenças entre agentes e objetos. Objetos podem ser definidos como entidades de software
que encapsulam um estado, são habilidosos na execução de ações, ou métodos neste estado e
se comunicam através de mensagens. As semelhanças são muito claras: modularidade e
controle sobre seu estado interno (SILVA e MENESES, 2001).

As diferenças, no entanto, se mostram mais fortes do que se imagina,

conforme cita (WOOLDRIDGE, 1999):

• Agentes incorporam uma noção mais forte de autonomia que os

objetos, em particular, decidem por eles mesmos se executam ou não

uma ação a pedido de outro agente;

• Agentes são capazes de comportamento flexível (reatividade, pró-

atividade e sociabilidade) e o modelo padrão de orientação a objetos

não diz nada sobre este comportamento;


• Um sistema multi-agentes é inerentemente multi-thread , ou seja,

trabalha com vários processos, e cada thread (processo) é controlado

por pelo menos um agente.

POUCA GENTE SABE, MAS NADA IMPEDE QUE AGENTES SEJAM PROGRAMADOS

EM LINGUAGENS ORIENTADAS A OBJETOS. EXISTEM TEMPLATES E PACOTES PARA

PROGRAMAÇÃO DE AGENTES EM LINGUAGENS COMO JAVA (EX. JAT – JAVA AGENT

TEMPLATE1). OU SEJA, PODEMOS TIRAR PROVEITO DAS SEMELHANÇAS PARA EXPLICITAMENTE

PROGRAMAR AS CARACTERÍSTICAS DE AGENTES NÃO PREVISTAS NO MODELO DE ORIENTAÇÃO A

OBJETOS.

3.6.Agentes e Internet

É fato que a Internet, como foi citado anteriormente, foi uma das maiores

revoluções da humanidade. A Internet apresenta-se como um ambiente apropriado para a

utilização de agentes inteligentes. A Internet é um enorme “banco de dados” acessível

mundialmente, ela promove melhorias e facilidades jamais vistas. Porém, acompanhando as

várias melhorias e facilidades oferecidas pela Internet, surgiram junto, alguns problemas:

• A rede é lenta nas respostas às solicitações dos usuários e facilmente

congestionável pelo excesso de pedidos;

• Complexidade dos serviços oferecidos, exigindo conhecimento

especializado para sua utilização;

1
http://java.stanford.edu
• O usuário pode receber como respostas, endereços desatualizados ou

incompletos;

• Interrupção na transmissão;

• Dificuldade para usuários leigos operarem os diversos serviços de

informação oferecidos pela WWW;

• Obtenção de informações irrelevantes junto às solicitadas.

3.6.1.Problemas relativos à demanda de informação

A informação disponibilizada pela Internet é muito vasta e quanto solicitada

provavelmente estará disponível em algum ou em vários lugares distintos, mas

freqüentemente somente partes podem ser recuperadas, ou algumas vezes não se consegue

nada.

Em muitas situações, perde-se um tempo extraordinário tentando encontrar

estas informações e , em geral, os mecanismos de busca convencionais não parecem ser

capazes de sanar tais problemas. Estes métodos são baseados no princípio do que é conhecido

e qual informação está disponível e onde exatamente pode ser achada.

Para fazer isto possível, são utilizados sistemas de informação e banco de

dados providos com grande quantidade de índices para proporcionar ao usuário a informação

desejada. Com o auxílio de tais índices, o usuário verá se a informação solicitada pôde ou não

ser encontrada no banco de dados.

Na Internet esta estratégia falha e as razões para isto são:


• A natureza dinâmica da própria Internet: não há nenhuma

supervisão central no crescimento e desenvolvimento da Internet.

Qualquer pessoa que quer usar e/ou oferecer informação ou serviços

na Internet, é livre para fazê-lo;

• A natureza dinâmica da informação na Internet: a informação

que não pode ser achada hoje, pode estar disponível amanhã. E o

contrário também acontece, a informação que estava disponível,

pode desaparecer de repente;

• A informação e os Serviços de Informação na Internet são muito

heterogêneos: a informação na Internet está sendo oferecida em

muitos tipos diferentes de formatos e de formas diferentes.

3.6.2.Instrumentos de busca e agentes inteligentes

Embora os instrumentos de busca na Internet sejam um valioso serviço, eles

também apresentam algumas desvantagens. Uma solução para este problema seria o uso dos

"Agentes Inteligentes". Considerando que no futuro o ritmo de crescimento da informação

será sempre maior, os agentes poderão ser o único modo eficiente para procurar na Internet.

A utilização de agentes para executar buscas na Internet apresentam certas

vantagens comparadas aos atuais métodos. Abaixo são apresentadas as características dos

instrumentos de busca atualmente utilizados e em seguida as melhorias que a ulitização de

agentes oferece:

As características do instrumentos de busca atuais são:


• Uma busca de informação é baseada em uma ou mais palavras

chaves informadas pelo usuário. As consultas estarão sujeitas a

erros, quando as palavras chaves são muito grandes ou muito

pequenas, recuperando informações irrelevantes;

• O mapeamento é realizado pela coleta de (meta-)informações a partir

das informações e documentos que estão disponíveis na Internet. É

um método muito demorado que causa muito tráfego de dados e não

considera a natureza dinâmica da Internet e das informações que

podem ser encontradas nela;

• A procura por informação é limitada freqüentemente a poucos

serviços da Internet;

• A informação na Internet é muito dinâmica: os instrumentos de

busca freqüentemente referem-se às informações que foram movidas

de um lugar para outro, dando uma localização desconhecida ou

desaparecida.

Estes instrumentos não aprendem com estas buscas e não são

capazes de ajustar estas informações para seus usuários.


A utilização de agentes oferece as seguintes melhorias:

• Os agentes são capazes de buscar informação de forma mais

inteligente, utilizando ferramentas que possibilitam a pesquisa em

termos relacionados ou até mesmo através de conceitos;

• Os agentes podem criar a sua própria base de conhecimento sobre

fontes de informação disponíveis na Internet, que é atualizada e

ampliada depois de toda busca.

Além disso, no futuro, agentes serão capazes de comunicar e

cooperar com outros agentes. Isto os habilitará a executar buscas de

informação de forma mais rápida e eficiente, reduzindo o tráfego na

rede;

• Os agentes assistem o usuário nas suas necessidades, não precisando

se preocupar como os vários serviços da Internet são operados;

• Agentes se ajustam de acordo com as preferências e desejos dos

usuários. Isto conduzirá a agentes que mais e mais se auto ajustarão,

aprendendo através das tarefas executadas e do modo como os

usuários reagem aos resultados encontrados.


Capítulo 4

Exemplo de Agente – Agente Flash

4.1. APRESENTAÇÃO

Como já foi dito anteriormente, a ascensão da Internet mudou

completamente a forma como a sociedade analisa o seu processo evolutivo. Agora a história

da sociedade moderna pode ser divida em dois períodos: “antes da Internet” e “depois da

Internet”.

O fato da Internet ter alcançado o usuário doméstico fez com que ela

sofresse uma radical expansão tornando-a, por assim dizer, uma “moda definitiva”. No meio

de todo o reboliço causado pelo crescimento desacelerado da Internet, a necessidade de se

manter atualizado e a “facilidade” com que a Internet permite o acesso a estes conteúdos fez

com que o usuário se perdesse entre sites e mais sites com os mais variados conteúdos.

Provou-se que a tão pregada “facilidade” não é tão real assim.

Tendo em vista a real necessidade do usuário poder ter acesso ao conteúdo

que deseja, sem que sofra “stress tecnológico”, será apresentado o agente FLASH.

O FLASH é um software que monitora uma lista de sites determinada pelo

usuário, checa alterações no conteúdo do site, alerta o usuário da alteração efetuada e executa

o browser Web para a exibição do site.


Quando foi definido o termo “Agente” neste trabalho, foi dito que este é um

componente de um contexto que age em favor do usuário ou por ele. Para que se faça uso de

um agente, ele deve preencher alguns requisitos que satisfaçam o usuário. Os requisitos que o

agente FLASH deve preencher para executar as tarefas para as quais ele se propõe, são

listados abaixo:

• O software deve permitir que o usuário insira a lista de sites que ele

gostaria que fossem monitorados;

• O programa deve checar periodicamente a lista de sites e detectar

quando houverem mudanças, como por exemplo: a mudança de

conteúdo em um web site;

• O aplicativo deve executar o browser Web do usuário sempre que

for detectada alguma alteração em algum dos sites da lista. O

browser Web executará e exibirá o site que sofreu a alteração

detectada.

4.2.MODELAGEM

A modelagem de um Agente passa por alguns passos que as metodologias

de desenvolvimento de software atuais colocam como necessárias, apesar de existirem

pesquisadores estudando propostas de modelagem exclusivamente de agentes. Além do

Sistema Operacional utilizado, a linguagem no qual será desenvolvido, existem de fato, outros

detalhes que devem ser cuidadosamente observados devido a natureza do software e a forma

de atuação do mesmo.
Alguns detalhes que devem ser considerados no momento de modelarmos

um Agente, são:

• Área de atuação do Agente: refere-se ao ambiente onde o Agente

irá atuar. No caso apresentado a área de atuação do Agente é a

Internet;

• Papel do agente: refere-se a responsabilidade que o Agente

assumirá diante da área de atuação no qual ele foi inserido. O

FLASH, por exemplo, tem o papel de checar alterações em web sites

e informar o usuário de tais alterações através da exibição da página

alterada;

• Abrangência da atuação: refere-se ao alcance da atuação do

Agente. Por exemplo, no caso do programa FLASH, o alcance dele

limita-se a lista de web sites que o usuário irá informar e não a toda

Internet.

Foi dito neste trabalho que o Agente é um “ator” em um contexto, e que ele

possui recursos que fazem com que ele atue no contexto. Quando é feita a modelagem de um

Agente, deve-se considerar que recursos do Agente aplicar-se-ão à realidade na qual ele será

inserido. Dois dos recursos que os Agentes possuem são visíveis neste exemplo, são eles: os

“sensores”, que permitem que eles percebam a situação na qual estão inseridos; e os

“reagentes” que são os responsáveis por atuar no contexto.

Os sensores de um Agente captam eventos ocorridos no contexto e os

reagentes atuam baseados nos eventos ocorridos. É importante que fique claro que os eventos

não são necessariamente os eventos nativos do Sistema Operacional em uso, podendo ser
eventos externos ao Sistema Operacional. No caso do Agente apresentado, o evento que irá

ativa-lo é um evento externo ao Sistema Operacional: a alteração de algum web site que esteja

na lista determinada pelo usuário.

Quando ocorrer a alteração de qualquer web site da lista o Agente entenderá

como uma situação na qual ele deve atuar, e a partir daí ele executará as ações para o qual ele

foi designado, no caso, executar o browser default do usuário exibindo a página alterada.

4.3. Funcionamento

O agente FLASH possui um funcionamento relativamente simples. Será

descrito em linhas gerais quais são os pontos principais deste funcionamento.

Nos processos de análise de requisitos e modelagem do Agente puderam ser

identificados alguns pontos fundamentais para a execução das tarefas.

Para que o objetivo seja alcançado o funcionamento deve obedecer alguns


passos que são exibidos abaixo:
• O Agente utilizará uma conexão de Internet ativa, caso não haja uma

conexão ativa com a Internet o agente ativa o Dial-up;


Figura 4.1 – Interface Dial-Up

• O Agente possuirá uma lista de web sites. Esta lista poderá sofrer

inclusões e adições a qualquer tempo. Esta lista será salva em um

arquivo de texto. No caso do Agente estar sendo executado pela

primeira vez, será solicitado ao usuário a inclusão de pelo menos 1

site na lista;

Figura 4.2 – Tela inicial do Agente FLASH


• O Agente fará o “download” do conteúdo do site e o armazenará

para usá-lo como referência para a checagem das alterações

(comparação de conteúdo);

Figura 4.3 – Lista de sites fornecida pelo usuário

• O Agente fará checagem nos sites da lista fornecida de três em três

minutos;

• Será executado o browser default do usuário no momento em que o

Agente detectar alteração de algum dos sites da lista. O browser

exibirá o site que sofreu alteração.

O exemplo apresentado neste trabalho foi extraído do livro de David

Pallmann (PALLMANN, 1999). Ele foi desenvolvido utilizando-se o Microsoft Visual C++ 6.

No Anexo I deste trabalho são apresentados os códigos fonte do agente Flash.


CAPÍTULO 5
CONCLUSÃO

O desenvolvimento deste trabalho teve como objetivo fundamental apresentar a

tecnologia de agentes como algo real e acessível a comunidade acadêmica. A principal

motivação para o estudo de agentes é o fato de esta tecnologia ser mais realidade do que

conceitos propriamente ditos, permitindo assim que faça-se um estudo dirigido de forma a

estimular o desenvolvimento de pesquisas nesta área que se mostra tão promissora.

Neste trabalho procurou-se apresentar uma visão menos científica e teórica para se

apresentar uma visão mais didática e prática. O exemplo apresentado neste trabalho é

aplicável a contextos simples e está passível de incrementos e melhorias, o intuito foi de

mostrar que os agentes inteligentes são mais simples do que se prega, são “pedaços” de

software com características especiais. Apesar desta aparente simplicidade, a tecnologia de

agentes é seriamente estudada e aplicada em algumas áreas de muita importância.

Apesar de algumas críticas lançadas sobre os agentes inteligentes, o mercado de

tecnologia de hoje tem se mostrado muito receptivo a eles. Neste trabalho foram citadas

algumas áreas onde os agentes inteligentes estão sendo utilizados.

No exemplo apresentado neste trabalho, o agente FLASH, pode-se perceber

características básicas de um agente, como por exemplo: reatividade e benevolência. O agente

FLASH também apresenta-se como fruto do desenvolvimento em uma das linguagens citadas

neste trabalho, a linguagem C++.


Fazer previsões sobre qual será o papel dos agentes inteligentes no futuro é algo que

não se pode fazer, visto que a tecnologia de agentes ainda está em processo de

desenvolvimento e os grupos envolvidos nas pesquisas ainda exercem influência uns sobres

os outros.

Apesar de toda essa incerteza quanto ao futuro dos agentes, eles mostram-se presentes

nos dias atuais, em ferramentas que são utilizadas no dia-a-dia da Internet, como por exemplo:

Comércio Eletrônico, Ensino a Distância, Mecanismos de Busca, entre outros.

Em resumo, pode-se dizer que a tecnologia de agentes é uma realidade de um

potencial muito grande, mas que precisa de atenção e seriedade ao ser estudada. Assim como

outras fantásticas tecnologias que temos hoje em dia precisaram de um tempo de

amadurecimento, pode-se dizer que a tecnologia de agentes está caminhando para esta fase e

que é bem possível que no futuro, se próximo ou distante não se sabe, existirão mais destas

novas “formas de vida” cercando cada usuário de computador do que imaginamos.


REFERÊNCIAS BIBLIOGRÁFICAS

BUSUIOC, M., GRIFFITHS, D. - Cooperating intelligent agents for service

management in communications networks. Proceedings of the Special Interest Group on

Cooperating Knowledge Based Systems. Selected Papers from the Workshop, p. 213-

26,1994.

DAVIDSSON, P. - Concept Acquisition by Autonomous Agents: Cognitive Modeling

versus the Engineering Approach. Lund University Cognitive Studies 12, ISSN 1101-

8453, Lund University, Suécia, 1992.

DAVIDSSON, P. - On the Concept of Concept in the Context of Autonomous Agents. In

Second World Conference on the Fundamentals of Artificial Intelligence, p. 85-96, 1995.

FARLEY, S. R. - Mobile Agent System Architecture: A flexible alternative to moving

data and code to complete a given task. Java Report. SIGS Publications, Inc. New York,

NY, 1997.

FRANKLIN, S., GRAESSER, A. - Is it an Agent, or just a Program?: A Taxonomy for

Autonomous Agents. Proceedings of the Third International Workshop on Agent

Theories, Architectures, and Languages, Springer-Verlag, 1996.

FRAYA, Fátima. Redação e Apresentação Gráfica de Monografia. Belém: Centro de

Ensino Superior do Pará, 2001.


GENESERETH, M. R., KETCHPEL, S. P. - Software Agents. CACM - Communicatons

of the ACM, vol. 37, n° 7, p. 48-53, julho, 1994.

GIESE, L. F. - Estrutura de Agentes para os Processos de Compra e Venda utilizando

Tomada de Decisão Difusa, Dissertação de Mestrado, Universidade Federal de Santa

Catarina, 1998

GRAY, R. S. - Agent Tcl: Alpha Release 1.1. Documentação do Sistema Agente Tcl,

Departamento de Ciências da Computação, Faculdade Dartmouth, Hanover, 1995.

HERMANS, B. - Intelligent Software Agents on the Internet: an inventory of currently

offered functionality in the information society & a prediction of (near) future

developments. Tilburg University, Tilburg, Holanda, julho, 1996.

HOLANDA FERREIRA, Aurélio Buarque de. – Novo Dicionário da Língua Portuguesa.

Rio de Janeiro: Nova Fronteira, 1975.

IBM - Open Blueprint: Intelligent Agent Resource Manager. IBM Corporation, Número

do Documento G325-6592-00, 1995.

ITA (Mitsubishi Electric Information Technology Center America) - Concordia: An

Infrastructure for Collaborating Mobile Agents. First International Workshop on Mobile

Agents 97 (MA'97), Berlin, Alemanha, abril, 1997.


JENNINGS, N. R. - Agent Software. Proceedings UNICOM Seminar on Agent Software,

Londres, UK, p. 12-27, 1995.

JENNINGS, N., WOOLDRIDGE, M. - Software Agents. IEEE Review, p. 17-20, janeiro,

1996.

JENNINGS, N., SYCARA, K., e WOOLDRIDGE, M. A Roadmap of agent research and

development. 1998.

LUCK, M., GRIFFITHS, N., D’INVERNO, M. - From Agent Theory to Agent

Construction: A Case Study. In Intelligent Agents III: Proceedings of the Third

International Workshop on Agent Theories, Architectures and Languages, Mueller,

Wooldridge e Jennings (eds.), Lecture Notes in AI, 1193, p. 49-63, Springer-Verlag, 1997.

NWANA, H. S. - Software Agents: An Overview. Knowledge Engineering Review Press,

vol. 11, n° 3, p. 1-40, 1996.

PALLMANN, David – Programming Bots, Spiders, and Intelligent Agents in Microsoft

Visual C++. Washington: Microsoft Press, 1999. 661p.

RICH, E., KNIGHT, K. - Artificial Intelligence. McGrawHill, Inc. Nova Iorque, USA,

1993

RUSSEL, S. e NORVIG, P. Artificial Intelligence: A Modern Approach. New Jersey,

Prentice Hall, 1995.


SILVA, Flávio Soares Corrêa e MENESES, Eudênia Xavier. Integração de Agentes de

Informação. Anais do Congresso da Sociedade Brasileira de Computação. Fortaleza:

2001. p. 209-253.

STONE, P., VELOSO, M. - Multiagent Systems: A Survey from a Machine Learning

Perspective. CMU CS technical report number CMU-CS-97-193, USA, 1997.

WOOD, A. - Towards a Medium for Agent-Based Interaction. School of Computer

Science , The University of Birmingham, 1994

WOOLDRIDGE, M., JENNINGS, N. R. - Intelligent Agents: Theory and Practice. The

Knowledge Engineering Review, vol. 10, n° 2, p. 115-152, 1995.

WOOLDRIDGE, M. Intelligent Agents In G. Weiss, editor: Multiagent Systems, The

MIT Press, April, 1999.

AUER, K. Agents [on line]. Jan. 1997. Disponível:

http://www.tip.net.au/~kauer/project/main.htm [capturado em 15 set. 2001].

FININ, T. - Agent Programming and Scripting languages [on-line]. Maio. 1997.

Disponível: http://www.cs.umbc.edu/agents/technology/asl.shtml [capturado em 15 set.

2001].
HERMANS, B. - Intelligent Software Agents on the Internet [on line]. 1999. Disponível:

http://www.firstmonday.dek/issues/issue2_3/index.html

ORCHARD, D. Intelligent Agents [on line]. Nov. 1996. Disponível:

http://www.pacificspirit.com/Courses/Agents/index.htm [capturado em 20 set. 2001].

SOUZA, E. M. S. – Uma Estrutura de Agentes para Assessoria na Internet [on line].

Nov. 1996. Disponível: http://www.eps.ufsc.br/disserta96/eliane/index/ .

TCL. TCL WWW Info [on-line]. 1996


Disponível: http://www.sco.com/Technology/tcl/Tcl.html

WORLD WIDE WEB CONSORTIUM. Mobile Code [on line]. Maio. 1997. Disponível:

http://www.w3.org/pub/WWW/MobileCode/ .
ANEXO I

CÓDIGOS FONTE

Os códigos fonte deste anexo são em C++, e foi utilizada a ferramenta de


desenvolvimento Visual C++ 6. Todos os códigos fonte apresentados neste anexo estão
separados em: Arquivos Fonte e Arquivos de Cabeçalho.

AGENTE FLASH

1. ARQUIVOS FONTE

FLASH.CPP

// FLASH.CPP : DEFINES THE CLASS BEHAVIORS FOR THE APPLICATION.


//

#INCLUDE "STDAFX.H"
#INCLUDE "FLASH.H"
#INCLUDE "FLASHDLG.H"

#IFDEF _DEBUG
#DEFINE NEW DEBUG_NEW
#UNDEF THIS_FILE
STATIC CHAR THIS_FILE[] = __FILE__;
#ENDIF

/////////////////////////////////////////////////////////////////////////////
// CFLASHAPP

BEGIN_MESSAGE_MAP(CFLASHAPP, CWINAPP)
//{{AFX_MSG_MAP(CFLASHAPP)
// NOTE - THE CLASSWIZARD WILL ADD AND REMOVE MAPPING MACROS HERE.
// DO NOT EDIT WHAT YOU SEE IN THESE BLOCKS OF GENERATED CODE!
//}}AFX_MSG
ON_COMMAND(ID_HELP, CWINAPP::ONHELP)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFLASHAPP CONSTRUCTION

CFLASHAPP::CFLASHAPP()
{
// TODO: ADD CONSTRUCTION CODE HERE,
// PLACE ALL SIGNIFICANT INITIALIZATION IN INITINSTANCE
}
/////////////////////////////////////////////////////////////////////////////
// THE ONE AND ONLY CFLASHAPP OBJECT

CFLASHAPP THEAPP;

/////////////////////////////////////////////////////////////////////////////
// CFLASHAPP INITIALIZATION

BOOL CFLASHAPP::INITINSTANCE()
{
AFXENABLECONTROLCONTAINER();

// STANDARD INITIALIZATION
// IF YOU ARE NOT USING THESE FEATURES AND WISH TO REDUCE THE SIZE
// OF YOUR FINAL EXECUTABLE, YOU SHOULD REMOVE FROM THE FOLLOWING
// THE SPECIFIC INITIALIZATION ROUTINES YOU DO NOT NEED.

#IFDEF _AFXDLL
ENABLE3DCONTROLS(); // CALL THIS WHEN USING MFC IN A
SHARED DLL
#ELSE
ENABLE3DCONTROLSSTATIC(); // CALL THIS WHEN LINKING TO MFC STATICALLY
#ENDIF

CFLASHDLG DLG;
M_PMAINWND = &DLG;
INT NRESPONSE = DLG.DOMODAL();
IF (NRESPONSE == IDOK)
{
// TODO: PLACE CODE HERE TO HANDLE WHEN THE DIALOG IS
// DISMISSED WITH OK
}
ELSE IF (NRESPONSE == IDCANCEL)
{
// TODO: PLACE CODE HERE TO HANDLE WHEN THE DIALOG IS
// DISMISSED WITH CANCEL
}

// SINCE THE DIALOG HAS BEEN CLOSED, RETURN FALSE SO THAT WE EXIT THE
// APPLICATION, RATHER THAN START THE APPLICATION'S MESSAGE PUMP.
RETURN FALSE;
}

FLASHDLG.CPP

// FlashDlg.cpp : implementation file


//
#include "stdafx.h"
#include "Flash.h"
#include "FlashDlg.h"
#include "CRobot.h"
#include "CRobotInternet.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog


{
public:
CAboutDlg();

enum { IDD = IDD_ABOUTBOX };


protected:
virtual void DoDataExchange(CDataExchange* pDX);

// Implementation
protected:

DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{

void CAboutDlg::DoDataExchange(CDataExchange* pDX)


{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFlashDlg dialog

CFlashDlg::CFlashDlg(CWnd* pParent /*=NULL*/)


: CDialog(CFlashDlg::IDD, pParent)
{
m_urls = _T("");
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CFlashDlg::DoDataExchange(CDataExchange* pDX)


{
CDialog::DoDataExchange(pDX);

DDX_Control(pDX, IDC_URLS, m_urls_ctl);


DDX_CBString(pDX, IDC_URLS, m_urls);

BEGIN_MESSAGE_MAP(CFlashDlg, CDialog)

ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_REMOVE, OnRemove)
ON_WM_TIMER()

ON_MESSAGE(WM_TRAY_NOTIFY, OnTrayNotify)
ON_COMMAND(IDC_CONFIGURE, CFlashDlg::OnMenuConfigure)
ON_COMMAND(IDC_EXIT, CFlashDlg::OnMenuExit)
END_MESSAGE_MAP()

////////////////////////////////////////////////////////////////////
// CFlashDlg message handlers

BOOL CFlashDlg::OnInitDialog()
{
CDialog::OnInitDialog();

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);


ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);


if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,
strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE);
// Set big icon
SetIcon(m_hIcon, FALSE);
// Set small icon
nSites = 0;
LoadURLs();

m_nTrayData.cbSize = sizeof(NOTIFYICONDATA) ;
m_nTrayData.hWnd = m_hWnd;
m_nTrayData.uID = 0 ;
m_nTrayData.hIcon = LoadIcon (AfxGetInstanceHandle(),

MAKEINTRESOURCE(IDR_MAINFRAME));
m_nTrayData.uCallbackMessage = WM_TRAY_NOTIFY;
strcpy (m_nTrayData.szTip, "Agente Flash");
m_nTrayData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
Shell_NotifyIcon (NIM_ADD, &m_nTrayData);

bHidden = false;

if (nSites > 0)
{
ShowWindow(SW_MINIMIZE);
SetTimer(1, 1000, NULL);
} // End if

return TRUE;
}

void CFlashDlg::OnSysCommand(UINT nID, LPARAM lParam)


{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.

void CFlashDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND,(WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle


int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon


dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}

// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CFlashDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}

void CFlashDlg::OnAdd()
{
// Validate the input

UpdateData(true);

if (m_urls == "")
{
MessageBox("Por favor, informe um endereço.",
"Endereço necessário",
MB_ICONEXCLAMATION);
return;
} // End if

if (nSites == MAX_SITES)
{
MessageBox("O número máximo de sites foi alcançado.", "Limite
máximo alcançado", MB_ICONEXCLAMATION);
return;
} // End if

// Add the site


CWaitCursor wc;

sSiteURL[nSites] = m_urls;
sSiteHTML[nSites] = "";

m_urls_ctl.AddString(m_urls);

nSites++;

m_urls = "";
UpdateData(false);
GetDlgItem(IDC_URLS)->SetFocus();
}

void CFlashDlg::OnRemove()
{
CString sURL;

UpdateData(true);
sURL = m_urls;

int nSiteIndex = -1;


for (int nSite = 0; nSite < nSites; nSite++)
{
if (sSiteURL[nSite] == sURL)
{
nSiteIndex = nSite;
nSite = nSites;
} // End if
} // End for

if (nSiteIndex == -1)
{
MessageBox("Você não pode remover " + sURL
+ " porque ele não está na lista.",
"Endereço não encontrado", MB_ICONEXCLAMATION);
return;
} // End if

CWaitCursor wc;

// Delete URL from site variables

for (nSite = nSiteIndex; nSite < nSites - 1; nSite++)


{
sSiteURL[nSite] = sSiteURL[nSite + 1];
sSiteHTML[nSite] = sSiteHTML[nSite + 1];
} // End for
sSiteURL[nSites].Empty();
sSiteHTML[nSites].Empty();
nSites--;

// Delete URL from the list box

m_urls_ctl.DeleteString(m_urls_ctl.GetCurSel());
}

void CFlashDlg::OnOK()
{
if (nSites == 0)
{
MessageBox("Você deve fornecer o endereço de 1 ou mais sites.",
"Nenhum site na lista", MB_ICONEXCLAMATION);
return;
} // End if
ShowWindow(SW_HIDE);
SaveURLs();
SetTimer(1, 1000, NULL);
}

void CFlashDlg::OnTimer(UINT nIDEvent)


{
KillTimer(1);
if (bHidden)
{
ShowWindow(SW_HIDE);
bHidden = true;
} // End if
CheckWebPages();
SetTimer(1, 3 * 60 * 1000, NULL);
CDialog::OnTimer(nIDEvent);
}

// *******************
// * *
// * CheckWebPages *
// * *
// *******************
// Description: Visits each web page to see if it has changed

void CFlashDlg::CheckWebPages()
{
// Check web pages

CRobotInternet internet;
CString sHTML;
int nResult;
CString sErrMsg;

for (int nSite = 0; nSite < nSites; nSite++)


{
if (internet.httpGet(sSiteURL[nSite], sHTML,
nResult, sErrMsg))
{
if (sSiteHTML[nSite] != sHTML)
{
if (sSiteHTML[nSite] != "")
ShellExecute(NULL, "open",
sSiteURL[nSite], NULL,
NULL,
SW_SHOWNORMAL);
sSiteHTML[nSite] = sHTML;
} // End if
} // End if
} // End for nSite
}

// ******************
// * *
// * OnTrayNotify *
// * *
// ******************
// Tray notification handler

LRESULT CFlashDlg::OnTrayNotify(WPARAM wParam, LPARAM lParam)


{
// ---- Right-button down: Pop-up menu ----
if (lParam == WM_RBUTTONDOWN)
{
CMenu menu;
VERIFY(menu.LoadMenu(IDR_MENU1));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CRect screen;
GetDesktopWindow()->GetWindowRect(screen);
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
screen.right, screen.bottom, AfxGetMainWnd());
} // End if
return LRESULT(0);
}

void CFlashDlg::OnMenuConfigure()
{
KillTimer(1);
ShowWindow(SW_NORMAL);
}

void CFlashDlg::OnMenuExit()
{
Shell_NotifyIcon (NIM_DELETE, &m_nTrayData);
EndDialog(0);
}

// **************
// * *
// * LoadURLs *
// * *
// **************
// Description: Loads URL list from previous session
// If Flash.url file exists, loads URLS from it
// (one URL per line)
//
// Outputs: nSites ........ Number of URLs
// sSiteURL[] .... Contains the actual URLs

void CFlashDlg::LoadURLs()
{
CStdioFile file;
CString sLine;

nSites = 0;
m_urls_ctl.ResetContent();

if (file.Open("flash.url", CFile::modeRead))
{
while (file.ReadString(sLine))
{
sSiteURL[nSites] = sLine;
nSites++;
m_urls_ctl.AddString(sLine);
} // End while
file.Close();
} // End if
}

// **************
// * *
// * SaveURLs *
// * *
// **************
// Description: Saves URL list for the sake of future sessions
// Creates file Flash.url and writes one URL per
// line to it
//
// Inputs: nSites ........ Number of URLs
// sSiteURL[] .... Contains the actual URLs
void CFlashDlg::SaveURLs()
{
CStdioFile file;

file.Open("flash.url", CFile::modeCreate|CFile::modeWrite);
for (int u = 0; u < nSites; u++)
file.WriteString(sSiteURL[u] + "\n");
file.Close();
}

2. ARQUIVOS DE CABEÇALHO

FLASH.H

// Flash.h : main header file for the FLASH application


//

#if
!defined(AFX_FLASH_H__385D4245_82F5_11D2_BD1F_00C04F96A9C3__INCLUDED_
)
#define AFX_FLASH_H__385D4245_82F5_11D2_BD1F_00C04F96A9C3__INCLUDED_

#if _MSC_VER > 1000


#pragma once
#endif // _MSC_VER > 1000

#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif

#include "resource.h" // main symbols

/////////////////////////////////////////////////////////////////////////////
// CFlashApp:
// See Flash.cpp for the implementation of this class
//

class CFlashApp : public CWinApp


{
public:
CFlashApp();

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CFlashApp)
public:
virtual BOOL InitInstance();
//}}AFX_VIRTUAL
// Implementation

//{{AFX_MSG(CFlashApp)
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous
line.

#endif //
!defined(AFX_FLASH_H__385D4245_82F5_11D2_BD1F_00C04F96A9C3__INCLUDED_
)

FLASHDLG.H

// FlashDlg.h : header file


//

#if
!defined(AFX_FLASHDLG_H__385D4247_82F5_11D2_BD1F_00C04F96A9C3__INCLU
DED_)
#define
AFX_FLASHDLG_H__385D4247_82F5_11D2_BD1F_00C04F96A9C3__INCLUDED_

#if _MSC_VER > 1000


#pragma once
#endif // _MSC_VER > 1000

////////////////////////////////////////////////////////////////////
// CFlashDlg dialog

#defineWM_TRAY_NOTIFY WM_USER + 0

#define MAX_SITES 100

class CFlashDlg : public CDialog


{
// Construction
public:
CFlashDlg(CWnd* pParent = NULL); // standard constructor
LRESULT OnTrayNotify(WPARAM wParam, LPARAM lParam);
NOTIFYICONDATA m_nTrayData;
CString sSiteURL[MAX_SITES];
CString sSiteHTML[MAX_SITES];
int nSites;
BOOL bHidden;
void LoadURLs();
void SaveURLs();
void CheckWebPages();
void OnMenuConfigure();
void OnMenuExit();

// Dialog Data
//{{AFX_DATA(CFlashDlg)
enum { IDD = IDD_FLASH_DIALOG };
CComboBox m_urls_ctl;
CString m_urls;
//}}AFX_DATA

// ClassWizard generated virtual function overrides


//{{AFX_VIRTUAL(CFlashDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:
HICON m_hIcon;

// Generated message map functions


//{{AFX_MSG(CFlashDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnAdd();
afx_msg void OnRemove();
virtual void OnOK();
afx_msg void OnTimer(UINT nIDEvent);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous
line.

#endif //
!defined(AFX_FLASHDLG_H__385D4247_82F5_11D2_BD1F_00C04F96A9C3__INCLU
DED_)
STDAFX.H

// stdafx.h : include file for standard system include files,


// or project specific include files that are used frequently, but
// are changed infrequently
//

#if
!defined(AFX_STDAFX_H__385D4249_82F5_11D2_BD1F_00C04F96A9C3__INCLUDE
D_)
#define
AFX_STDAFX_H__385D4249_82F5_11D2_BD1F_00C04F96A9C3__INCLUDED_

#if _MSC_VER > 1000


#pragma once
#endif // _MSC_VER > 1000

#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers

#include <afxwin.h> // MFC core and standard components


#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous
line.

#endif //
!defined(AFX_STDAFX_H__385D4249_82F5_11D2_BD1F_00C04F96A9C3__INCLUDE
D_)