Você está na página 1de 145

Introdução à programação de sistemas

multiagentes usando o framework JaCaMo

Renato Luciano Cagnin


Prof. Dr. Ivan Rizzo Guilherme

Pós - graduação em Ciência da Computação


Conteúdo

● Framework JaCaMo (Jason, CArtAgO, Moise).


○ O que é ?
○ Instalação do Framework.
○ Instalação do plugin para a IDE Eclipse.
● Programação orientada à Agentes.
● Programação orientada aos agentes BDI (Jason).
● Programação orientada ao ambiente (CArtAgO).
● Exemplo de implementação.
○ Definição do problema.
○ Decisões de projeto para implementação.
● Exercícios práticos.
Framework JaCaMo

O que é (JaCaMo) ?

Página oficial do projeto:

● http://jacamo.sourceforge.net/
Framework JaCaMo

O que é (JaCaMo) ?

Página oficial do projeto:

● http://jacamo.sourceforge.net/
Framework JaCaMo

Instalação do Framework.
Framework JaCaMo

Instalação do Framework.
Framework JaCaMo

Instalação do Framework.

Descompacte o arquivo e execute o


arquivo no diretório lib/jacamo.jar.

Configure o diretório "Java Home"


para o diretório onde o JDK foi instalado!
Framework JaCaMo

Instalação do plugin para a IDE Eclipse.

Menu help > Install New Software


Framework JaCaMo

Instalação do plugin para a IDE Eclipse.

http://jacamo.sourceforge.net/eclipseplugin/juno
Framework JaCaMo

Criando o primeiro projeto


Framework JaCaMo

Criando o primeiro projeto


Framework JaCaMo

Criando o primeiro projeto


Framework JaCaMo

Criando o primeiro projeto

Ambiente/agente centralizado: todos os agentes do


sistema participam do mesmo ambiente

Ambiente/agente distribuído: separa o ambiente em


diferentes espaços de trabalho (workspaces) no mesmo
sistema.
Framework JaCaMo

Estrutura do projeto

Código fonte dos agentes do sistema

Especificação de protocolos internos.

Código da especificação da
organização

Código fonte das entidades que


compõem o ambiente (artefatos)
Framework JaCaMo

Estrutura do projeto

Código fonte dos agentes do sistema

Jason

Moise
Código da especificação da
organização CArtAgO

Código fonte das entidades que


compõem o ambiente (artefatos)
Programação orientada à agentes
Programação orientada à agentes

Ambiente de interação dos


agentes

Constituído por artefatos


(entidades funcionais)

Ambiente interno:
representado pelos
artefatos que podem
representar interface para CArtAgO
o ambiente externo
Ambiente externo:
representado por hardware
e software externo ao
sistema

Linguagem de
programação: JAVA
Programação orientada à agentes

Agentes que constituem o


sistema multiagentes

Jason
Os agentes fazem uso dos
artefatos para atuar ou
perceber o ambiente

Caracterizados por:
- pró-atividade
- habilidade social
- autonomia

Linguagem de
programação: Agent
Speak.
Programação orientada à agentes

Agentes cooperam e
Moise
constituem organizações.

Os agentes assumem
papéis e são encarregados
de executar missões.

Caracterizada por três


níveis:
- estrutural
- funcional
- normativo

Arquivos de especificação:
XML
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Executando o código

Hello World !!!


Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Entendendo o código fonte (Linguagem AgentSpeak)


Crenças iniciais:
No exemplo nenhuma.

Desejo inicial:
Alcançar o objetivo "start".

Base de planos:

Ações que serão executadas


// Comentário em linha segundo o desejo do agente.
/* */ Comentário em bloco
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Entendendo o código fonte (Linguagem AgentSpeak)

Crenças iniciais:
No exemplo nenhuma.

Representam o estado
informacional acerca dele
mesmo, de outros agentes ou
do ambiente.
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Entendendo o código fonte (Linguagem AgentSpeak)

