Agentes de Software: uma breve introdução

Por Dalton Lopes Martins

Após a explosão do uso doméstico da Internet, na metade dos 90, uma tecnologia tornou-se a coqueluche dos desenvolvedores de software para ambientes de rede e sistemas distribuídos: os agentes de software. No entanto, agentes não são programas que rodam apenas em ambientes voltados para redes, como veremos a seguir, mas podem ser utilizados em várias situações, como agentes de interface (lembram-se do “chato” clip do Word?), gerenciadores de desktop, entre outras aplicações.

Mas, o que define, o que determina que um programa seja um agente de software? Um agente é, antes de mais nada, um programa desenvolvido em uma linguagem de programação qualquer. No entanto, há algumas características na implementação de um agente que o diferenciam de um programa clássico.

O agente deve possuir alguns requisitos necessários para que seja considerado como tal: um ciclo de vida contínuo no tempo, um ambiente de atuação, sensores que recolham informações do ambiente, atuadores que causem mudanças no ambiente e autonomia, ou seja, funcionamento independente da interferência do usuário. Agora, podemos definir melhor cada um desses requisitos.

O ambiente é a área de atuação do agente e pode ser, teoricamente, qualquer parte independente que possamos identificar num sistema. Podemos considerar como ambiente o sistema de arquivos local onde podemos ter rodando um agente de mirror, que espelha o conteúdo de um diretório em outro; podemos considerar como ambiente a Internet no caso de agentes spider, que caminham de site em site verificando a validade de links; podemos considerar como ambiente uma LAN (Local Area Network) no caso de um agente que verifique os usuários conectados e as aplicações que usam; ou, até mesmo podemos considerar um ambiente a própria área de desktop do sistema operacional no caso de um agente de interface.

Os sensores são os mecanismos que utilizamos para captar as mudanças que ocorrem no ambiente, como os sockets (mecanismo que cria uma conexão entre duas máquinas através de uma porta de comunicação e do IP de ambas) e os métodos que permitem obter informações do sistema, como rotinas para obtenção de data, hora, listagem de um diretório, etc.

Os atuadores são os mecanismos que utilizamos para efetuar alguma alteração no ambiente, como os próprios sockets (a conexão criada é bi-direcional, permitindo tanto ler quanto escrever), métodos para apagar arquivos, para desenhar algum objeto na tela, exibir informações, etc.

O ciclo de vida de um agente representa o tempo em que ele se encontra em execução no objetivo de realizar uma determinada tarefa. Após esse tempo, o processo que executa o agente irá morrer ou ficará “dormindo” durante outro intervalo de tempo. Como exemplo, podemos imaginar um agente que realiza backup de um servidor FTP para o disco local da máquina de um usuário. Se o agente ficar o tempo todo lendo o servidor, a máquina do usuário irá ficar praticamente paralisada. No entanto, o agente lê as informações de arquivos do servidor, atualiza no cliente e dorme por um tempo, retornando após para novamente procurar por mudanças no ambiente.

A autonomia é a principal característica de um programa que o torna um agente. Ela indica que o programa será executado independente da intervenção do usuário, ou seja, ele será capaz de controlar seu próprio fluxo de ações.

Desta forma, temos caracterizado os requisitos que tornam um programa um agente. A partir disso, podemos imaginar diferentes aplicações e tecnologias que possam servir como motivação e base de apoio no desenvolvimento de programas orientado a agentes na programação de jogos de computador.

Agentes de software e desenvolvimento de Jogos

No desenvolvimento de jogos, um fator importante e essencial é a inteligência que há por trás da interface, ou seja, o mecanismo que vai processar as ações tomadas pelo usuário e gerar uma reação por parte do sistema ao usuário. A programação clássica dessa inteligência se dá através do paradigma comportamental, ou seja, o programa supõe uma série de comportamentos possíveis por parte do usuário e, com base nisto, irá gerar uma reação também previamente determinada. O problema dessa forma de lidar com a inteligência do sistema é que ela limita as ações possíveis por parte do usuário e permite que o mesmo descubra o padrão de análise de movimentos utilizado pelo programa, gerando aquelas cômicas situações onde o usuário cria mecanismos para burlar o sistema e assim avançar no jogo.

