Actividad 3
Neste tutorial será usado um mundo virtual com um 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 são:
Um agente
Macacos do mal
Árvores
Pedras
Lanches (hambúrguer)
Os macacos podem prejudicar ao 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 diminuir a cada iteração ou se um macaco está atacando-lo. Comer hambúrguer aumenta o nível de saúde
Agent Exercise 1
Execução inicial do ambiente:
A seguinte imagem apresenta o PAM Graph
A seguinte imagem apresenta a lista de tarefas (task) que estão sendo programadas para ser executadas
A seguinte imagem apresenta a lista de tarefas (task) que estão sendo executadas atualmente e sua informação.
ALife Agent Exercise 2
A execução inicial do programa é apresentada na seguinte imagem. Aqui o agente ainda não sabe quando tem pouca energia devido a que não tem um detetor de feature para quando a energia é menor do que 0.66
A primeira tarefa é adicionar o feature detector para quando o agente tenha baixa energia. Isso pode se completar adicionando uma classe chamada BadHealthDetector
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
O seguinte passo é a criação de uma tarefa no módulo PerceptualAssociativeMemory do agente chamada BadHealthDetector:
Finalmente é necessária a inclusão de um detetor para quando apareça um macaco na frente:
ALife Agent Exercise 3
Na primeira parte vai-se criar uma tarefa chamada predatorAttentionCodelet dentro do arquivo de configuração do agente:
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:
ALife Agent Exercise 4
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:
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>
Depois são adicionados as pedras e as comidas como nós filhos do mesmo pai "object"
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.
Para adicionar a nova estratégia ao nó "object" são adicionadas as seguintes linhas de código à classe CustomPamInitializer
// Task 3: INSERT YOUR CODE HERE **************************
DecayStrategy decayStrategy = factory.getDecayStrategy("slowDecay");
objectNode.setDecayStrategy(decayStrategy);
Advanced Exercise 1
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:
O codelet é chamado de TreeAtentionCodelet e como node é utilizado o nó tree.
Assim cada vez que o agente detete o nó tree é chamado o codelet, a seguir é apresentada a figura do Global Workspace quando o agente deteta uma árvore na frente:
O seguinte passo é adicionar a ação que será realizada quando o agente detete 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:
O resultado é o seguinte: se o agente vê uma árvore na frente, ele avança e ocupa o mesmo lugar da árvore.
O agente vai ficar nessa posição o tempo todo até que a energia dele desça muito.
Advanced Exercise 2
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:
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, mas o tempo e o limitado conhecimento da arquitetura não possibilitaram a conclusão desta atividade.
A classe está definida no Framework do LIDA.