Crenças em Jason podem ser escrita a partir da composição de literais da lógica de primeira
ordem.

Exemplo:
Literais em letras
raining. // Está chovendo. minúsculas são
sempre constantes
name(renato). // O nome é Renato.

isAt(renato, unesp). // O Renato está na Unesp.

car("Fiesta"). // O carro é um Fiesta Literais que iniciam em


letras maiúsculas, se
entre " " são Strings
has(renato, car("Fiesta") ). // O Renato tem o carro Fiesta.
senão são variáveis!
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Entendendo o código fonte (Linguagem AgentSpeak)

O Agente acredita
inicialmente nestes
fatos!
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Entendendo o código fonte (Linguagem AgentSpeak)

Quando o agentes estão em execução as crenças em Jason podem ser:

● Adicionadas ( + )
● Removidas ( - )
● Atualizadas ( - + )

Contudo tais operações somente podem ocorrer dentro do corpo de um plano!


Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Entendendo o código fonte (Linguagem AgentSpeak)

Exemplo:

-raining. // Remoção da crença, o agente deixou de acreditar que está chovendo.

+sunny. // O agente passou a acreditar que está ensolarado.

- +isAt(renato, home). // O Renato está em casa agora.

Lembre-se : operações permitidas dentro do corpo de um plano, após o símbolo <- .


Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Entendendo o código fonte (Linguagem AgentSpeak)

Importante:

As diferentes ações no
corpo de um plano são
separadas por ;
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Executando o novo código.

Ok mas e as crenças ?
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Executando o novo código.

Mind Inspector!
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Executando o novo código.

Agentes do Crenças
sistema. atuais
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Entendendo o código fonte (Linguagem AgentSpeak)

Crenças também podem (e devem !) ser consultadas durante a execução dos


planos do agente.

A consulta de uma crença deve ser feita na região de contexto de um plano.

Dessa forma, vamos agora verificar mais profundamente como é estruturado um


plano em AgentSpeak.
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Entendendo o código fonte (Linguagem AgentSpeak)

Planos em AgentSpeak:

+ : significa que um novo objetivo foi "lançado" ( o agente deseja atingir um objetivo).
- : significa que o objetivo não pôde ser alcançado (falha durante a execução de um
plano, ou nenhum contexto válido).
! : plano para obtenção de um objetivo (realização de uma ação)
? : plano para consulta ou unificação de valores em variáveis.
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Entendendo o código fonte (Linguagem AgentSpeak)

Planos em AgentSpeak:

Nome do objetivo: o agente selecionará somente planos que apresentam o nome do


objetivo que também foi "lançado" como desejo do agente.

Um objetivo pode também receber variáveis como parâmetros.


Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Entendendo o código fonte (Linguagem AgentSpeak)

Planos em AgentSpeak:

Contexto: representa consultas na base de crença ou condições para validade do


plano.
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Entendendo o código fonte (Linguagem AgentSpeak)

Planos em AgentSpeak:

Corpo do plano: representa as ações que o agente fará durante a execução deste plano.
Importante: planos pode apresentar objetivos de subplanos em seu corpo!
Programação orientada aos agentes BDI (Jason).

Exemplo de consulta (Linguagem AgentSpeak)

Importante:

Variáveis em Jason são


definidas por quaisquer
literais que começa com
letra maiúscula
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Exemplo de consulta (Linguagem AgentSpeak)


Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Exemplo de plano com contexto (Linguagem AgentSpeak)


Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Exemplo de plano com contexto (Linguagem AgentSpeak)

1) O objetivo "start" é o desejo do


agente
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Exemplo de plano com contexto (Linguagem AgentSpeak)

2) Dentre os planos o agente escolhe


o plano relacionado ao objetivo "start"
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Exemplo de plano com contexto (Linguagem AgentSpeak)

3) Este plano torna-se uma intenção


que será executada.
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Exemplo de plano com contexto (Linguagem AgentSpeak)

4) Este plano "lança" um novo desejo :


