O que é programação orientada a agentes?

mm

Ramos de Souza Janones

Janones, é um empreendedor brasileiro apaixonado por empreendedorismo e tecnologia. Ao longo dos anos trabalhando com o desenvolvimento de softwares desktop desde a linguagem Clipper, passando pelo Delphi e atualmente com Java.

Optou pela formação de Publicidade e Marketing por sua segunda empresa de tecnologia ter participado do "boom" da internet nos anos 90 e na procura de melhorar seus conhecimentos em negócios.

Em razão da principal formação e profundos conhecimentos em programação e banco de dados, é capaz de realizar o desenvolvimento de aplicativos web, desktop e mobile com maior criatividade e inovação que profissionais de desenvolvimento com uma formação única e mais especifica, dedicada somente ao desenvolvimento de softwares.

Com toda sua experiência com empresas de software, sua formação e paixão por negócios escreveu o livro "Marketing para Empresas e Profissionais de Software", publicado pela editora carioca Ciência Moderna em 2012. Além de outros livros sobre programação.
mm

Temos alguns paradigmas de programação bem conhecidos mas e a respeito de programação orientada à agentes:

  • Onde é aplicado?
  • Existe algum exemplo de onde já foi utilizado com sucesso?
  • Qual a diferença da orientação a objetos X orientação a agentes?

Quando falamos em Agentes geralmente estamos a falar no âmbito da Inteligência Artificial, que neste caso, mais propriamente da Inteligência Artificial Distribuída.

A Inteligência Artificial Distribuída (IAD), com um enfoque diferente da Inteligência Artificial (IA) tradicional, tenta dividir um problema em problemas pequenos e mais simples. Estes sistemas desenvolvidos, utilizando a técnica da Inteligência Artificial Distribuída, podem resolver problemas fisicamente distribuídos, que podem parecer complexos, como uma rede de transportes em que existem diversos elementos de transporte, assim como pontos de distribuição. É mais intuitivo analisar este problema de forma distribuída.

No Paradigma de Programação Orientada a Agentes, onde um Programa é projetado e desenvolvido usando vários Agentes que se dá o nome de Sistemas Multiagente (SMA). Por este motivo o desenvolvimento de Software nesta gama obrigou a criação e pesquisa do novo Paradigma onde o software seria produzido com rigor, qualidade, desempenho e optimização, desta forma, tal requer o uso de metodologias, modelos e arquiteturas, assim como outros, para facilitar o desenvolvimento dentro do âmbito.

Deixo aqui um Artigo interessante para ler.

Respondendo às questões:

  • A Programação Orientada a Agentes é aplicada em Inteligência Artificial;
  • Existem vários exemplos onde a metodologia está a ser usada com enorme sucesso:
    • Controle e automação;
    • Telecomunicações;
    • Sistemas de Transporte;
    • Jogos;
  • Em relação à Programação Orientada a Objetos o conceito não tem nada a ver com a Programação Orientada a Agentes, apesar de POA poder ser implementado usando o paradigma Orientado a Objetos, falamos de coisas, que mesmo se complementando, são em Teoria distintas. Ou seja, POA pode usar POO mas são conceitos diferentes.

Orientação a Agentes é o termo que se usa pra descrever a forma de pensar na arquitetura de software em que as entidades computacionais de maior interesse são chamados de “agentes” (e não “objetos” ou “serviços”). Esse paradigma se iniciou na Inteligência Artificial Distribuída, uma subárea da IA que visa resolver problemas cuja complexidade decorre de um caráter de distribuição funcional ou física.

Só por curiosidade, há quem argumente que a própria Orientação a Objetos também se iniciou com a IA (há um bom tempo, entre as décadas de 60 e 70) quando era grande a preocupação com representação de conhecimento. Os frames (estereótipos de situações do mundo real) são, essencialmente, objetos com seus atributos (nesse conceito então chamados de slots).

A principal característica desse paradigma está no fato de que agentes são entidades autônomas que têm um objetivo próprio. Esse objetivo, naturalmente, é dado por um projetista, mas o agente vai buscar atingi-lo da melhor forma possível (algo que na IA é chamado de racionalidade). O nome “agente” vem dessa autonomia, no sentido de que essa entidade age em prol de outro alguém (semelhante a quando um artista fala que tem um agente).

