LuBras: Uma Arquitetura de um Dispositivo Eletrônico para a Comunicação LIBRA...
Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
1. Inside Jason: Experiências no
Desenvolvimento de
Arquiteturas Customizadas
Projeto Turing – LISA
(Laboratório Inteligente de
Sistemas Autônomos)
• 1. Centro Federal de Educação Tecnológica (CEFET/RJ), Brasil
• 2. Universidade Federal Fluminense (UFF), Brasil
Carlos Eduardo Pantoja 1,2
24 de Setembro 2017
2. 2Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
SOCIAL MEDIA
https://www.linkedin.com/in/
carlos-eduardo-pantoja-
aab0a011a
https://www.facebook.com/turi
ngproject
https://www.youtube.com/chan
nel/UCDff9u94Rc1q4xZqCbldQAA
https://www.youtube.com/channel/UC9X
rJBtDKukqUQcHLy4t-kA
https://www.instagra
m.com/prof.pantoja
Professor
Pantoja
Projeto
Turing
5. 5Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
1. INTRODUÇÃO: ARGO
ARGO [Pantoja et al., 2016]: Uma arquitetura customizada
do Jason para programação de Agentes Robóticos usando
placas microcontroladas (Arduino):
• Javino [Lazarin e Pantoja, 2015]
middleware para comunicação entre controladores e software
de alto nível com detecção de erro.
• Filtros de Percepções [Stabile Jr e Sichman, 2015]
Filtros de percepção reduzem a quantidade de informação
percebida pelo agente em tempo de execução.
6. 6Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
1. INTRODUÇÃO: COMMUNICATOR AGENT
Agentes Comunicadores: Uma arquitetura customizada do
Jason para programação de Agentes capazes de se
comunicar com agentes de um outro SMA usando o middleware
ContextNet:
• ConextNet [Endler, 2011]
Middleware robusto para distribuição de dados em uma rede
da Internet of Things (IoT).
7. 7Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
1. INTRODUÇÃO: OBJETIVOS
Objetivo Principal
• Criar SMA utilizando extensões para uma plataforma cognitiva baseada em
Java e AgentSpeak: Jason Framework.
• Desenvolver os projetos de Iniciação Científica ao longo do semestre.
• Introduzir o código fonte do Jason para desenvolvimento de novas soluções
no grupo.
Objetivo Secundário
9. 9Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
O Jason [Bordini et al., 2007] é um
framework para desenvolvimento de
Sistemas Multi-Agentes.
Além disso, o Jason implementa em Java
um interpretador para a linguagem
orientada a agentes AgentSpeak [Rao,
1996].
O Jason é um framework amplamente
utilizado na área de desenvolvimento de
sistemas multi-agentes para a
programação de agentes de software
BDI.
2. JASON
Jason by Gustave Moreau
11. 11Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
2. JASON: BIBLIOTECA (THE ROAD SO FAR)
12. 12Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
Local onde estão
todas as classes
fontes do Jason.
2. JASON: BIBLIOTECA (THE ROAD SO FAR)
13. 13Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
Caso precise que o nome
da arquitetura
customizada seja
utilizada de forma direta
no arquivo de
configuração do SMA,
colocar sua classe aqui.
2. JASON: BIBLIOTECA (THE ROAD SO FAR)
14. 14Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
Caso precise que o nome
da arquitetura
customizada seja
utilizada de forma direta
no arquivo de
configuração do SMA,
colocar sua classe aqui.
2. JASON: BIBLIOTECA (THE ROAD SO FAR)
15. 15Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
2. JASON: BIBLIOTECA (THE ROAD SO FAR)
16. 16Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
2. JASON: BIBLIOTECA (THE ROAD SO FAR)
17. 17Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
2. JASON: BIBLIOTECA (THE ROAD SO FAR)
18. 18Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
A arquitetura padrão de
um agente. Todas as
arquiteturas
customizadas estendem
esta classe. Se está
classe for modificada,
todos os tipos de
agentes serão
modificados.
2. JASON: BIBLIOTECA (THE ROAD SO FAR)
19. 19Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
Instância do ContextNet
para permitir a
comunicação entre
agentes de SMA distintos.
Uma das nossas
experiências com
arquiteturas customizadas.
2. JASON: BIBLIOTECA (THE ROAD SO FAR)
20. 20Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
Instância do Javino para
permitir a comunicação
entre agentes e
microcontroladores. Uma
outra experiência com
arquiteturas customizadas.
2. JASON: BIBLIOTECA (THE ROAD SO FAR)
21. 21Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
2. JASON: BIBLIOTECA (THE ROAD SO FAR)
22. 22Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
Dos autores do Jason:
“The Agent class has the
belief base and plan library
of an AgentSpeak agent. It
also implements the
default selection functions
of the AgentSpeak
semantics.”
Se esta classe for
modificada (dependendo
de como seja feito), o
comportamento de todos
os agentes serão
modificados.
2. JASON: BIBLIOTECA (THE ROAD SO FAR)
23. 23Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
Cada agente tem sua
própria instância dessa
classe. Funções como o
buf, são implementadas
nesta classe, assim como a
chamada para perceber o
ambiente simulado (classe
Environment)
2. JASON: BIBLIOTECA (THE ROAD SO FAR)
24. 24Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
2. JASON: BIBLIOTECA (THE ROAD SO FAR)
25. 25Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
São as ações internas da
biblioteca padrão
(standard library) do Jason.
As ações internas próprias
podem ser colocadas aqui
para não haver a
necessidade de colocar o
nome do pacote na hora
de fazer chamada a ação
no código asl.
2. JASON: BIBLIOTECA (THE ROAD SO FAR)
27. 27Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
3. ARGO FOR JASON
The Argo by Lorenzo Costa
O ARGO é uma arquitetura customizada
que emprega o middleware Javino
[Lazarin e Pantoja, 2015], que provê uma
ponte entre o agente inteligente e os
sensores e atuadores do robô.
Além disso, o ARGO possui um
mecanismo de filtragem de percepções
[Stabile Jr e Sichman, 2015] em tempo de
execução.
O ARGO tem como objetivo ser uma
arquitetura prática para a programação
de agentes robóticos embarcados
usando agentes BDI em Jason e placas
microcontroladas.
30. 30Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
Customized
architecture created
to differentiate Argo
agents from common
Jason’s agents
3. ARGO FOR JASON: IMPLEMENTAÇÃO
31. 31Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
Javino instance for
each Argo agent.
3. ARGO FOR JASON: IMPLEMENTAÇÃO
32. 32Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
Returns the ARGO agent’s
Javino instance.
3. ARGO FOR JASON: IMPLEMENTAÇÃO
33. 33Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
• Arquitetura Customizada de agentes ARGO
public class Argo extends AgArch {
public Javino jBridge = new Javino();
public Argo() {
this.setPort("COM1");
}
public Javino getArgo() {
return this.jBridge;
}
}
3. ARGO FOR JASON: IMPLEMENTAÇÃO
34. 34Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
The serial port from which the agent is
receiving perceptions and executing
actions.
3. ARGO FOR JASON: IMPLEMENTAÇÃO
35. 35Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
Começa vazia pois nem
todo agente é um
agente ARGO.
É um método que é sobrecarregado na arquitetura
customizada. Aqui retorna nulo para não interferir
no funcionamento de outros tipos de agentes.
3. ARGO FOR JASON: IMPLEMENTAÇÃO
36. 36Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
Defines if the agent has
to perceive or not the
real world.
3. ARGO FOR JASON: IMPLEMENTAÇÃO
37. 37Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
A time interval, in
milliseconds, for the
next real world sensing
3. ARGO FOR JASON: IMPLEMENTAÇÃO
38. 38Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
Desnecessário!!!
3. ARGO FOR JASON: IMPLEMENTAÇÃO
39. 39Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
Function responsible for
returning the perceptions from
the real world if:
i) the perceptions is not
blocked;
ii) the time limit was reached;
iii) the agent is an ARGO agent
3. ARGO FOR JASON: IMPLEMENTAÇÃO
40. 40Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
• New realWorlPerceptions Method
public List<Literal> realWorldPerceptions() {
long perceiving = System.nanoTime();
List<Literal> percepts = new ArrayList<Literal>();
if(((perceiving - lastPerceived) < this.limit) || this.blocked)
return null;
lastPerceived = perceiving;
if (this.agArch.getArgo().requestData(this.agArch.getPort(), "getPercepts")) {
String rwPercepts = this.agArch.getArgo().getData();
String perception[] = rwPercepts.split(";");
for (int cont = 0; cont <= perception.length - 1; cont++) {
percepts.add(Literal.parseLiteral(perception[cont]));
}
return percepts;
}
3. ARGO FOR JASON: IMPLEMENTAÇÃO
41. 41Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
Responsible for filtering
perceptions, as stated
before.
3. ARGO FOR JASON: IMPLEMENTAÇÃO
42. 42Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
• Método de filtragem de percepções
private static void filter(List<Literal> percept) {
if (currentObjective == null)
return;
Iterator<Literal> it = percept.iterator();
while (it.hasNext()) {
if (remove(it.next())) {
it.remove();
}
}
}
public void buf(List<Literal> percepts) {
(...)
this.filter(percepts);
(...)
}
3. ARGO FOR JASON: IMPLEMENTAÇÃO
43. 43Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
O ARGO permite:
1. Controlar diretamente os atuadores em tempo de execução;
2. Receber percepções dos sensores automaticamente dentro de um período de
tempo pré-definido;
3. Mudar os filtros de percepção em tempo de execução;
4. Alterar quais os dispositivos que estão sendo acessados em tempo de execução;
5. Decidir quando perceber ou não o mundo real em tempo de execução.
3. ARGO FOR JASON: FUNCIONALIDADES
44. 44Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
• Ativando um efetuador
Ativando um
efetuador
utilizando a ação
interna act.
3. ARGO FOR JASON: FUNCIONALIDADES
45. 45Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
3. ARGO FOR JASON: FUNCIONALIDADES
O ARGO permite:
1. Controlar diretamente os atuadores em tempo de execução;
2. Receber percepções dos sensores automaticamente dentro de um
período de tempo pré-definido;
3. Mudar os filtros de percepção em tempo de execução;
4. Alterar quais os dispositivos que estão sendo acessados em tempo de execução;
5. Decidir quando perceber ou não o mundo real em tempo de execução.
46. 46Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
• Recebendo Percepções com Limite de Tempo
Limitando as
percepções em
25ms.
3. ARGO FOR JASON: FUNCIONALIDADES
47. 47Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
3. ARGO FOR JASON: FUNCIONALIDADES
public boolean reasoningCycle() {
…
ag.buf(this.realWorldPerceptions());
…
}
• Mudanças na Classe TransitionSystem
antes:
ag.buf(getUserAgArch().perceive()
48. 48Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
3. ARGO FOR JASON: FUNCIONALIDADES
• New realWorlPerceptions Method
public List<Literal> realWorldPerceptions() {
long perceiving = System.nanoTime();
List<Literal> percepts = new ArrayList<Literal>();
if(((perceiving - lastPerceived) < this.limit) || this.blocked)
return null;
lastPerceived = perceiving;
if (this.agArch.getArgo().requestData(this.agArch.getPort(), "getPercepts")) {
String rwPercepts = this.agArch.getArgo().getData();
String perception[] = rwPercepts.split(";");
for (int cont = 0; cont <= perception.length - 1; cont++) {
percepts.add(Literal.parseLiteral(perception[cont]));
}
return percepts;
}
49. 49Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
3. ARGO FOR JASON: FUNCIONALIDADES
O ARGO permite:
1. Controlar diretamente os atuadores em tempo de execução;
2. Receber percepções dos sensores automaticamente dentro de um período de
tempo pré-definido;
3. Mudar os filtros de percepção em tempo de execução;
4. Alterar quais os dispositivos que estão sendo acessados em tempo de execução;
5. Decidir quando perceber ou não o mundo real em tempo de execução.
50. 50Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
• Criando filtros de percepção
nome do filtro
nome do agente
dono do filtro
3. ARGO FOR JASON: FUNCIONALIDADES
51. 51Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
• Mudando filtros de percepção
+!carry_to(R)
<− ! take (object, R);
.change_filter(search);
−object (r1);
!!search(slots).
3. ARGO FOR JASON: FUNCIONALIDADES
52. 52Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
• Mudanças na Classe Agent
public void buf(List<Literal> percepts) {
if (percepts == null) {
return;
}
int adds = 0;
int dels = 0;
long startTime = qProfiling == null ? 0 : System.nanoTime();
filter(percepts);
Iterator<Literal> perceptsInBB = getBB().getPercepts();
while (perceptsInBB.hasNext()) {
...
3. ARGO FOR JASON: FUNCIONALIDADES
53. 53Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
private static void filter(List<Literal> percept) {
if(currentObjective==null){
return;
}
Iterator<Literal> it = percept.iterator();
while (it.hasNext()) {
if (remove(it.next())) {
it.remove();
}
}
}
• Mudanças na Classe Agent
3. ARGO FOR JASON: FUNCIONALIDADES
54. 54Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
O ARGO permite:
1. Controlar diretamente os atuadores em tempo de execução;
2. Receber percepções dos sensores automaticamente dentro de um período de
tempo pré-definido;
3. Mudar os filtros de percepção em tempo de execução;
4. Alterar quais os dispositivos que estão sendo acessados em tempo de
execução;
5. Decidir quando perceber ou não o mundo real em tempo de execução.
3. ARGO FOR JASON: FUNCIONALIDADES
55. 55Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
• Criando e definindo a arquitetura de um agente ARGO
É preciso escolher
qual dispositivo o
agente irá
controlar definindo
a porta serial onde
o mesmo estiver
conectado.
3. ARGO FOR JASON: FUNCIONALIDADES
56. 56Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
3. ARGO FOR JASON: FUNCIONALIDADES
O ARGO permite:
1. Controlar diretamente os atuadores em tempo de execução;
2. Receber percepções dos sensores automaticamente dentro de um período de
tempo pré-definido;
3. Mudar os filtros de percepção em tempo de execução;
4. Alterar quais os dispositivos que estão sendo acessados em tempo de execução;
5. Decidir quando perceber ou não o mundo real em tempo de execução.
57. 57Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
• Criando e definindo a arquitetura de um agente ARGO
Por padrão, as
percepções
provenientes dos
sensores estão
inicialmente
bloqueadas. Para
isso é necessário
desbloqueá-las .
3. ARGO FOR JASON: FUNCIONALIDADES
58. 58Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
• ARGO Internal Actions:
• .limit(x)
• .port(y)
• .percepts(open|block)
• .act(w)
• .change_filter(filterName)
3. ARGO FOR JASON: AÇÕES INTERNAS
59. 59Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
public class limit extends DefaultInternalAction {
@Override
public Object execute(TransitionSystem ts, Unifier un, Term[] args)
throws Exception {
if (args[0].isNumeric()) {
ts.setLimit(Long.valueOf(args[0] + "000000"));
} else {
return false;
}
return true;
}
}
• A Classe limit no package jason.stdlib
3. ARGO FOR JASON: AÇÕES INTERNAS
60. 60Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
3. ARGO FOR JASON: AÇÕES INTERNAS
• ARGO Internal Actions:
• .limit(x)
• .port(y)
• .percepts(open|block)
• .act(w)
• .change_filter(filterName)
61. 61Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
public class port extends DefaultInternalAction {
@Override
public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
Term illoc = args[0];
String os = System.getProperty("os.name");
if (os.substring(0, 1).equals("W")) {
ts.getUserAgArch().setPort(illoc.toString());
} else {
ts.getUserAgArch().setPort("/" + illoc.toString());
}
return true;
}
}
• A Classe port no package jason.stdlib
3. ARGO FOR JASON: AÇÕES INTERNAS
62. 62Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
3. ARGO FOR JASON: AÇÕES INTERNAS
• ARGO Internal Actions:
• .limit(x)
• .port(y)
• .percepts(open|block)
• .act(w)
• .change_filter(filterName)
63. 63Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
public class percetps extends DefaultInternalAction {
@Override
public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
if (args[0].toString().equals("block")) {
ts.blocked = true;
return true;
} else if (args[0].toString().equals("open")) {
ts.blocked = false;
return true;
} else {
return false;
}
}
• A Classe percepts no package jason.stdlib
3. ARGO FOR JASON: AÇÕES INTERNAS
64. 64Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
3. ARGO FOR JASON: AÇÕES INTERNAS
• ARGO Internal Actions:
• .limit(x)
• .port(y)
• .percepts(open|block)
• .act(w)
• .change_filter(filterName)
65. 65Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
public class act extends DefaultInternalAction {
@Override
public Object execute(TransitionSystem ts, Unifier un, Term[] args)
throws Exception {
Term action = args[0];
if (ts.getUserAgArch().getArgo().sendCommand(ts.getUserAgArch().getPort(), action.toString())) {
return true;
} else { return false;}
}
}
• A Classe act no package jason.stdlib
3. ARGO FOR JASON: AÇÕES INTERNAS
66. 66Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
3. ARGO FOR JASON: AÇÕES INTERNAS
• ARGO Internal Actions:
• .limit(x)
• .port(y)
• .percepts(open|block)
• .act(w)
• .change_filter(filterName)
67. 67Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
public class filter extends DefaultInternalAction {
@Override
public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
String tag = args[0].toString();
ts.getAg().changeFilter(tag);
return true;
}
}}
• A Classe filter no package jason.stdlib
3. ARGO FOR JASON: AÇÕES INTERNAS
71. 71Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
6. CONCLUSÃO
Este material teve (e tem) como objetivo orientar o
desenvolvimento de soluções integrando SMA e
plataformas de hardware utilizando as mais diversas
tecnologias.
Este material não está em sua versão final e estará em
constante atualização até os objetivos individuais dos
projetos em andamento forem concluídos.
Toda contribuição é válida e será bem vinda.
73. 73Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
REFERÊNCIAS BIBLIOGRÁFICA
•[Bordini et al. 2007] Bordini, R.H., Hubner, J.F., Wooldridge, M. Programming Multi-Agent Systems in AgentSpeak
Using Jason. John Wiley & Sons Ltd., 2007.
•[Bratman, 1987] Bratman, M. Intentions, Plans, and Practical Reason. Harvard University Press, 1987.
•[Endler et al., 2011] Endler M, Baptista G, Silva LD, Vasconcelos R, Malcher M, Pantoja V, Pinheiro V, Viterbo J.
ContextNet: context reasoning and sharing middleware for large-scale pervasive collaboration and social
networking. In Proceedings of the Workshop on Posters and Demos Track 2011 Dec 12 (p. 2). ACM.
•[Guinelli et al., 2016] Guinelli, J. V. ; Junger, D. S. ; Pantoja, C. E. . An Analysis of Javino Middleware for Robotic
Platforms Using Jason and JADE Frameworks. In: Workshop-Escola de Sistemas de Agentes, Seus Ambientes e
Aplicações, Maceió. Anais do X Workshop-Escola de Sistemas de Agentes, seus Ambientes e Aplicações, 2016.
•[Lazarin and Pantoja, 2015] Lazarin, N.M., Pantoja, C.E. : A robotic-Agent Platform For Embedding Software
Agents Using Raspberry Pi and Arduino Boards. In 9th Software Agents, Environments and Applications School,
2015
•[Pantoja et al., 2016] Pantoja, C. E.; Stabile Jr, M. F. ; Lazarin, N. M. ; Sichman, J. S. ARGO: A Customized Jason
Architecture for Programming Embedded Robotic Agents. In: Proceedings of the 3rd International Workshop on
Engineering Multi-Agent Systems (EMAS 2016), 2016.
74. 74Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
REFERÊNCIAS BIBLIOGRÁFICA
•[Rao 1996] Rao, A.S.: AgentSpeak(L): BDI agents speak out in a logical computable language. In: de
Velde,W.V., Perram, J.W. (eds.) Proceedings of the 7th European workshop on Modelling autonomous
agents in a multi-agent world. Lecture Notes in Artificial Intelligence, vol. 1038, pp. 42-55. Springer-Verlag,
Secaucus. USA, 1996.
•[Stabile Jr. and Sichman, 2015] Stabile Jr., M.F., Sichman, J.S. Evaluating Perception Filters In BDI Jason
Agents. In: 4th Brazilian Conference On Intelligent Systems, 2015.
•[Wooldridge, 2009] Wooldridge M. An Introduction to MultiAgent Systems. John Wiley & Sons, 2009.
75. 75Inside Jason: Experiências no Desenvolvimento de Arquiteturas Customizadas
AGRADECIMENTOS
OBRIGADO!
pantoja@cefet-rj.br