atingir o objetivo "checkWeather"
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Exemplo de plano com contexto (Linguagem AgentSpeak)

5) O agente encontra dois possíveis


planos para este desejo
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Exemplo de plano com contexto (Linguagem AgentSpeak)

Importante:

Os planos são testados


na ordem com que
aparecem no código

6) O agente consulta sua base de crenças para


verificar a validade do contexto.
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Exemplo de plano com contexto (Linguagem AgentSpeak)

Importante:

Os planos são testados


na ordem com que
aparecem no código

7) Como o contexto é válido, o plano também


será empilhado como uma nova intenção.
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Pilha de intenções (Linguagem AgentSpeak)

Intenção
atual

Próximo
ciclo
Reasoning
Cycle
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Pilha de intenções (Linguagem AgentSpeak)

Nova intenção
a ser empilhada
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason -Operadores lógicos e relacionais (Linguagem AgentSpeak)

Contextos ou consultas mais elaboradas podem ser realizadas usando operadores lógicos e
relacionais
Lógicos Relacionais
E(&) igual ( == )

OU ( | ) diferente ( \== )

NÃO ( not ) maior ( > )

maior ou igual ( >= )

menor ( < )

menor ou igual ( <= )


Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Operadores lógicos e relacionais (Linguagem AgentSpeak)


Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Operadores lógicos e relacionais (Linguagem AgentSpeak)

Planos relacionados a
"checkTemperature"
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Operadores lógicos e relacionais (Linguagem AgentSpeak)

Plano executado se nenhum dos


contextos anteriores forem
válidos
Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Tratamento de falhas (Linguagem AgentSpeak)

Planos podem não ser executados se caso o contexto não é válido. Nestes casos, sugere-
se um tratamento utilizando o evento remoção ( - ).

Exemplo:

+! count : number(X) & X < 10 <- .println("OK ").

- !count <- .println("Error").


Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Tratamento de falhas (Linguagem AgentSpeak)


Programação orientada aos agentes BDI (Jason).

"HelloWorld" em Jason - Tratamento de falhas (Linguagem AgentSpeak)

Se o plano associado a
"goByCar" falhar, o agente
encerra sua execução sem que
nenhuma ação seja executada.
Programação orientada aos agentes BDI (Jason).

Tornando o sistema "multi"

Sistemas multiagentes são caracterizados por apresentarem mais de um agente.

Além disso, tais agente exibem habilidades sociais (interação e troca de


conhecimentos).
Programação orientada aos agentes BDI (Jason).

Criando um novo agente.


Programação orientada aos agentes BDI (Jason).

Criando um novo agente.

Aqui será criado o protótipo do


agente, o arquivo.asl !
Programação orientada aos agentes BDI (Jason).

Criando um novo agente.

Agora é necessário criar uma instância deste novo tipo!


Programação orientada aos agentes BDI (Jason).

Criando um novo agente.

Em seguida pressione "Finish"

O botão "Next" permitirá


configurações mais avançadas.
Programação orientada aos agentes BDI (Jason).

Criando um novo
agente.

Arquivo de configuração
com o novo agente.
Programação orientada aos agentes BDI (Jason).

Comunicação entre agentes

Os agentes podem se comunicar utilizando duas ações internas (internal actions).

.send(agente_destinatário, performativa, valor).

.broadcast(performativa, valor).

Diferença : send envia unicamente para um agente.


Programação orientada aos agentes BDI (Jason).

Comunicação entre agentes

Performativas:

- tell : solicita ao agente receptor para adicionar uma nova crença.


- untell : solicita ao agente receptor para remover a crença.
- achieve : solicita ao agente receptor para atingir um objetivo.
- unachieve : solicita ao agente receptor para desistir de um objetivo.
- tellhow : solicita ao agente receptor para adicionar um novo plano em sua base.
- untellhow : solicita ao agente receptor para remover um plano de sua base.
- askOne : solicita ao agente receptor unificar o valor de uma de suas crenças a partir da consulta
passada.
- askAll : solicita ao agente receptor unificar o valor de todas as suas crenças a partir da consulta
passada.
- askhow : solicita ao agente receptor quais são os planos que satisfazem um objetivo
Programação orientada aos agentes BDI (Jason).