Esse modelo de agência muda algumas coisas na forma como um sistema implementado com esse paradigma funciona. Em todas as orientações (isto é, na orientação a objetos, a serviços e a agentes), a resolução do problema decorre da troca de mensagens (invocação de métodos, por quaisquer meios). Porém:

  • Na Orientação a Objetos, todas as entidades (os objetos) são desenvolvidos essencialmente pelo mesmo projetista. Mesmo que uma biblioteca externa seja utilizada, o projetista tem total conhecimento do funcionamento dos objetos nela contida, precisando se preocupar por exemplo com o estado de uma transação (inicializar a biblioteca, “comitar” depois de alterar algo, etc). Quando objetos trocam mensagens entre si, as respostas possíveis envolvem o retorno de algo ou uma indicação de erro, mas uma invocação é sempre realizada (executada) pelo objeto de destino.
  • Na Orientação a Serviços, as entidades (serviços) não são necessariamente desenvolvidos pelo mesmo projetista. Um projetista pode utilizar os serviços criados e publicados por outros, focando seu interesse no conteúdo da resposta, e (de forma geral) não precisa se preocupar com qualquer estado que decorra desse pedido (não há “comit” pendente – um serviço solicita a realização de algo pelo outro que simplesmente o faz). Quando serviços trocam mensagens entre si, as respostas possíveis também envolvem o retorno de algo ou uma indicação de erro, e a chamada também é sempre realizada pelo serviço de destino.
  • Na Orientação a Agentes, as entidades (agentes) não são necessariamente desenvolvidos pelo mesmo projetista. Mas o foco de interesse não é na resposta, e sim alcançar o objetivo local do agente (realizar a tarefa X). Mas não há qualquer relação de obrigatoriedade em responder uma mensagem enviada. Por exemplo, o agente A pode mandar uma mensagem ao agente B (“invocar” um método ou requisitar um serviço), e a sua resposta pode também ser um resultado qualquer ou um retorno de erro. Mas, a mensagem pode simplesmente ser ignorada pelo agente B caso ele julgue que não lhe convém, naquele momento, gastar tempo respondendo a ela.

Essa distinção é sutil, mas permite a emergência (no sentido de surgimento) de comportamentos não planejados pelo projetista, o que é muito útil na resolução de problemas complexos.

A arquitetura geral de um agente é também resultado da unificação de várias áreas da IA, e por isso considera que os agentes são entidades que percebem o ambiente onde estão imersos (eles têm sensores – algo equivalente a atributos dinâmicos, isto é, que se auto atualizam) e atuam nesse ambiente para se aproximar de seus objetivos individuais (eles têm atuadores – algo equivalente a métodos, mas que eles mesmo executam). Alguns atuadores são relacionados à comunicação com outros agentes (computacionais ou humanos). O gráfico abaixo, do livro Artificial Intelligence: A Modern Approach, ilustra essa arquitetura geral:

inserir a descrição da imagem aqui

Esse paradigma ainda não é tão popular no mercado profissional, muito embora seja usado por grandes empresas (o Google é a mais notável) para resolver problemas de complexidade distribuída. Ele também é bastante usado em jogos digitais, para implementar a IA dos NPCs (Non-Playable Characters).

Dois exemplos de sistemas que utilizam esse paradigma:

  • Certa vez no mestrado vi uma palestra de um pesquisador alemão que mencionou que o sistema de controle aéreo de Berlin tem um sistema experimental baseado em agentes (infelizmente não tenho mais a referência). Há agentes para cada elemento de interesse do sistema: os aviões, as escadas rolantes do aeroporto, as esteiras de bagagem, os caminhões de combustível, etc. Tais agentes se comunicam tentando atingir seus objetivos com a ajuda de outros (o avião solicita abastecimento aos caminhões, e estes negociam com os aviões segundo proximidade, tempo para partida, etc). O sistema é executado juntamente com o sistema oficial (feito em orientação a objetos) porque ainda não há confiança no comportamento emergente desse paradigma (e se o agente em um avião decidir por decolar porque achou que era o melhor a fazer para alcançar seu objetivo, mas ignorou outros objetivos importantes externos, como segurança de outros aviões na pista?).
  • um sistema que foi construído de forma a utilizar agentes para identificar e validar, em imagens de otólitos de peixes (otólitos são concreções de carbonato de cálcio presentes no aparelho vestibular do ouvido interno dos vertebrados e que contêm anéis indicativos da idade estimada de um animal) anéis concêntricos alternados em intensidades claras e escuras e de formato e de largura variáveis. Os anéis servem para estimar a idade do peixe. Os agentes são especializados em anéis claros e escuros, e observam a intensidade da área angular à frente e a proximidade a outros agentes para se moverem e seguir os anéis. Um anel é validado se um agente consegue retornar ao seu ponto de partida.

Apesar de ser mais usado na área acadêmica, esse paradigma já está bem mais popular hoje do que há alguns anos. As mais notáveis são a CommonKADS e a GAIA.

Também existem inúmeros arcabouços (frameworks) e linguagens para auxiliar no desenvolvimento de sistemas orientados a agentes. Exemplos notáveis são o JADE, o Jadex, e o Jason em Java, e o CAF em C++. 

Compartilhe.

PinIt
Top
%d blogueiros gostam disto: