• Nenhum resultado encontrado

A evolução dos softwares e hardwares, acompanhada do surgimento de novos meios de coleta de dados através de uso de sensores, vem exigindo novas formas de abstrações de software que se aproximem mais dos objetos reais, tanto em comportamento, quanto em autonomia e interação com o usuário (SUN; LI; XIE, 2013; RUSSELL; DOYLE; COLLIER, 2018). O projeto de agentes de software traz esta nova forma de abstrair objetos do mundo real, permitindo que o software se comporte de forma autônoma e tome decisões sem a necessidade da intervenção direta do usuário (JEZIC et al., 2018).

Russell et al. (2014) definem um agente como qualquer coisa que observa o ambiente a que está inserido, por meio de sensores e executa ações sobre este ambiente através de seus atuadores. A Figura 2.12 mostra a representação de um modelo de agente criado por Russell et al. (2014).

Figura 2.12 – Modelo conceitual de um agente.

Fonte: Oocities.org (2018).

24 https://docs.microsoft.com/pt-br/xamarin/pivot=platformspanel=XamarinForms 25 https://docs.microsoft.com/pt-br/xamarin/android/

Como mostra a Figura 2.12, o agente percebe as mudanças que ocorrem em seu ambiente através dos sensores, se alguma percepção estiver mapeada à alguma ação, os atuadores executam esta ação que modifica o seu ambiente. Russell et al. (2014) assemelham o ser humano a um agente, devido ao fato de que este possui olhos, ouvidos e nariz que são os sensores, enquanto que suas mãos, pés, boca e outras partes do corpo, são os seus atuadores. O ser humano age de acordo com as percepções que são capturadas pelos seus sensores, que por vez modifica o ambiente através dos seus órgãos atuadores. Agentes robóticos podem usar câmeras como sensores e motores como atuadores. Um agente de software pode perceber o ambiente através de strings e agir por meio delas.

Leitão e Karnouskos (2015) conceituam um agente como uma entidade computacional autônoma, solucionadora de problemas e orientada a objetivos, com habilidades sociais que são capazes de atuar, seja de forma proativa ou não, sobre um ambiente dinâmico e aberto, no sentido de observar e agir para alcançar os seus objetivos.

Já Belghiat et al. (2016) consideram um agente como uma entidade de software que executa tarefas em nome de alguém (uma pessoa), organização ou outro agente, com alguma autonomia, isto é, suas ações podem não ser somente determinadas por eventos externos ou interações, mas também por sua própria motivação.

Tomando como base os conceitos citados anteriormente, um agente de software é um programa projetado sobre uma arquitetura que lhe permita perceber mudanças em um ambiente computacional, com uma certa autonomia, com base em objetivos que são mapeados em ações. Estas ações são executadas por meio de atuadores que podem ser componentes físicos ou virtuais.

2.6.1

Tipos de Agentes de Software

Segundo Leitão e Karnouskos (2015), os agentes podem ser classificados quanto ao nível de autonomia e inteligência que é empregado em sua construção, que vai de agentes reativos até os agentes deliberativos.

Os agentes deliberativos são aqueles que aplicam os conceitos de representação simbólica com semânticas compostas, como por exemplo, uso de árvore de dados. Sua arquitetura costuma ser mais complexa, pois ele não somente age sobre os fatos, como também, gera teorias e analisa o passado para obter a melhor forma de resolução de um problema. O seu ponto fraco baseia - se nas consequências naturais do seu comportamento, que são o alto consumo de recursos, lentidão na tomada de decisões e alta complexidade do projeto (LEITÃO; KARNOUSKOS, 2015).

Já os agentes reativos possuem uma arquitetura mais simples por não precisar de estrutu- ras complexas de raciocínio. Sua performance é maior e não consome tantos recursos como os agentes deliberados. Esta maior performance se deve ao modelo de decisão que é feito através de uma simples associação entre uma situação e uma ação, normalmente implementados por

um padrão de Mapping. Em contrapartida, não são flexíveis e dinâmicos na resolução de proble- mas desconhecidos, como também, não são proativos e dificilmente são orientados a objetivos (LEITÃO; KARNOUSKOS, 2015).

Quanto a forma de construção da arquitetura de um programa agente, segundo Russell et al. (2014), ele pode ser construído de quatro formas diferentes:

• Agentes Simples Reflexivos: neste tipo de arquitetura o agente possui os componentes básicos necessários para o seu funcionamento. Ele mapeia as percepções às ações por meio de estruturas simples de decisão. Se utiliza apenas de sensores, atuadores e uma estrutura de decisão simples;

• Agentes Reflexivos com Estados: esta arquitetura é projetada para manter o estado do ambiente após a execução de uma ação sobre o ambiente. Este modelo é ideal para agentes que precisam fornecer ações em ambientes instáveis. Além dos sensores, atuadores e estrutura de decisão, é também implantado um componente que armazena os estados do ambiente;

• Agentes Reflexivos com Objetivos: este modelo é a evolução de um Agente Refle- xivo com estado que se preocupa com as consequências de suas ações e possui um componente que reúne os objetivos do agente;

• Agentes baseados em Utilitários: esta arquitetura adiciona um componente de Utili- dade ao modelo de arquitetura de um Agente Reflexivo com Objetivos. Este compo- nente define um valor de prioridade para auxiliar na escolha do melhor objetivo para o agente.

Neste trabalho foi criado uma assistente virtual através da construção de um agente de software reativo, que agrupa os componentes presentes em um modelo de Agente Reflexivo com Estados.

Documentos relacionados