Os agentes podem ser utilizados para resolver esses problemas e criar jogos mais dinâmicos e interativos. A autonomia de execução de um agente pode ter vários níveis de complexidade, permitindo desde o nível mais básico onde o agente possa controlar suas próprias ações, até o nível mais alto, onde o agente possa tomar decisões orientado a metas específicas e utilizar mecanismos de análise para verificar se está sendo bem sucedido ou não.

Esse nível de programação exige por parte do programador o conhecimento de alguns conceitos que possam auxiliar no modelamento do agente, como processamento distribuído, threads que permitam a execução paralela de pedaços de um programa, construção paralela de sensores e atuadores que permitam o nível de interação desejada, entre outros fatores.

Iremos trabalhar cada um desses conceitos ao longo do tempo e fornecer exemplos de aplicações desenvolvidas na linguagem JAVA. Por enquanto, fica a idéia e a motivação inicial para se considerar uma nova forma de programação no desenvolvimento de jogos para computadores.

Conheça o GNU Mages

Por João Ricardo Bittencourt

O GNU Mages é um ambiente de simulação para sistemas multi-agentes livremente distribuído criado para testar controladoras inteligentes para agentes em mundos virtuais, criado especialmente para jogos eletrônicos. Eu desenvolvi este ambiente durante o Trabalho de Conclusão no curso de Análise de Sistemas na Universidade do Vale do Rio dos Sinos (UNISINOS) sob a orientação do Prof. Dr. Fernando Osório. No mês de julho o protótipo do GNU Mages, versão 1.0.0 Alfa foi divulgado e está disponível gratuitamente para comunidade sob a licença GNU GPL no site http://www.inf.unisinos.br/~jrbitt/mages .

Atualmente existem muitos trabalhos sobre agentes autônomos, mas na verdade a grande maioria destes está voltada para agentes comunicacionais, do tipo motores de busca na Web, agentes negociadores ou refere-se ao novo paradigma de programação orientado a agentes. Muitos destes projetos estão focalizados somente com a arquitetura de rede e questões de protocolos de comunicação entre agentes. A idéia do GNU Mages é oferecer um ambiente para criação e simulação de mundos sintéticos, que permitem estudar e criar soluções que envolvam Inteligência Artificial (IA) para domínios do tipo jogos.

Além dos jogos eletrônicos, o GNU Mages pode ser usado para efetuar simulações nas áreas de robótica, simulações militares, sociais e biológicas. Sabemos que nos jogos eletrônicos é de suma importância criarmos controladoras inteligentes para os inimigos, aliados, unidades e adversários estratégicos. Evidentemente que não iremos utilizar técnicas de IA extremamente sofisticadas em simples inimigos em um jogo de plataforma quando estes podem ser modelados usando uma simples máquina de estados finitos. Mas quando queremos adicionar nos jogos inimigos realmente poderosos que criam táticas em jogos first person, como Quake e Half Life; ou pretendemos criar um grupo de aliados em um RPG com emoções e agindo de forma independente; ou quando queremos construir unidades táticas com comportamento semi-autônomo em um jogo de estratégia como Warcraft, definitivamente precisamos usar técnicas de IA sofisticadas. Usar um ambiente de simulação, como o GNU Mages, permite projetar facilmente controladoras que poderão ser usadas nestes jogos.

Pelo fato do foco do GNU Mages ser a construção de mundos sintéticos, o ambiente de simulação não está voltado somente para os jogos eletrônicos. O simulador também pode ser usado para avaliação de táticas militares (wargames), estudo de sistemas biológicos (vida artificial) e para projetos de robôs autônomos.

O GNU Mages é totalmente desenvolvido em Java e executa tanto na plataforma Windows, quanto no Linux.

