SlideShare uma empresa Scribd logo
Notas de estudo sobre
User-Defined Components
por
Nécio de Lima Veras
Objetivo
Estes slides objetivam documentar um estudo
sobre a programação de agentes em sistemas
multi-agentes, especificamente, o capítulo 7
(componentes definidos pelo usuário) do livro
Programming Multi-Agent Systems in
AgentSpeak Using Jason. A ideia é investigar
as formas de implementar arquiteturas
(diferentes à BDI) de agentes no Jason.
Introdução do capítulo
●

●

Jason é distribuído com um conjunto de funcionalidade
para desenvolvimento de Agentes;
No entanto, desenvolvedores sempre necessitam de
requisitos específicos em seus sistemas, tais como:
–

Acesso à base de dados;

–

Integração com sistemas legados;

–

Interfaces gráficas;

–

Capacidades e percepções personalizadas de agentes;

–

Manipulação de intenções especiais;

–

Muitos outros.....
Introdução do capítulo
●

●

●

●

Para atender a essas especificidades uma abordagem baseada em
extensibilidade foi adotada no projeto Jason;
Como o próprio Jason é escrito em Java, então essas extensões
envolvem também a linguagem Java;
É possível desenvolver agentes com uma linguagem totalmente
declarativa (AgentSpeak) e também estender a linguagem com
bibliotecas e componentes criados usando o paradigma tradicional
da OO;
Novos comandos podem ser adicionados à linguagem por meio de
ações internas e diversos componentes (ambos escritos em Java)
do interpretador podem ser personalizados;
–

Para isso, existe uma API disponível;
Introdução do capítulo
●

Há dois motivos para a criação de ação interna:
–

–

●

Ampliar as capacidades internas do Agentes (quando a OO for
mais cabível do que o paradigma do AgentSpeak);
Permitir que seja usado código legado já programado em Java
ou em outras linguagens (acessíveis por meio do JNI – Java
Native Interface);

Existem algumas ações (padrão) internas no Jason, tais como:
–
–

.send

–

.my_name

–
●

.print

Uma lista completa está no apêndice A.3 do livro.

Além disso é possível também personalizar e estender diferentes
componentes do interpretador;
Definindo uma nova ação interna
●

●

●

Ações internas definidas pelo usuário podem ser
organizadas em bibliotecas específicas;
Em AgentSpeak, uma AI é acessada pelo nome da
biblioteca seguido por um “.” e pelo nome da ação;
Exemplo:
–

Uma nova AI chamada de distance dentro de uma
biblioteca chamada math pode ser usada tanto no
contexto ou no corpo de um plano do código
AgentSpeak;
Definindo uma nova ação interna
●

●

Bibliotecas são definidas como packages em
Java e cada AI é uma classe Java dentro do
pacote;
Lembre-se que em AgentSpeak
identificadores que iniciam com letras
maiúsculas indicam variáveis;
–

Por isso nomes de bibliotecas e de ações internas
em Java devem iniciar com letras minúsculas
já que serão usadas no AgentSpeak;
Mesmo sendo um
antipadrão OO
Definindo uma nova ação interna
●

●

Todas as classes que definem uma AI deve implementar a
interface InternalAction;
Existe uma implementação padrão desta interface que
simplifica a criação de novas AI chamada de
DefaultInternalAction;
Definindo uma nova ação interna
●

Exemplo:
Definindo uma nova ação interna
●

Entendendo o exemplo:
–

O método sobrescrito execute é chamado pelo interpretador
AgentSpeak para executar a AI;

–

O argumento ts contém todas as informações sobre o estado
atual do agente;

–

O segundo (un) é uma função unificadora que é determinado
pela execução do plano onde a AI apareceu (ou a checagem
se o plano é aplicável);
●
●

–

Isso depende se a AI surgiu no contexto ou em um plano;
Essa função unificadora é importante para o caso do valor ligado a
variáveis AgentSpeak for necessário para a implementação da AI;

O terceiro é um array de termos e contém os argumentos
passados para a AI pelo usuário no código AgentSpeak que
chama a AI;
Definindo uma nova ação interna
●

O segundo método de DefaultInternalAction
–

Chamado de suspendIntention
●

Deve retornar true quando a AI causar uma suspensão
do estado da intenção, assim como
–

●

.at e também .send com askOne como performativa;

Por padrão o método retorna false;

–

O usuário precisa garantir que a intenção será
retomada quando for o caso (se o método
suspendIntention for sobrescrito);

–

O código Java para execução da ação interna
math.distance possui três etapas:
Passo 1:
● obter as referências dos parâmetros

Passo 2:
● Realizar os cálculos

Passo 3:
● Organizar, unificar e retornar os
resultados
Definindo uma nova ação interna
●

●

Para o caso da AI ter sido usada no contexto
do plano retornar falso significa que o plano
não é aplicável;
Quando usado em um corpo de um plano,
retornar falso irá causar uma falha no plano;
Exemplo alternativo (um bingo!)
●

●