O agente receptor pode, ou não, tratar este evento relacionado à comunicação com outro
agente. No exemplo a seguir será apresentado como ocorre o tratamento de um evento de
comunicação.

1) James ao inicial a execução de seu primeiro plano envia a crença "hi" para o sample_agent.

Agente james, código agente007.asl


Programação orientada aos agentes BDI (Jason).

O agente receptor pode, ou não, tratar este evento relacionado à comunicação com outro
agente. No exemplo a seguir será apresentado como ocorre o tratamento de um evento de
comunicação.

2) O sample_agent vai tratar a recepção deste evento:

Agente sample_agent, código sample_agent.asl


Programação orientada aos agentes BDI (Jason).

O agente receptor pode, ou não, tratar este evento relacionado à comunicação com outro
agente. No exemplo a seguir será apresentado como ocorre o tratamento de um evento de
comunicação.

3) Quando james executar .send, sample_agent executará o plano "+hi"

Agente sample_agent, código sample_agent.asl


Programação orientada aos agentes BDI (Jason).

Agente sample_agent, código sample_agent.asl


Programação orientada aos agentes BDI (Jason).

Na performativa tell o agente receptor adiciona a nova crença enviada independente do


evento ter sido tratado.

Nova crença recebida.


Observe a fonte (source)
Programação orientada aos agentes BDI (Jason).

Neste exemplo será demonstrado como ocorre a comunicação pela performativa "achieve".

1) James ao iniciar a execução de seu primeiro plano envia a crença "hi" para o sample_agent.
Aguarda um tempo e solicita a execução do plano "checkTemperature"

Agente james, código agente007.asl


Programação orientada aos agentes BDI (Jason).

O agente receptor ao receber a performativa "achieve" executará o plano correspondente.

2) O sample_agent vai tratar a recepção deste evento:

Agente sample_agent, código sample_agent.asl


Programação orientada aos agentes BDI (Jason).

Plano executado mediante solicitação de outro agente


Programação orientada aos agentes BDI (Jason).

Neste exemplo será demonstrado como ocorre a comunicação pela performativa "tellHow".

1) sample_agent irá "ensinar" um novo plano para james e em seguida solicitará sua
execução a partir da performativa "achieve"

Agente sample_agent, código sample_agent.asl


Programação orientada aos agentes BDI (Jason).

Neste exemplo será demonstrado como ocorre a comunicação pela performativa "tellHow".

1) sample_agent irá "ensinar" um novo plano para james e em seguida solicitará sua
execução a partir da performativa "achieve"

Agente sample_agent, código sample_agent.asl


Novo plano
Programação orientada aos agentes BDI (Jason).

Plano adicionado e executado em tempo de execução.


Programação orientada aos agentes BDI (Jason).

Neste último exemplo de comunicação será demonstrado como ocorre a comunicação pela
performativa "askOne".

1) James ao iniciar a execução de seu primeiro plano envia a crença "hi" para o sample_agent.
Aguarda um tempo e solicita a execução do plano "checkTemperature" e por fim, deseja saber o
valor da temperatura. Nesta performativa o agente recebe como resposta uma nova crença.

Agente james, código agente007.asl


Programação orientada aos agentes BDI (Jason).

Execução após recepção da crença solicitada via performativa "askOne"


Programação orientada aos agentes BDI (Jason).

Crença adicionada após a performativa "askOne"


Programação orientada aos agentes BDI (Jason).

Internal actions (ações internas):

São operações extras que os agentes podem realizar fora as ações comuns já pré-definidas
na Linguagem AgentSpeak.

O Jason apresenta diversas delas presentes na biblioteca jason.stdlib.

.println, .print, .wait, .send, .broadcast, são alguns exemplos delas.

Além disso, é possível criar novas ações internas personalizadas.

