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

Mostraremos neste artigo um exemplo de como realizar o cadastro de uma Issue em um projeto existente no portal Java.net.

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

KNOW MORE, ACT BETTER

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

02. O software ainda permite instalar a barra de ferramentas do Google como recurso extra. Faça a escolha desejada e continue a instalação.

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

3 Multi-Agent System for Stock Exchange Simulation

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.