Existe um ambiente (Cartago) será um “bingo” onde números serão
sorteados depois de X cartelas “vendidas”;
Existem dois agentes: um proprietário (owner) e um jogador (player);
–

O owner cria o artefato “Bingo” e monitora-o a fim de perceber se as X
cartelas foram vendidas. Feito isso, ele realiza uma operação no
ambiente para iniciar o sorteio;

–

O player fica “vagando” até encontrar o artefato “bingo”. Ao encontrar
realiza uma operação de “compra” para participar do sorteio. Após isso
sua função é monitorar o ambiente esperando por números sorteados
(informados por meio de sinais) e pelo final do sorteio.
●

Este possui uma internal action chamada de buildCard que fica
no pacote ias. Ela gera aleatoriamente uma cartela de N números
com um um teto T para o sorteio dos números.
Ação interna buildCard
package ias;
public class buildCard extends DefaultInternalAction{
private Set <Integer> box = new HashSet <Integer>();
@Override
public Object execute (TransitionSystem ts, Unifier un, Term[] args) throws Exception{
NumberTerm size = (NumberTerm) args[0];
NumberTerm max= (NumberTerm) args[1];
Random r = new Random();
while (box.size() < size.solve())
box.add(r.nextInt((int)max.solve()) + 1);
ListTerm result = new ListTermImpl();
for (Integer i : box){
Term t = new NumberTermImpl(i);
result.add(t);
}
return un.unifies(result, args[2]);
}
}

//tamanho da cartela
// TETO para um numero sorteado

//garantir a não repetição dos números da
cartela

//converter a cartela em um feedback para o
agente
Estrutura e planos do agente Player
/* Initial beliefs and rules */
/* Initial goals */
!participate.
/* Plans */
+!participate: true<?myArtifact (ID);
focus(ID);
sell; //buy
- adquire uma cartela
println("Comprei uma cartela ...no bingo:", ID);
Chamada para a ação interna
ias.buildCard(5, 40, Card);
.concat("Cartela:", Card,S);
println(S);
Registrando a cartela na base de crença
+myCard(Card);
Hit = 0;
Registrando o número de acertos na base de crença
+myHits(Hit).
+?myArtifact(C) : true <lookupArtifact("b0", C).
-?myArtifact(Art) : true <.wait(1000);
println("Esperando por um bingo.");
!participate.
Percepções do agente Player
//Perceptions of the signals
+status(S) : S == "sorted" & myCard(Card) & myHits(Hit) <?numSorted(V);
println("Opa, percebi um numero sorteado ... ", V);
if (.member(V, Card) ) {
+myHits(Hit+1);
println("acertei:", V, " Ate agora acertei ", Hit+1, " numero(s) em um total de ", .length(Card));
}.
+myHits(Hit) : myCard(Card) <if (Hit == .length(Card)){
print("Gaaaaaaaaaaaaaaaaaaaannnnnnnnnnnnhhhhhhhhhhheeeeeeeeiiiiiii!!");
winner;
}.
+status(S) :
S == "started" <println("Legal! Bingo inciado!").
+status(S) :
S == "stoped" <println("Ahhhh .. já acabou.").
//Percepctions of the Observable Properties
+numSorted(V).
Personalizando a classe Agente
●

Partindo do ponto de vista do interpretador AgentSpeak um
agente é:
–

Um conjunto de crenças;

–

Um conjunto de planos;

–

Algumas funções de seleção definidas pelo usuário;

–

Funções de confiança (uma relação socialmente aceitável para
mensagens recebidas);

–

A função de atualização de crença;

–

A função de revisão de crenças;

–

Elementos circunstanciais (eventos pendentes, intenções e outras
estruturas necessárias durante a interpretação de um agente em
AgentSpeak);
Personalizando a classe Agente
●

●

A implementação padrão destas funções está
na classe Agent que pode ser customizada
por desenvolvedores a fim de estender
funcionalidades básicas;
Alguns dos métodos da classe pode ser
enxergado no diagrama a seguir;
Personalizando a classe Agente
Personalizando a classe Agente
●

Métodos da classe Agent que
normalmente são
sobrescritos:
–

selectMessage
(Queue<Message> mailbox)
●

●

●

Seleciona a mensagem que será
manipulada no atual ciclo de
raciocínio;
Na implementação padrão o
método retorna e remove a
primeira mensagem na caixa do
agente;
Implementa a função SM

Recorte do ciclo de raciocínio Jason
Personalizando a classe Agente
●

Métodos da classe Agent
que normalmente são
sobrescritos:
–

selectEvent
(Queue<Event> events);

–

Seleciona o evento que será
manipulado no atual ciclo de
raciocínio;

–

A implementação padrão
remove e retorna o primeiro
evento na fila;

–

Implementa a função SE

Recorte do ciclo de raciocínio Jason
Personalizando a classe Agente
Recorte do ciclo de raciocínio Jason
●

Métodos da classe Agent que
normalmente são sobrescritos:
–

selectOption
(List<Option> options)

–

É usado para selecionar um
dentre várias opções para
manipular um evento;

–

A implementação padrão remove e
retorna a primeira opção de
acordo com a ordem de escrita
dos planos do código do agente;

–

Implementa a função S0
Personalizando a classe Agente
●

Métodos da classe Agent que
normalmente são sobrescritos:
–

selectIntention
(Queue<Intention> intentions)

–

Seleciona uma intenção para
continuar a ser executada no
atual ciclo do raciocínio;

–

A implementação padrão remove
e retorna a primeira intenção da
fila e após a execução da
intenção é inserida no final da fila
(como em um round robin)

–

Implementa a função SI

Recorte do ciclo de raciocínio Jason
Personalizando a classe Agente
●

Métodos da classe Agent que normalmente são sobrescritos:
–

socAcc(Message m)
●

Retorna true se a mensagem m é socialmente aceitável;

●

A implementação padrão retorna true para todas as mensagens;

●

Se segurança for um problema, então este método deve
sobrescrito;

Caso contrário, o agente ficará suscetível a simples ataques de
DoS;
buf(List<Literal> percepts)
–

–

●
●

Atualiza a base de crenças com as percepções dadas;
Adiciona todas as alterações efetivadas como novos eventos em
um conjunto de eventos;
Personalizando a classe Agente
●

Métodos da classe Agent que normalmente são sobrescritos:
–

brf(Literal add, Literal rem, Intention i)
●

●

●

Revisa a base de crença com um literal a ser adicionado (se
houver), outra a ser removido (se houver) e a estrutura da
intenção é requerida para alterar a crença
A implementação padrão não faz nada e o método deve ser
sobrescrito ( ou seja, não há um revisor padrão de crenças em
Jason);
Retorna duas listas em uma matriz (uma com os acréscimos na
base de crença e outra com as exclusões);

As listas podem ser úteis para gerar eventos relevantes;
É importante enfatizar que a função de atualização de crença em
Jason apenas atualiza a base de crenças e gera eventos externos de
acordo com as percepções atuais;
–

●

–

Ela NÃO garante consistência de crença;
Personalizando a classe Agente
●

A implementação padrão da função de
atualização da base de crença funciona da
seguinte forma:
Conjunto de todos os literais atualmente na
base de crença
Lista das percepções atuais recebidas

Conjunto de eventos
Um primeiro exemplo de
personalização da classe Agent
●

Vamos mudar a função de seleção de eventos do robô aspirador de
pó (descrito no cap. 5);
–

●

●

Agora, ela priorizará eventos criados quando a sujeira é percebida;

A fila de eventos possui eventos criados a partir das percepções
(sujo; pos(r); pos(l)) e ações internas criadas por intenções;
O método passa por todos os eventos da fila e verifica se o gatilho
é igual a sujo (dirty)
–

–

●

Se for, a função remove da fila e retorna esse como único a ser tratado
no atual ciclo de raciocínio;
Se não, ele invoca a implementação padrão (que retorna o evento no
início da fila);

A seguir a implementação …....
Gatilho de uma percepção de sujeira

Retorna o comportamento padrão
Um primeiro exemplo de
personalização da classe Agent
●

Lembrando que o arquivo de configuração
deve associar os agentes oriundos dessa
nova classe da seguinte forma:

Nossa classe
Um segundo exemplo...
●

Suponha que queremos indicar no código AgentSpeak de um agente
que uma intenção deve ser selecionada apenas quando não há mais
nada a fazer;
–

●

Vamos chamar essa intenção de “the idle intention”;

Assim, o agente deve:
–
–

●

Selecionar a intenção ociosa somente se for a única intenção do agente;
Ou seja, enquanto o agente possui muitos focos simultâneos então a
intenção ociosa jamais deve ser selecionada;

Para marcar uma intenção como ociosa, um programador deve
adicionar uma anotação “idle” em um rótulo de plano que irá
formar a intenção;
–

●

Quando este plano se torna a intenção significa que toda a intenção tornase “idle”;

O código a seguir mostra a implementação da função Si
Considere o seguinte agente:

A saída seria:

Perceba que as duas intenções são executadas
concorrentemente.
Se adicionarmos uma anotação rotulando o “idle” no
último plano da seguinte forma:

Teremos então a seguinte saída:
Conclusões sobre a personalização
da classe Agent
●

●

Percebemos que é possível estender o Jason com
novas funcionalidades (como a intenção ociosa);
No entanto, vale enfatizar que ajustes nas funções de
seleção são perigosos, pois emergem problemas
típicos da programação concorrente como o
starvation de intenções ou eventos;
–

●

Estes devem ser feitos com muito cuidado;

Por outro lado, de qualquer maneira, na prática os
agentes podem precisar morrer por inanição de
eventos se o ambiente for bastante dinâmico;
Referência
●

Bordini, R. H., Hübner, J. F., and Wooldridge, M. 2007. Programming
Multi-Agent Systems in AgentSpeak Using Jason. John Wiley & Sons,
Ltd.

Mais conteúdo relacionado

Mais procurados

Java13
Java13Java13
Introdução ao JavaFX
Introdução ao JavaFXIntrodução ao JavaFX
Introdução ao JavaFX
Nécio de Lima Veras
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
Natanael Fonseca
 
Java11
Java11Java11
Java 14
Java 14Java 14
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
Marconi Rodrigues
 
Java7
Java7Java7
Java6
Java6Java6
Java8
Java8Java8
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
Denis L Presciliano
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
JoseHenrique Joanoni
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
Mario Jorge Pereira
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
Diego Pacheco
 
Aula5
Aula5Aula5
Aula5
softeam
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
Jamildo Feitosa
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
Tony Alexander Hild
 
Linguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasLinguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e Técnicas
Breno Vitorino
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Adriano Teixeira de Souza
 
Aula05
Aula05Aula05
Fundamentos de Objetos Remotos
Fundamentos de Objetos RemotosFundamentos de Objetos Remotos
Fundamentos de Objetos Remotos
Denis L Presciliano
 

Mais procurados (20)

Java13
Java13Java13
Java13
 
Introdução ao JavaFX
Introdução ao JavaFXIntrodução ao JavaFX
Introdução ao JavaFX
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
 
Java11
Java11Java11
Java11
 
Java 14
Java 14Java 14
Java 14
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
Java7
Java7Java7
Java7
 
Java6
Java6Java6
Java6
 
Java8
Java8Java8
Java8
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
Aula5
Aula5Aula5
Aula5
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Linguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasLinguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e Técnicas
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Aula05
Aula05Aula05
Aula05
 
Fundamentos de Objetos Remotos
Fundamentos de Objetos RemotosFundamentos de Objetos Remotos
Fundamentos de Objetos Remotos
 

Destaque

Ambientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesAmbientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentes
Nécio de Lima Veras
 
Agentes inteligentes com jason
Agentes inteligentes com jasonAgentes inteligentes com jason
Agentes inteligentes com jason
Nécio de Lima Veras
 
Teste de software
Teste de softwareTeste de software
Teste de software
Nécio de Lima Veras
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de Software
Nécio de Lima Veras
 
Uma Introdução a Engenharia de Software
Uma Introdução a Engenharia de SoftwareUma Introdução a Engenharia de Software
Uma Introdução a Engenharia de Software
Vinicius Garcia
 
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Sérgio Souza Costa
 

Destaque (6)

Ambientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesAmbientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentes
 
Agentes inteligentes com jason
Agentes inteligentes com jasonAgentes inteligentes com jason
Agentes inteligentes com jason
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de Software
 
Uma Introdução a Engenharia de Software
Uma Introdução a Engenharia de SoftwareUma Introdução a Engenharia de Software
Uma Introdução a Engenharia de Software
 
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
 

Semelhante a Jason: Componentes personalizados

(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
Carlos Santos
 
Código Limpo
Código LimpoCódigo Limpo
Código Limpo
nsitechtalks
 
T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)
Carlos Santos
 
Aula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptxAula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptx
ItamarGoncalves2
 
Python Interface Gráfica Tkinter
Python Interface Gráfica TkinterPython Interface Gráfica Tkinter
Python Interface Gráfica Tkinter
antonio sérgio nogueira
 
CURSO JAVA 02
CURSO JAVA 02CURSO JAVA 02
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
Julio Cesar Eiras Melanda
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
Gabriel Moura
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em C
Elaine Cecília Gatto
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de Controle
Adriano Teixeira de Souza
 
FC-Logic
FC-LogicFC-Logic
FC-Logic
guest119e7e
 
React js
React js React js
React js
Alexandre Rosa
 
LabMM3 - Aula teórica 08
LabMM3 - Aula teórica 08LabMM3 - Aula teórica 08
LabMM3 - Aula teórica 08
Carlos Santos
 
Plano de Projeto de Software do​ Residents Control
Plano de Projeto de Software do​ Residents ControlPlano de Projeto de Software do​ Residents Control
Plano de Projeto de Software do​ Residents Control
azarael2607
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
diogoa21
 
Algoritmos Aula 03
Algoritmos Aula 03Algoritmos Aula 03
Algoritmos Aula 03
IBTA Turma de TI 2009
 
ava facul uva unijorge (146).pdf
ava facul uva unijorge (146).pdfava facul uva unijorge (146).pdf
Funções inline e Recursivas
Funções inline e RecursivasFunções inline e Recursivas
Funções inline e Recursivas
Kadzuwa Kuyeri
 
Mini Curso Python
Mini Curso PythonMini Curso Python
Mini Curso Python
armandoroque
 
TESTE
TESTETESTE

Semelhante a Jason: Componentes personalizados (20)

(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
 
Código Limpo
Código LimpoCódigo Limpo
Código Limpo
 
T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)
 
Aula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptxAula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptx
 
Python Interface Gráfica Tkinter
Python Interface Gráfica TkinterPython Interface Gráfica Tkinter
Python Interface Gráfica Tkinter
 
CURSO JAVA 02
CURSO JAVA 02CURSO JAVA 02
CURSO JAVA 02
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em C
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de Controle
 
FC-Logic
FC-LogicFC-Logic
FC-Logic
 
React js
React js React js
React js
 
LabMM3 - Aula teórica 08
LabMM3 - Aula teórica 08LabMM3 - Aula teórica 08
LabMM3 - Aula teórica 08
 
Plano de Projeto de Software do​ Residents Control
Plano de Projeto de Software do​ Residents ControlPlano de Projeto de Software do​ Residents Control
Plano de Projeto de Software do​ Residents Control
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
Algoritmos Aula 03
Algoritmos Aula 03Algoritmos Aula 03
Algoritmos Aula 03
 
ava facul uva unijorge (146).pdf
ava facul uva unijorge (146).pdfava facul uva unijorge (146).pdf
ava facul uva unijorge (146).pdf
 
Funções inline e Recursivas
Funções inline e RecursivasFunções inline e Recursivas
Funções inline e Recursivas
 
Mini Curso Python
Mini Curso PythonMini Curso Python
Mini Curso Python
 
TESTE
TESTETESTE
TESTE
 

Mais de Nécio de Lima Veras

Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmos
Nécio de Lima Veras
 
Versionamento com git
Versionamento com gitVersionamento com git
Versionamento com git
Nécio de Lima Veras
 
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Nécio de Lima Veras
 
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMoIntrodução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
Nécio de Lima Veras
 
Arquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsArquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agents
Nécio de Lima Veras
 
Revisão de matemática
Revisão de matemáticaRevisão de matemática
Revisão de matemática
Nécio de Lima Veras
 
Especificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesEspecificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentes
Nécio de Lima Veras
 
Notas sobre agentes inteligentes
Notas sobre agentes inteligentesNotas sobre agentes inteligentes
Notas sobre agentes inteligentes
Nécio de Lima Veras
 
Anotações do mapeamento OR
Anotações do mapeamento ORAnotações do mapeamento OR
Anotações do mapeamento OR
Nécio de Lima Veras
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
Nécio de Lima Veras
 
Mapeamento de herança OR
Mapeamento de herança ORMapeamento de herança OR
Mapeamento de herança OR
Nécio de Lima Veras
 
Relacionamentos do mapeamento OR
Relacionamentos do mapeamento ORRelacionamentos do mapeamento OR
Relacionamentos do mapeamento OR
Nécio de Lima Veras
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
Nécio de Lima Veras
 
Introdução à linguagem UML
Introdução à linguagem UMLIntrodução à linguagem UML
Introdução à linguagem UML
Nécio de Lima Veras
 
Introdução aos Sistemas operacionais
Introdução aos Sistemas operacionaisIntrodução aos Sistemas operacionais
Introdução aos Sistemas operacionais
Nécio de Lima Veras
 
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
Nécio de Lima Veras
 
Classes abstratas e interfaces
Classes abstratas e interfacesClasses abstratas e interfaces
Classes abstratas e interfaces
Nécio de Lima Veras
 
Desenvolvimento ágil de software
Desenvolvimento ágil de softwareDesenvolvimento ágil de software
Desenvolvimento ágil de software
Nécio de Lima Veras
 
Internet: conceitos e segurança
Internet: conceitos e segurançaInternet: conceitos e segurança
Internet: conceitos e segurança
Nécio de Lima Veras
 
Conceitos básicos de usabilidade e acessibilidade
Conceitos básicos de usabilidade e acessibilidadeConceitos básicos de usabilidade e acessibilidade
Conceitos básicos de usabilidade e acessibilidade
Nécio de Lima Veras
 

Mais de Nécio de Lima Veras (20)

Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmos
 
Versionamento com git
Versionamento com gitVersionamento com git
Versionamento com git
 
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
 
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMoIntrodução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
 
Arquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsArquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agents
 
Revisão de matemática
Revisão de matemáticaRevisão de matemática
Revisão de matemática
 
Especificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesEspecificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentes
 
Notas sobre agentes inteligentes
Notas sobre agentes inteligentesNotas sobre agentes inteligentes
Notas sobre agentes inteligentes
 
Anotações do mapeamento OR
Anotações do mapeamento ORAnotações do mapeamento OR
Anotações do mapeamento OR
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
 
Mapeamento de herança OR
Mapeamento de herança ORMapeamento de herança OR
Mapeamento de herança OR
 
Relacionamentos do mapeamento OR
Relacionamentos do mapeamento ORRelacionamentos do mapeamento OR
Relacionamentos do mapeamento OR
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
Introdução à linguagem UML
Introdução à linguagem UMLIntrodução à linguagem UML
Introdução à linguagem UML
 
Introdução aos Sistemas operacionais
Introdução aos Sistemas operacionaisIntrodução aos Sistemas operacionais
Introdução aos Sistemas operacionais
 
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
 