A especificação e Javadoc de todas internal actions pode ser encontrada em:

http://jason.sourceforge.net/api/jason/stdlib/package-summary.html
Programação orientada aos agentes BDI (Jason).

Listas:

Jason trata múltiplos valores na forma de listas.

As operações sobre listas geralmente são realizadas utilizando as ações internas :

.concat, .delete, .member, .union, .intersection, entre outras.

Não será dada ênfase sobre listas nesta aula

Além disso, existe um comando muito importante que apresenta como retorno uma lista de
todos os valores das crenças consultadas. Seu nome é .findAll.
Programação orientada aos agentes BDI (Jason).

No último exemplo desta primeira parte, criaremos um novo agente


Programação orientada aos agentes BDI (Jason).

No último exemplo desta


primeira parte, criaremos um
novo agente
Programação orientada aos agentes BDI (Jason).

Exemplo de execução da ação interna .findall


Programação orientada aos agentes BDI (Jason).

Exemplo de execução da ação interna .findall

Membro da lista Consulta Resultados


Programação orientada aos agentes BDI (Jason).
Programação orientada aos agentes BDI (Jason).

Para maiores informações sobre a linguagem AgentSpeak e Jason:

BORDINI, R., HUBNER, J. F., VIEIRA, R. Jason and the Golden Fleece of Agent-Oriented
Programming. Springer US, 2005.

BORDINI, R. H., HUBNER, J. F., and WOOLDRIDGE, M. Programming Multi-Agent Systems in


AgentSpeak Using Jason. John Wiley and Sons Ltd, October 2007.

RAO, A. S.; GEORGEFF, M. P. Modelling rational agents within BDI-architecture. Proceedings of


the Second International Conference on Principles of Representation and Reasoning, San Mateo,
1991.

RAO, A. S. AgentSpeak(L): BDI agents speak out in a logical computable language. Proceedings
of the Seventh Workshop on Modelling Autonomous Agents in a Multi-Agent World (MAAMAW’
96), 22–25 January, Springer-Verlag, 1996.

Documentação e tutorial Jason:


http://jason.sourceforge.net/wp/documents/
Programação orientada aos agentes BDI (Jason).

Até então, foram apresentados agentes que executam seus planos exclusivamente sobre
suas crenças iniciais.

Seria interessante que o agente pudesse obter o valor da temperatura atual do dia ou que
pudesse via sensores determinar em que posição estou da terra.

Para que os agentes de um sistema multiagentes possam realizar estas operações é


necessário definir um ambiente.
Programação orientada ao ambiente (CArtAgO).

No framework JaCaMo, o ambiente dos agentes é composto por entidades funcionais


denominadas de artefatos.

Os artefatos proveem funcionalidades extras para os agentes do sistema, além de servirem


como interface entre os agentes e os demais sistemas, frameworks ou API's.

Construiremos artefatos a partir do framework CArtAgO e sua integração com os agentes


Jason.
Programação orientada ao ambiente (CArtAgO).

Um ambiente composto de artefatos


Programação orientada ao ambiente (CArtAgO).

Visão conceitual de um artefato:


Programação orientada ao ambiente (CArtAgO).

Visão conceitual de um artefato:

Sinais enviados aos


agentes para notificar
eventos assíncronos
Programação orientada ao ambiente (CArtAgO).

Visão conceitual de um artefato:

Propriedades internas
aos artefatos mapeadas
para a base de crença
dos agentes.
Programação orientada ao ambiente (CArtAgO).

Visão conceitual de um artefato:


Ações disponíveis aos
agentes. A execução de
operações podem
alterar as propriedades
internas dos artefatos
Programação orientada ao ambiente (CArtAgO).

Visão conceitual de um artefato:

Permite a programação
entre artefatos
distribuídos
possibilitando a
passagem de valores
ou execução de
operação entre
diferentes artefatos
Programação orientada ao ambiente (CArtAgO).

Construindo o primeiro artefato

botão direito sobre a pasta