Quanto suas funcionalidades o GNU Mages permite:

  1. Construir diferentes controladoras, usando diferentes tipos de sensores e técnicas de Inteligência Artificial. Possui uma fácil integração com o ANNeF (Artificial Neural Networks Framework) e com o FuzzyF (Fuzzy Logic Framework). Ambas ferramentas são softwares livres voltadas para Redes Neurais Artificiais e Lógica Nebulosa, respectivamente;
  2. Livre distribuição: você é livre para executar, copiar, distribuir, estudar, modificar e aperfeiçoar o ambiente de simulação;
  3. Modelar múltiplos domínios multi-agentes. O GNU Mages oferece classes para modelagem de agentes, ambientes 2D, comunicação entre agentes e interação dos agentes com o ambiente. Inicialmente está sendo distribuído com a versão inicial o conhecido jogo de guerra “Capture the Flag”;
  4. Padronizar todos os dados necessários para as simulações usando XML. Isto facilita o intercâmbio de objetos entre a comunidade e o uso dos arquivos em outras aplicações. Além disso, através destes dados é possível efetuar testes estatísticos para validar as soluções para os domínios modelados;
  5. Criar ambientes 2D usando um editor de mapas. Existe uma carência na comunidade de editores gráficos 2D livremente distribuídos que gerem mapas em um formato que pode ser usado por outras aplicações. Por esta razão o editor 2D do GNU Mages gera mapas formatados em XML, para que qualquer aplicação, plataforma ou linguagem de programação possa utilizar estes arquivos;
  6. Treinar os agentes inteligentes. O GNU Mages possui um ambiente gráfico que permite coletar exemplos para treinar os agentes usando algum tipo de algoritmo supervisionado;
  7. Executar simulações distribuídas usando uma arquitetura cliente-servidor.

Como já foi dito a versão que está sendo distribuída é um protótipo, a versão 1.0.0 Alfa. Por esta razão não é uma versão estável e precisa da ajuda de toda a comunidade para um constante aperfeiçoamento. Por esta razão estou convidando a todos os interessados em participar deste projeto. Caso você seja programador Java ou tenha interesse em participar em um projeto de software livre voltado para as áreas de simulação, Inteligência Artificial e jogos eletrônicos entre em contato. Além de contribuir programando existem várias formas de ajudar o projeto:

  1. Use o GNU Mages! Nunca deixe de usar este simulador e referenciar em seus trabalhos. Simplesmente o fato de usá-lo já é uma grande ajuda;
  2. Divulgue. Fale sobre o GNU Mages para pessoas que tenham interesse neste tipo de ferramenta. Procure divulgá-lo, pois somente desta forma o projeto continua vivo e por conseqüência crescendo e ficando cada vez mais arrojado para toda a comunidade;
  3. Seja um Tester: Você instala o simulador e fica utilizando-o. À medida que erros e problemas surgem, você vai relatando estes problemas para que possamos corrigir estes bugs. Além disso, você pode dar sugestões de novas funcionalidades e pontos que precisam ser melhorados;
  4. Seja um tradutor. Se você não é um profissional da informática, mas domina algum idioma (inglês, espanhol, italiano, russo, japonês, ou qual for outros idioma), você pode nos ajudar na tradução das documentações;
  5. Escreva documentação: Caso você domine alguma parte do GNU Mages você pode ajudar escrevendo manuais, tutoriais e how-tos, relatando sua experiência e facilitando o uso do GNU Mages por toda a comunidade.
  6. E programando é claro! Se você é programador Java e tem interesse neste tipo de aplicação entre em contato, por favor. Precisa-se de programadores.

Viste o site do GNU Mages (http://ww.inf.unisinos.br/~jrbitt/mages) lá você vai encontrar todos os arquivos necessários para a execução do simulador, um guia de instalação e uma série de publicações que tratam especificamente do GNU Mages, incluindo uma versão preliminar do Trabalho de Conclusão que deu origem ao simulador.

Como não podia deixar de ser: Comunidade, uni-vos!