Agentes Inteligentes: Uma Abordagem Prática com o Java Agent Development Framework



Documentos relacionados
Implementando uma Classe e Criando Objetos a partir dela

Especificação do 3º Trabalho

Agentes - Definição. Inteligência Artificial. Agentes Inteligentes

Programação para Android. Aula 06: Activity, menus e action bar

Inteligência Artificial (SI 214) Aula 2 Agentes Inteligentes

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE PÓS-GRADUAÇÃO EM SISTEMAS E COMPUTAÇÃO TÓPICOS AVANÇADOS EM SISTEMAS INTEGRADOS E DISTRIBUÍDOS II

Programação por Objectos. Java

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Java 2 Standard Edition Como criar classes e objetos

Módulo 07 Características Avançadas de Classes

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

DEFINIÇÃO DE MÉTODOS

4 O Workflow e a Máquina de Regras

Governança de TI. ITIL v.2&3. parte 1

Projeto de Software Orientado a Objeto

Linguagem de Programação III

INF INTELIGÊNCIA ARTIFICIAL TRABALHO 2 LÓGICA

Programação para Android. Aula 10: Acesso a câmera, sms e recursos do aparelho

Documentação Usando o Javadoc

Programação de Computadores - I. Profª Beatriz Profº Israel

Módulo 5 JPATransaction Camadas Turma Turma TurmaBC TurmaBC TurmaBC TurmaBC

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

COMO FAZER A TRANSIÇÃO

Introdução à orientação a objetos. João Tito Almeida Vianna 25/05/2013

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

5 Framework para coordenação e mediação de Web Services para ambientes de aprendizado à distância

Desenvolvimento de aplicação web com framework JavaServer Faces e Hibernate

INF INTELIGÊNCIA ARTIFICIAL TRABALHO 2 LÓGICA

Itens estruturais/caso de uso. Itens estruturais/classe ativa. Itens estruturais/componente. Itens estruturais/artefatos. Itens comportamentais

Guia de Fatores de Qualidade de OO e Java

Criando uma agenda simples com NetBeans 6.5

Curso: Desenvolvendo Jogos 2d Com C# E Microsoft XNA. Mostrar como funciona a programação orientada a objetos

UML Aspectos de projetos em Diagramas de classes

e-commerce: 13 maneiras de aumentar a conversão

Sistema Tutor Inteligente baseado em Agentes. Pedagógicas da Universidade Aberta do Piauí. Prof. Dr. Vinicius Ponte Machado

RUP. Evolução. Principais Características do RUP. Principais Características do RUP RUP

INF 1771 Inteligência Artificial

Capítulo 8. Introdução UML

THREADS EM JAVA. George Gomes Cabral

Algoritmos e Estruturas de Dados II. Trabalho Prático 2

Omega Tecnologia Manual Omega Hosting

Manual de Utilização

Programação Orientada a Objetos (DPADF 0063)

Metodologia e Gerenciamento do Projeto na Fábrica de Software v.2

www. inf.br Outubro/2008 5www.habisp.inf.br TREINAMENTO HABISP VERBA DE ATENDIMENTO

sobre rogério gonçalves gerente de projetos > digitale agência digital rogerio@digitale.com.br h7p:// h7p://leveme.

Demoiselle Report Guide. Demoiselle Report. Marlon Carvalho. Rodrigo Hjort. Robson Ximenes

TCC04040 Inteligência Artificial. Inteligência Artificial

ARTIGO CIENTÍFICO. O artigo científico pode ser entendido como um trabalho completo em si mesmo, mas possui dimensão reduzida.

Java. Marcio de Carvalho Victorino

2 Diagrama de Caso de Uso

WebWork 2. João Carlos Pinheiro.