src/env > New CArtAgO Artifact


Programação orientada ao ambiente (CArtAgO).

Construindo o primeiro artefato


Programação orientada ao ambiente (CArtAgO).

Construindo o primeiro artefato


Programação orientada ao ambiente (CArtAgO).

Construindo o primeiro artefato

Abstração
Programação orientada ao ambiente (CArtAgO).

Construindo o primeiro artefato

A definição das
propriedades observáveis
é feita pelo método
destacado.
Programação orientada ao ambiente (CArtAgO).

Construindo o primeiro artefato

Um artefato pode
apresentar zero ou mais
propriedades observáveis
Programação orientada ao ambiente (CArtAgO).

Construindo o primeiro artefato

A operação é definida pela anotação


@OPERATION.
Uma operação pode ou não apresentar
parâmetros de entrada e/ou saída.
Programação orientada ao ambiente (CArtAgO).

Utilizando o seu artefato.

Antes de utilizar o seu artefato, tenha em mente que:

● O artefato deve inicialmente ser criado por um dos agentes do sistema.


● O agente terá acesso somente às operações, sinais e propriedades observáveis.
● Uma vez criado dois ou mais agentes podem observar e/ou utilizar as operações do
artefato.
● O artefato pode ser localizado por qualquer agente, deste que esteja no mesmo
"espaço de trabalho" (workspace).
Programação orientada ao ambiente (CArtAgO).

Utilizando o seu artefato.

O agente james criará e se utilizará do artefato:


Programação orientada ao ambiente (CArtAgO).

Utilizando o seu artefato.

O agente james criará e se utilizará do artefato:

Função do CArtAgO : permite a criação de artefatos no espaço de


trabalho do agente.
Programação orientada ao ambiente (CArtAgO).
Identificador CArtAgo
Utilizando o seu artefato.

O agente james criará e se utilizará do artefato:

Identificador Classe Java Lista de parâmetros


iniciais : passados para
o método "init". Pode
ser vazia!
Programação orientada ao ambiente (CArtAgO).

Utilizando o seu artefato.

O agente james criará e se utilizará do artefato:

O artefato foi criado, mas nada aparentemente mudou o comportamento dos agentes, isso é
normal ?

Sim, pois o artefato é uma entidade funcional e não é pró-ativa! O que significa que somente os
agentes podem determinar a execução de suas operações, pelo menos por enquanto...
Programação orientada ao ambiente (CArtAgO).

Utilizando o seu artefato.

O agente james criará e se utilizará do artefato a partir da visualização de suas


propriedades observáveis

Agora o agente visualiza a propriedade


observável deste artefato
Programação orientada ao ambiente (CArtAgO).

Observável "count" mapeada


Utilizando o seu
artefato.

Depois de executada
operação "focus" mapeia a
propriedade observável para
a base de crenças do agente
Programação orientada ao ambiente (CArtAgO).

Observável "count" mapeada


Utilizando o seu artefato.

Esta é uma das formas que


constitui o mecanismo de
percepção do ambiente!
Programação orientada ao ambiente (CArtAgO).

Utilizando o seu artefato.

O agente james criará e se utilizará do artefato a partir da visualização de suas


propriedades observáveis e também executará uma operação

Agora o agente executa a operação


"inc"definida no artefato.
Programação orientada ao ambiente (CArtAgO).

Utilizando o seu artefato.

Neste caso, como a operação não


apresenta parâmetros, basta apenas
chamá-la pelo seu identificador!
Programação orientada ao ambiente (CArtAgO).
Observável "count" mapeada
Utilizando o seu artefato. foi incrementada

Após a execução de

"inc"
Programação orientada ao ambiente (CArtAgO).

Utilizando o seu artefato.

O agente james criará e se utilizará do artefato a partir da visualização de suas


propriedades observáveis, executará uma operação e receberá um sinal do artefato.

Recepção de sinais
Programação orientada ao ambiente (CArtAgO).

Utilizando o seu artefato.