Classes abstratas e interfaces
Classes abstratas e interfacesClasses abstratas e interfaces
Classes abstratas e interfaces
 
Desenvolvimento ágil de software
Desenvolvimento ágil de softwareDesenvolvimento ágil de software
Desenvolvimento ágil de software
 
Internet: conceitos e segurança
Internet: conceitos e segurançaInternet: conceitos e segurança
Internet: conceitos e segurança
 
Conceitos básicos de usabilidade e acessibilidade
Conceitos básicos de usabilidade e acessibilidadeConceitos básicos de usabilidade e acessibilidade
Conceitos básicos de usabilidade e acessibilidade
 

Jason: Componentes personalizados

  • 1. Notas de estudo sobre User-Defined Components por Nécio de Lima Veras
  • 2. Objetivo Estes slides objetivam documentar um estudo sobre a programação de agentes em sistemas multi-agentes, especificamente, o capítulo 7 (componentes definidos pelo usuário) do livro Programming Multi-Agent Systems in AgentSpeak Using Jason. A ideia é investigar as formas de implementar arquiteturas (diferentes à BDI) de agentes no Jason.
  • 3. Introdução do capítulo ● ● Jason é distribuído com um conjunto de funcionalidade para desenvolvimento de Agentes; No entanto, desenvolvedores sempre necessitam de requisitos específicos em seus sistemas, tais como: – Acesso à base de dados; – Integração com sistemas legados; – Interfaces gráficas; – Capacidades e percepções personalizadas de agentes; – Manipulação de intenções especiais; – Muitos outros.....
  • 4. Introdução do capítulo ● ● ● ● Para atender a essas especificidades uma abordagem baseada em extensibilidade foi adotada no projeto Jason; Como o próprio Jason é escrito em Java, então essas extensões envolvem também a linguagem Java; É possível desenvolver agentes com uma linguagem totalmente declarativa (AgentSpeak) e também estender a linguagem com bibliotecas e componentes criados usando o paradigma tradicional da OO; Novos comandos podem ser adicionados à linguagem por meio de ações internas e diversos componentes (ambos escritos em Java) do interpretador podem ser personalizados; – Para isso, existe uma API disponível;
  • 5. Introdução do capítulo ● Há dois motivos para a criação de ação interna: – – ● Ampliar as capacidades internas do Agentes (quando a OO for mais cabível do que o paradigma do AgentSpeak); Permitir que seja usado código legado já programado em Java ou em outras linguagens (acessíveis por meio do JNI – Java Native Interface); Existem algumas ações (padrão) internas no Jason, tais como: – – .send – .my_name – ● .print Uma lista completa está no apêndice A.3 do livro. Além disso é possível também personalizar e estender diferentes componentes do interpretador;
  • 6. Definindo uma nova ação interna ● ● ● Ações internas definidas pelo usuário podem ser organizadas em bibliotecas específicas; Em AgentSpeak, uma AI é acessada pelo nome da biblioteca seguido por um “.” e pelo nome da ação; Exemplo: – Uma nova AI chamada de distance dentro de uma biblioteca chamada math pode ser usada tanto no contexto ou no corpo de um plano do código AgentSpeak;
  • 7. Definindo uma nova ação interna ● ● Bibliotecas são definidas como packages em Java e cada AI é uma classe Java dentro do pacote; Lembre-se que em AgentSpeak identificadores que iniciam com letras maiúsculas indicam variáveis; – Por isso nomes de bibliotecas e de ações internas em Java devem iniciar com letras minúsculas já que serão usadas no AgentSpeak; Mesmo sendo um antipadrão OO
  • 8. Definindo uma nova ação interna ● ● Todas as classes que definem uma AI deve implementar a interface InternalAction; Existe uma implementação padrão desta interface que simplifica a criação de novas AI chamada de DefaultInternalAction;
  • 9. Definindo uma nova ação interna ● Exemplo:
  • 10. Definindo uma nova ação interna ● Entendendo o exemplo: – O método sobrescrito execute é chamado pelo interpretador AgentSpeak para executar a AI; – O argumento ts contém todas as informações sobre o estado atual do agente; – O segundo (un) é uma função unificadora que é determinado pela execução do plano onde a AI apareceu (ou a checagem se o plano é aplicável); ● ● – Isso depende se a AI surgiu no contexto ou em um plano; Essa função unificadora é importante para o caso do valor ligado a variáveis AgentSpeak for necessário para a implementação da AI; O terceiro é um array de termos e contém os argumentos passados para a AI pelo usuário no código AgentSpeak que chama a AI;
  • 11. Definindo uma nova ação interna ● O segundo método de DefaultInternalAction – Chamado de suspendIntention ● Deve retornar true quando a AI causar uma suspensão do estado da intenção, assim como – ● .at e também .send com askOne como performativa; Por padrão o método retorna false; – O usuário precisa garantir que a intenção será retomada quando for o caso (se o método suspendIntention for sobrescrito); – O código Java para execução da ação interna math.distance possui três etapas:
  • 12. Passo 1: ● obter as referências dos parâmetros Passo 2: ● Realizar os cálculos Passo 3: ● Organizar, unificar e retornar os resultados
  • 13. Definindo uma nova ação interna ● ● Para o caso da AI ter sido usada no contexto do plano retornar falso significa que o plano não é aplicável; Quando usado em um corpo de um plano, retornar falso irá causar uma falha no plano;
  • 14. Exemplo alternativo (um bingo!) ● ● Existe um ambiente (Cartago) será um “bingo” onde números serão sorteados depois de X cartelas “vendidas”; Existem dois agentes: um proprietário (owner) e um jogador (player); – O owner cria o artefato “Bingo” e monitora-o a fim de perceber se as X cartelas foram vendidas. Feito isso, ele realiza uma operação no ambiente para iniciar o sorteio; – O player fica “vagando” até encontrar o artefato “bingo”. Ao encontrar realiza uma operação de “compra” para participar do sorteio. Após isso sua função é monitorar o ambiente esperando por números sorteados (informados por meio de sinais) e pelo final do sorteio. ● Este possui uma internal action chamada de buildCard que fica no pacote ias. Ela gera aleatoriamente uma cartela de N números com um um teto T para o sorteio dos números.
  • 15. Ação interna buildCard package ias; public class buildCard extends DefaultInternalAction{ private Set <Integer> box = new HashSet <Integer>(); @Override public Object execute (TransitionSystem ts, Unifier un, Term[] args) throws Exception{ NumberTerm size = (NumberTerm) args[0]; NumberTerm max= (NumberTerm) args[1]; Random r = new Random(); while (box.size() < size.solve()) box.add(r.nextInt((int)max.solve()) + 1); ListTerm result = new ListTermImpl(); for (Integer i : box){ Term t = new NumberTermImpl(i); result.add(t); } return un.unifies(result, args[2]); } } //tamanho da cartela // TETO para um numero sorteado //garantir a não repetição dos números da cartela //converter a cartela em um feedback para o agente
  • 16. Estrutura e planos do agente Player /* Initial beliefs and rules */ /* Initial goals */ !participate. /* Plans */ +!participate: true<?myArtifact (ID); focus(ID); sell; //buy - adquire uma cartela println("Comprei uma cartela ...no bingo:", ID); Chamada para a ação interna ias.buildCard(5, 40, Card); .concat("Cartela:", Card,S); println(S); Registrando a cartela na base de crença +myCard(Card); Hit = 0; Registrando o número de acertos na base de crença +myHits(Hit). +?myArtifact(C) : true <lookupArtifact("b0", C). -?myArtifact(Art) : true <.wait(1000); println("Esperando por um bingo."); !participate.
  • 17. Percepções do agente Player //Perceptions of the signals +status(S) : S == "sorted" & myCard(Card) & myHits(Hit) <?numSorted(V); println("Opa, percebi um numero sorteado ... ", V); if (.member(V, Card) ) { +myHits(Hit+1); println("acertei:", V, " Ate agora acertei ", Hit+1, " numero(s) em um total de ", .length(Card)); }. +myHits(Hit) : myCard(Card) <if (Hit == .length(Card)){ print("Gaaaaaaaaaaaaaaaaaaaannnnnnnnnnnnhhhhhhhhhhheeeeeeeeiiiiiii!!"); winner; }. +status(S) : S == "started" <println("Legal! Bingo inciado!"). +status(S) : S == "stoped" <println("Ahhhh .. já acabou."). //Percepctions of the Observable Properties +numSorted(V).
  • 18. Personalizando a classe Agente ● Partindo do ponto de vista do interpretador AgentSpeak um agente é: – Um conjunto de crenças; – Um conjunto de planos; – Algumas funções de seleção definidas pelo usuário; – Funções de confiança (uma relação socialmente aceitável para mensagens recebidas); – A função de atualização de crença; – A função de revisão de crenças; – Elementos circunstanciais (eventos pendentes, intenções e outras estruturas necessárias durante a interpretação de um agente em AgentSpeak);
  • 19. Personalizando a classe Agente ● ● A implementação padrão destas funções está na classe Agent que pode ser customizada por desenvolvedores a fim de estender funcionalidades básicas; Alguns dos métodos da classe pode ser enxergado no diagrama a seguir;
  • 21. Personalizando a classe Agente ● Métodos da classe Agent que normalmente são sobrescritos: – selectMessage (Queue<Message> mailbox) ● ● ● Seleciona a mensagem que será manipulada no atual ciclo de raciocínio; Na implementação padrão o método retorna e remove a primeira mensagem na caixa do agente; Implementa a função SM Recorte do ciclo de raciocínio Jason
  • 22. Personalizando a classe Agente ● Métodos da classe Agent que normalmente são sobrescritos: – selectEvent (Queue<Event> events); – Seleciona o evento que será manipulado no atual ciclo de raciocínio; – A implementação padrão remove e retorna o primeiro evento na fila; – Implementa a função SE Recorte do ciclo de raciocínio Jason
  • 23. Personalizando a classe Agente Recorte do ciclo de raciocínio Jason ● Métodos da classe Agent que normalmente são sobrescritos: – selectOption (List<Option> options) – É usado para selecionar um dentre várias opções para manipular um evento; – A implementação padrão remove e retorna a primeira opção de acordo com a ordem de escrita dos planos do código do agente; – Implementa a função S0
  • 24. Personalizando a classe Agente ● Métodos da classe Agent que normalmente são sobrescritos: – selectIntention (Queue<Intention> intentions) – Seleciona uma intenção para continuar a ser executada no atual ciclo do raciocínio; – A implementação padrão remove e retorna a primeira intenção da fila e após a execução da intenção é inserida no final da fila (como em um round robin) – Implementa a função SI Recorte do ciclo de raciocínio Jason
  • 25. Personalizando a classe Agente ● Métodos da classe Agent que normalmente são sobrescritos: – socAcc(Message m) ● Retorna true se a mensagem m é socialmente aceitável; ● A implementação padrão retorna true para todas as mensagens; ● Se segurança for um problema, então este método deve sobrescrito; Caso contrário, o agente ficará suscetível a simples ataques de DoS; buf(List<Literal> percepts) – – ● ● Atualiza a base de crenças com as percepções dadas; Adiciona todas as alterações efetivadas como novos eventos em um conjunto de eventos;
  • 26. Personalizando a classe Agente ● Métodos da classe Agent que normalmente são sobrescritos: – brf(Literal add, Literal rem, Intention i) ● ● ● Revisa a base de crença com um literal a ser adicionado (se houver), outra a ser removido (se houver) e a estrutura da intenção é requerida para alterar a crença A implementação padrão não faz nada e o método deve ser sobrescrito ( ou seja, não há um revisor padrão de crenças em Jason); Retorna duas listas em uma matriz (uma com os acréscimos na base de crença e outra com as exclusões); As listas podem ser úteis para gerar eventos relevantes; É importante enfatizar que a função de atualização de crença em Jason apenas atualiza a base de crenças e gera eventos externos de acordo com as percepções atuais; – ● – Ela NÃO garante consistência de crença;
  • 27. Personalizando a classe Agente ● A implementação padrão da função de atualização da base de crença funciona da seguinte forma: Conjunto de todos os literais atualmente na base de crença Lista das percepções atuais recebidas Conjunto de eventos
  • 28. Um primeiro exemplo de personalização da classe Agent ● Vamos mudar a função de seleção de eventos do robô aspirador de pó (descrito no cap. 5); – ● ● Agora, ela priorizará eventos criados quando a sujeira é percebida; A fila de eventos possui eventos criados a partir das percepções (sujo; pos(r); pos(l)) e ações internas criadas por intenções; O método passa por todos os eventos da fila e verifica se o gatilho é igual a sujo (dirty) – – ● Se for, a função remove da fila e retorna esse como único a ser tratado no atual ciclo de raciocínio; Se não, ele invoca a implementação padrão (que retorna o evento no início da fila); A seguir a implementação …....
  • 29. Gatilho de uma percepção de sujeira Retorna o comportamento padrão
  • 30. Um primeiro exemplo de personalização da classe Agent ● Lembrando que o arquivo de configuração deve associar os agentes oriundos dessa nova classe da seguinte forma: Nossa classe
  • 31. Um segundo exemplo... ● Suponha que queremos indicar no código AgentSpeak de um agente que uma intenção deve ser selecionada apenas quando não há mais nada a fazer; – ● Vamos chamar essa intenção de “the idle intention”; Assim, o agente deve: – – ● Selecionar a intenção ociosa somente se for a única intenção do agente; Ou seja, enquanto o agente possui muitos focos simultâneos então a intenção ociosa jamais deve ser selecionada; Para marcar uma intenção como ociosa, um programador deve adicionar uma anotação “idle” em um rótulo de plano que irá formar a intenção; – ● Quando este plano se torna a intenção significa que toda a intenção tornase “idle”; O código a seguir mostra a implementação da função Si
  • 32.
  • 33. Considere o seguinte agente: A saída seria: Perceba que as duas intenções são executadas concorrentemente. Se adicionarmos uma anotação rotulando o “idle” no último plano da seguinte forma: Teremos então a seguinte saída:
  • 34. Conclusões sobre a personalização da classe Agent ● ● Percebemos que é possível estender o Jason com novas funcionalidades (como a intenção ociosa); No entanto, vale enfatizar que ajustes nas funções de seleção são perigosos, pois emergem problemas típicos da programação concorrente como o starvation de intenções ou eventos; – ● Estes devem ser feitos com muito cuidado; Por outro lado, de qualquer maneira, na prática os agentes podem precisar morrer por inanição de eventos se o ambiente for bastante dinâmico;
  • 35. Referência ● Bordini, R. H., Hübner, J. F., and Wooldridge, M. 2007. Programming Multi-Agent Systems in AgentSpeak Using Jason. John Wiley & Sons, Ltd.