Preview only show first 10 pages with watermark. For full document please download

Agentes Inteligentes

Arquivo sobre Robocup.

   EMBED


Share

Transcript

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, baseandose 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 Cooperação Agentes de Aprendizado Colaborativo 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 Autônomo Agentes Colaborativos Sistemas de Agentes Heterogêneos Agentes de Interface Agentes Móveis Agentes Híbridos Agentes de Informações Agentes 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 Distribuída IAD Inteligência 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 Permite de agentes protocolos de forem coordenação construídos. 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, EM LINGUAGENS ORIENTADAS A MAS NADA IMPEDE QUE AGENTES SEJAM PROGRAMADOS OBJETOS. EXISTEM PROGRAMAÇÃO DE AGENTES EM LINGUAGENS COMO TEMPLATE1). OU SEJA, TEMPLATES E PACOTES PARA JAVA (EX. JAT – JAVA AGENT 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. 21326,1994. DAVIDSSON, P. - Concept Acquisition by Autonomous Agents: Cognitive Modeling versus the Engineering Approach. Lund University Cognitive Studies 12, ISSN 11018453, 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(); SHARED DLL #ELSE ENABLE3DCONTROLSSTATIC(); #ENDIF // CALL THIS WHEN USING MFC // CALL THIS WHEN LINKING TO MFC STATICALLY 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 // IN A #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, strAboutMenu); } } IDM_ABOUTBOX, 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.", máximo alcançado", MB_ICONEXCLAMATION); return; } // End if // Add the site "Limite 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], nResult, { if (sSiteHTML[nSite] != sHTML) { if (sSiteHTML[nSite] != "") ShellExecute(NULL, sSiteURL[nSite], NULL, SW_SHOWNORMAL); sSiteHTML[nSite] = sHTML; } // End if } // End if } // End for nSite } sHTML, sErrMsg)) "open", NULL, // ****************** // * * // * 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); //}}AFX_VIRTUAL // DDX/DDV support // 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 // MFC core and standard components #include // MFC extensions #include // MFC Automation classes #include // MFC support for Internet Explorer 4 Common Controls #ifndef _AFX_NO_AFXCMN_SUPPORT #include // 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_)