O agente james criará e se utilizará do


artefato a partir da visualização de suas
propriedades observáveis, executará uma
operação e receberá um sinal do artefato.

Recepção de sinais
Programação orientada ao ambiente (CArtAgO).
Observável "count" mapeada
Utilizando o seu artefato. foi incrementada

Após a execução de

"inc"

O sinal não é
mapeado na
base de crenças
do agente!
Programação orientada ao ambiente (CArtAgO).

Compartilhando o seu artefato.

Dois ou mais agentes podem se utilizar de um mesmo artefato.

Antes de compartilhar o seu artefato, tenha em mente que:

● O artefato deve inicialmente ser criado por um dos agentes dos sistemas.
● Os demais agentes terão acesso às operações, sinais e propriedades observáveis.
● Uma vez criado os demais agentes devem localizar o artefato no espaço de trabalho.
Programação orientada ao ambiente (CArtAgO).

Compartilhando o seu artefato.

O agente hubble deseja utilizar o artefato "counter". Primeiro ele procurará o artefato.

O agente procura o
artefato. Se encontrar
irá visualizá-lo, Senão
irá procurar novamente.
Programação orientada ao ambiente (CArtAgO).

Compartilhando o seu artefato.

O agente hubble deseja utilizar o artefato "counter". Primeiro ele procurará o artefato.

Identificador Identificador
CArtAgO

O agente procura o artefato usando a


operação lookupArtifact.
Programação orientada ao ambiente (CArtAgO).
Observável "count" mapeada
Compartilhando o seu artefato. para o agente hubble.
Programação orientada ao ambiente (CArtAgO).

Para maiores informações sobre CArtAgO:

RICCI A., PIUNTI, M., ACAY L. D., BORDINI R., HUBNER J., and DASTANI M. Integrating artifact-based environments
with heterogeneous agent-programming platforms. In Proceedings of 7th International Conference on Agents and Multi
Agents Systems (AAMAS08), 2008.

RICCI, A.; PIUNTI, M.; VIROLI, M. Environment Programming in Multi-Agent Systems – An Artifact-Based Perspective,
2010.

Documentação e API

● http://cartago.sourceforge.net/?page_id=6
● CArtAgO by Examples.
Exemplo de implementação.

Agora que conhecemos um pouco sobre o Jason e o CArtAgO, podemos aplicar


este conhecimento sobre o problema do agente aspirador de pó (Russell e
Norvig)
Exemplo de implementação.

Definição do problema:
Exemplo de implementação.

Decisões de projeto para implementação.

Ambiente :

- Representação em Java.
- Propriedades observáveis.
- Sinais.
- Operações.

Agentes:

- Crenças
- Desejos
- Intenções.
Exemplo de implementação.

Decisões de projeto para implementação.

Ambiente : É possível representar este ambiente de maneira


simplificada usando um array booleano para indicar
se há lixo ou não na sala e uma variável inteira para
- Representação em Java. armazenar a posição atual do robô.
- Propriedades observáveis.
- Sinais.
- Operações.

Agentes:

- Crenças
- Desejos
- Intenções.
Exemplo de implementação.

Decisões de projeto para implementação.

Ambiente :

- Representação em Java.
- Propriedades observáveis.
- Sinais. Posição atual do robô é uma propriedade
- Operações. interessante que será mapeada diretamente na base
de crenças do agente.
Agentes:

- Crenças
- Desejos
- Intenções.
Exemplo de implementação.

Decisões de projeto para implementação.

Ambiente :

- Representação em Java.
- Propriedades observáveis.
- Sinais.
Notificação de quando um lixo é encontrado na sala
- Operações.
onde o robô se encontra.

Agentes: Notificação de quando o robô encontra o limite do


ambiente (bordas).
- Crenças
- Desejos
- Intenções.
Exemplo de implementação.

Decisões de projeto para implementação.

Ambiente :

- Representação em Java.
- Propriedades observáveis.
- Sinais.
- Operações. As ações que o robô executará (ir para direita, ir para
esquerda e aspirar).
Agentes:

- Crenças
- Desejos
- Intenções.
Exemplo de implementação.

Programando o ambiente.

1) Criar um novo projeto

Jacamo.
Exemplo de implementação.

Programando o ambiente.

2) Criar um novo artefato


Exemplo de implementação.

Programando o ambiente.

3) Programando os atributos do artefato.


Exemplo de implementação.

Programando o ambiente.

4) Programando as operações e sinais do artefato


Exemplo de implementação.

Programando o ambiente.

4) Programando as operações e
sinais do artefato
Exemplo de implementação.

Decisões de projeto para implementação.

Ambiente :

- Representação em Java.
- Propriedades observáveis.
- Sinais.
- Operações.

Agentes:

- Crenças Posição do robô ao longo das salas.


- Desejos
- Intenções.
Exemplo de implementação.

Decisões de projeto para implementação.

Ambiente :

- Representação em Java.
- Propriedades observáveis.
- Sinais.
- Operações.

Agentes:

- Crenças
- Desejos Procurar lixo.
Limpar o lixo.
- Intenções.
Exemplo de implementação.

Decisões de projeto para implementação.

Ambiente :

- Representação em Java.
- Propriedades observáveis.
- Sinais.
- Operações. Se o robô estiver na sala 0, ir para a sala 1

Agentes: Se o robô estiver na sala 1, ir para a sala 0

- Crenças Se lixo for encontrado na sala atual, limpar o


lixo.
- Desejos
- Intenções.
Exemplo de implementação.

Programando o agente

Número de salas que


constitui o ambiente
Exemplo de implementação.

Programando o agente

Limpa a pilha de
intenções evitando
retorno recursivo.
Exemplo de implementação.

Programando o agente

Observável do artefato
Exemplo de implementação.

Programando o agente

Operações do artefato
Exemplo de implementação.

Programando o agente

Sinal do artefato
Exemplo de implementação.

Ok, mas até então o ambiente é determinístico e estático, isso significa que o seu estado
não se altera ao longo do tempo.

Adicionaremos um fator aleatório para permitir com que as salas apresentem lixo ao longo
do tempo.

No novo modelo, a cada 4 segundos existe 70% de probabilidade de uma sala tornar-se
suja. Dessa forma, estaremos criando um ambiente dinâmico e estocástico para o nosso
agente.
Exemplo de implementação.

Reprogramando o
ambiente.

Para adicionarmos fatores que


alteram o comportamento do
ambiente sem que ocorra
atuação do agente, adota-se as
operações internas.
Exemplo de implementação.

Reprogramando o
ambiente.

Para adicionarmos fatores que


alteram o comportamento do
ambiente sem que ocorra
atuação do agente, adota-se as Operação interna, em essência
operações internas. nova Thread
Exemplo de implementação.

Reprogramando o ambiente.

A operação interna é sempre


executada mediante o método
"execInternalOp"
Exemplo de implementação.

Lixo na sala 1, o agente não havia percebido

Quando volta à sala 1, encontra o lixo e o limpa


Exercícios práticos.

1) Alterar o exemplo do mundo o aspirador de pó para que um agente percorra um


conjunto de 30 salas. Dica: crie uma nova crença que represente o sentido do movimento do
agente.
2) Sobre o exemplo das 30 salas, modificar o ambiente para que o mesmo forneça
informações para mais de um agente. Dica: Adicione novas observáveis, uma para cada novo
agente.
3) Coordene mais de um agente no ambiente anterior durante as tarefas de limpeza das
salas. Existem inúmeras possibilidades para a solução deste problema.
4) Modifique o ambiente de modo a ser um mundo de salas bidimensionais (matriz n x m)
e onde algumas não são acessíveis aos agentes (obstáculos).
5) No mundo bidimensional, crie um agente explorador, que percorre o ambiente em
busca de lixos; e um agente limpador que remove os lixos encontrados. Use
comunicação entre eles.