PASSO A PASSO LOJA VIRTUAL. 1º Passo Acessar o site do Bom Jesus (

Software. Gerenciamento de Manutenção

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Programação Concorrente em java - Exercícios Práticos Abril 2004

PLANEJAMENTO DA MANUFATURA

Programação Orientada a Objetos (DPADF 0063)

5 Equacionando os problemas

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

Aula 06 Usando controles em ASP.NET

3 Classes e instanciação de objectos (em Java)

Engenharia de Software III

Manual do Módulo de PC Online

Análise e Projeto Orientados por Objetos

Prototype, um Design Patterns de Criação

MANUAL DE UTILIZAÇÃO Aplicativo Controle de Estoque Desktop

GARANTIA DA QUALIDADE DE SOFTWARE

Problemas em vender? Veja algumas dicas rápidas e práticas para aumentar suas vendas usando marketing

SISTEMA DE GERENCIAMENTO DE PROJETOS - REDMINE MANUAL DE USO

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

Design 3D. Formação em Web WEB DESIGN 3D 1

- Versão 1.0 Página 1

ProgramaTchê Programação OO com PHP

O modelo unificado de processo. O Rational Unified Process, RUP.

HCT Compatibilidade Manual do Usuário

Tutorial. Começando a Criar Aplicativos SMS

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Prof. Esp. Adriano Carvalho

W Projeto. Gerenciamento. Construindo a WBS e gerando o Cronograma. Autor: Antonio Augusto Camargos, PMP 1/12

Tutorial para criação de componentes JSF Facelets Por Érico GR 07/08/2007

Estacionamento de Caminhão com Lógica Fuzzy. Daniel Ricardo dos Santos Diogo de Campos Maurício Oliveira Haensch

Procedimentos para configurar o Motion Detection no D-ViewCam 1 Para configurar o Motion Detection no D-ViewCam, é necessário que a câmera IP esteja

Unidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça Prática 01

2. Sistemas Multi-Agentes (Multi-Agent System - MAS)

Manual de Acesso ao Sistema SAORI Portal do Aluno

Programas eram lineares e com poucos módulos (Programação estruturada) Aumento da complexidade dos sistemas e difícil reusabilidade dos mesmos

2ª LISTA DE EXERCÍCIOS CLASSES E JAVA Disciplina: PC-II. public double getgeracaoatual() {return geracaoatual;}

INSTRUMENTO NORMATIVO 004 IN004

Herança. Alberto Costa Neto DComp - UFS

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

NetBeans. Conhecendo um pouco da IDE

public void setdata(data d) { data = d;

Transcrição:

Agentes Inteligentes: Uma Abordagem Prática com o Java Agent Development Framework Daniel Abella Cavalcante Mendonça de Souza daniel@abella.com.br Capítulo 1. Introdução Segundo Russel e Norvig [1], um Agente é tudo o que pode ser considerado capaz de perceber seu ambiente por meio de sensores e agir sobre este ambiente por intermédio de atuadores. Este conceito é ilustrado a seguir. Ilustração 1: Arquitetura básica de um Agente Termos Utilizados O termo percepção se refere às entradas perceptivas do agente em um dado momento, enquanto que, temos uma seqüência de percepções, que diz respeito à história completa de tudo o que o agente já percebeu. Esta distinção entre os termos apresentados é necessária, pois, a escolha de uma ação a ser realizada pelos atuadores do Agente, pode depender da seqüência inteira de percepções observadas até o momento. Em termos matemáticos, afirmamos que o comportamento do agente é descrito pela função de agente, que mapeia qualquer seqüência de percepções a uma dada ação. Função de Agente x Programa de Agente O mapeamento descrito anteriormente na função agente é comumente relacionado a uma tabela, que é infinita, a menos que seja definido um limite sobre a quantidade de percepções que devemos considerar. Entretanto, esta tabela é apenas uma

caracterização externa do agente. Internamente, a função de agente é implementada por um programa de agente. Em resumo, a função de agente é uma descrição matemática abstrata; o programa de agente é uma implementação concreta, relacionada à arquitetura do agente. Aplicação Na próxima seção, é apresentada como pode ser desenvolvido um Agente conforme o conceito de Russel e Norvig [1]. 1.1 Implementação de um Agente by Russel Para o desenvolvimento de um Agente Inteligente conforme a definição de Russel será utilizada a linguagem Java e o framework Java Agent Development Framework Jade [2]. Caso o leitor não tenha conhecimento sobre a configuração do ambiente para execução de Agentes ou desconheça conceitos básicos sobre este framework, devem ser consultados respectivamente os apêndices A e B. Então, Are you ready? 1.1.1 Prática O primeiro passo para a construção de um Agente conforme a definição de Russel e Norvig, é definir o(s) seu(s) atuador(es) e sensor(es). Em termos de implementação, cada atuador ou sensor presente no agente, significará a criação de um novo Behavior. Iniciaremos pela construção do Sensor do agente intitulado Russel. Sensor Para o exemplo apresentado aqui, projetaremos um agente que perceberá o seu ambiente periodicamente. As ações que o agente realizará durante a percepção do agente é algo que deve corresponder à finalidade do agente. Por exemplo, em um agente intitulado SubmarinoProducts, que atua no oferecimento de produtos ao consumidor, pode constantemente monitorar as ações do usuário no e-commerce, e atualizar no banco de dados as ações do usuário, algo como o apresentado no Quadro 1. Em contrapartida, o atuador deste agente

consultaria esta tabela no banco de dados e realizaria uma oferta baseada na quantidade de acessos. Usuário Página Quantidade de Acessos daniel.abella eshop.com/notebook 3000 daniel.abella eshop.com/palmtop 1400 daniel.abella eshop.com/books 13 Quadro 1: Relação de acesso ao usuário Daniel Abella Neste momento, temos que definir se criaremos um comportamento próprio para o sensor (isto é, uma subclasse de SimplerBehavior) ou utilizaremos como base algum dos behaviors disponibilizados pelo framework Jade (por exemplo, CyclicBehavior, TickerBehavior, entre muitos outros). Conforme dito anteriormente, o sensor perceberá o ambiente periodicamente, logo pode ser utilizado como base o comportamento TickerBehavior, disponibilizado pelo framework. Este comportamento permite que o behavior seja chamado de acordo com a periodicidade informada pelo agente (em milisegundos). O código fonte referente ao sensor é apresentado na seqüência. Classe Sensor import jade.core.agent; import jade.core.behaviours.tickerbehaviour; public class Sensor extends TickerBehaviour { public Sensor(Agent agente, long tempo){ super(agente,tempo); protected void ontick(){ //Aqui, voce deve fornecer a implementacao do seu sensor System.out.println("Agente percebendo o ambiente"); //Depois de perceber o ambiente, é designado um Atuador para atuar no ambiente myagent.addbehaviour(new Atuador()); No código fonte apresentado anteriormente, não temos nenhuma percepção do ambiente de fato, apenas a impressão da frase Agente percebendo o ambiente. Ao fim da percepção, é incluído um Atuador que poderá atuar sobre o ambiente. Em substituição a impressão da frase Agente percebendo o ambiente poderíamos ter implementado o comportamento descrito no Quadro 1. Um pseudocódigo que ilustra este cenário é apresentado a seguir.

Classe Sensor import jade.core.agent; import jade.core.behaviours.tickerbehaviour; public class Sensor extends TickerBehaviour { public Sensor(Agent agente, long tempo){ super(agente,tempo); protected void ontick(){ String usuarioverificado = obterusuarioautenticado(); String acaousuario = obteracaousuario(usuarioverificado); gravarbancodedados(usuarioverificado,acaousuario); myagent.addbehaviour(new Atuador()); private void gravarbancodedados(string usuarioverificado, String acaousuario) { private String obteracaousuario(string usuarioverificado) {return null; private String obterusuarioautenticado() {return null; Atuador Após a definição do Sensor, trataremos nesta subseção a definição do atuador. Conforme apresentado nos códigos fonte anteriormente, o atuador estava sempre sendo chamado após a realização da atividade do sensor (note que, é sempre colocado no final do método ontick). Baseado nisto, tem-se que o Atuador deve ser chamado apenas uma vez. Isto se deve ao fato que, como o Sensor é chamado periodicamente e este último, por sua vez, sempre realizada a chamada do Atuador. Em momento simular durante o desenvolvimento do Sensor, temos que definir se criaremos um comportamento próprio para o atuador (isto é, uma subclasse de SimplerBehavior) ou utilizaremos como base algum dos behaviors disponibilizados pelo framework Jade (por exemplo, CyclicBehavior, TickerBehavior, entre muitos outros). Neste sentido, o OneShortBehavior pode ser utilizado, pois este implementa um comportamento atômico que é executado uma vez. É apresentado a seguir o código fonte referente ao atuador. Neste exemplo, não temos nenhuma atuação de fato, apenas a impressão da frase Agente Russel atuando no ambiente. Após isto, o método removebehavior é chamado. Este método faz com que o behavior informado como argumento seja removido da execução. Logo,

quando temos a chamada da forma removebehavior(this) estamos pedindo para que o próprio Atuador acabe com a sua execução. Classe Atuador import jade.core.behaviours.oneshotbehaviour; public class Atuador extends OneShotBehaviour{ public void action() { System.out.println("Agente Russel atuando no ambiente"); myagent.removebehaviour(this); Em contrapartida ao realizado durante a apresentação do Sensor, é apresentado abaixo o pseudocódigo para um Atuador que representaria o comportamento descrito no Quadro 1. Classe Atuador import jade.core.behaviours.oneshotbehaviour; public class Atuador extends OneShotBehaviour{ public void action() { String usuarioverificado = obterusuarioautenticado(); String secaomaisacessadapelousuario = obtersecaomaisacessadapelousuario(usuarioverificado); String paginaofertassessao = obterofertasdasessao(secaomaisacessadapelousuario); enviaremailusuario(paginaofertassessao); myagent.removebehaviour(this); private void enviaremailusuario(string paginaofertassessao) { private String obterofertasdasessao(string secaomaisacessadapelousuario) {return null; private String obtersecaomaisacessadapelousuario(string usuarioverificado) {return null; private String obterusuarioautenticado() {return null;

Vídeo Aula e Código Fonte Para melhor compreensão do abordado até este momento, é disponibilizado no site da disciplina uma vídeo-aula que demonstra a criação do Agente Russel. Além disto, é disponibilizado o código fonte produzido. Apêndice A. Configuração do Ambiente para Desenvolvimento de Agentes Inteligentes com o Java Agent Development Framework A ser incluído. Apêndice B. Conceitos básicos sobre o Java Agent Development Framework A ser incluído.