Atividade 3 - Tutorial Project II
Neste tutorial será usado um mundo virtual com o
agente. O agente é um herói e o ambiente é uma selva. O ambiente é
discreto e cada célula pode ter objetos ou não. Os objetos dentro
do ambiente podem ser:
-
Agente
- Macacos malvados
- Árvores
- Pedras
- Lanches
(hambúrguer)
Os macacos podem prejudicar o agente se estão na
mesma posição. As pedras ocupam todo um quadrado, assim nenhum
outro objeto pode estar na posição de uma pedra. O agente só pode
ver os objetos no quadrado atual e no quadrado na frente dele.
As possíveis ações do agente são:
Mover
uma posição ao frente
Girar à esquerda e à direita
Comer
Flee
(girar e mover na frente)
A saúde do agente vai diminuindo a cada iteração
ou se um macaco está atacando ele. Comer hambúrguer aumenta o nível
de energia.
Figura
1
Execução do ambiente
original.
Figura
2
PAM Graph:
Figura
3
Lista de tarefas (task)
que estão sendo programadas para ser executadas:
Figura
4
Lista de tarefas (task)
que estão sendo executadas atualmente e sua informação:

Figura 5
A execução inicial do
programa é apresentada na imagem a seguir. Aqui o agente ainda não
sabe quando tem pouca energia, pois ainda não tem um detetor de
feature para quando a energia for menor do que 0.66
Figura
6
A primeira tarefa é
adicionar o feature detector para quando o agente estiver
com baixa energia. Isso pode ser feito adicionando uma classe chamada
BadHealthDetector
Figura
7
O segundo passo é, no
arquivo factoryData.xml, procurar a secção task e
adicionar uma nova tarefa chamada BadHealthDetector associada
à classe feita no passo anterior. Assim é criado um tipo de tarefa
(task) chamada BadHealthDetector
Figura
8
O seguinte passo é a
criação de uma tarefa no módulo PerceptualAssociativeMemory
do agente chamada BadHealthDetector:
Figura
9
Finalmente é
necessária a inclusão de um detetor para quando apareça um macaco
na frente:
Figura
10
Na primeira parte
vai-se criar uma tarefa chamada predatorAttentionCodelet
dentro do arquivo de configuração do agente:
Figura
11
A seguir é modificado
o parâmetro refractoryPeriod da tarefa
GoodHealthAttentionCodelet para ver o efeito de
modificar esta propriedade no Global Workspace. Enquanto menor seja
esse valor, maior é a frequência em que ele aparece na Global
Workspace:
Figura
12
Na primeira parte é
modificada a operação dentro do modulo ProceduralMemory
para lograr que o agente se movimente mesmo ele tenha boa energia. A
mudança é feita na propriedade chamada scheme.10b dentro
do arquivo de configuração do agente:

Figura 13
A seguir se modificara
a forma como são inicializadas alguns nós e links, para isso é
necessário criar um inicializador próprio. Primeiro se especificará
o novo inicializador dentro do arquivo de configuração do agente,
no modulo PerceptualAssociativeMemory na tag
<initializerclass>
Figura
14
Depois são adicionados
as pedras e as comidas como nós filhos do mesmo pai "object"

Figura 15
No seguinte passo será
modificado a estratégia de decaimento do nó "object". No
arquivo factoryData.xml estão definidas todas as
estratégias. Uma de elas é a slowDecay que tem um parâmetro muito
pequeno. Será modificado o código da classe CustomPamInitializer
para utilizar está estratégia.
Figura
16
Para adicionar a nova estratégia ao nó "object" são
adicionadas as seguintes linhas de código à classe
CustomPamInitializer
Figura
17
Nesta tarefa a ideia é
adicionar o código necessário para que o agente atue da seguinte
maneira:
Se
uma árvore está na frente então se mover na frente para ficar no
mesmo quadro que a árvore.
Isto é porque quando o agente está na mesma posição de uma
árvore os macacos não podem ataca-lo.
O primeiro passo é definir um novo attention codelet dentro
do arquivo de configuração do agente:
Figura
18
O codelet é chamado de
TreeAtentionCodelet e como node é utilizado o nó tree.
Assim cada vez que o agente detectar o nó tree é
chamado o codelet, a seguir é apresentada a figura do Global
Workspace quando o agente deteta uma árvore na frente:
Figura
19
O seguinte passo é
adicionar a ação que será realizada quando o agente detecta a
árvore. Ele deveria avançar na frente para ficar na mesma posição
da árvore e assim ficar a salvo dos macacos. As ações são
definidas no módulo de Procedural Memory:
Figura
20
O resultado é o
seguinte: se o agente vê uma árvore na frente, ele avança e ocupa
o mesmo lugar da árvore.
Figura
21
A ideia deste exercício é modificar o algoritmo
de seleção de ações. Atualmente o agente está utilizando a
classe padrão de LIDA para seleção de ações chamada
BasicActionSelection. O agente chama essa classe desde o módulo
ActionSelection:
Figura
22
A modificação desta classe requer a criação de
uma nova classe no nosso projeto que execute um novo algoritmo de
seleção de ações que pode levar em conta muitas coisas do mundo.
A classe está definida no Framework do LIDA.
Figura
23