You are here

Atividade 2 - Tutorial project 1 - Basic Agent

BASIC AGENT

 
A primeira parte do tutorial foi um estudo de um agente simples, cuja tarefa era reconhecer um quadrado vermelho ou um circulo azul, quando desenhados numa área específica da tela; o reconhecimento deveria ser indicado com o pressionamento de um botão específico para cada elemento.
 
O estudo desse agente foi divido em 6 exercícios, cada um divido em algumas tarefas.
 
 

EXERCÍCIO 0

 

Tarefa 1: explorar o código fonte.

 
  • Classe Run:
 
Simplesmente chama "AgentStarter.main(<argumentos de entrada>)"
 
 
 
  • Classe "ColorFeatureDetector": extende "BasicDetectionAlgorithm"
  • É o detector da característica cor, dentro do ambiente.
  • Utiliza lista "smParams" para acessar os seus parâmetros definidos em "factoryData.xml".
  •  Sobrescreve o método "init()" para inicializar a cor procurada a partir dos seus parâmetros; usa o vermelho como valor default, caso não encontre uma definição.
  • Sobrescreve o método "detect()" para buscar dentro do "sensoryMemory" - membro padrão de "BasicDetectionAlgorithm" - um elemento "visual", através do método "getSensoryContent()".
  • Retorna ativação máxima (1.0) caso existe a cor procurada dentro do "sensoryMemory".
 
  • Classe "ShapeFeatureDetector": também extende "BasicDetectionAlgorithm"
  • É o detector das formas geométricas.
  • Funcionamento similar ao do detector de cor.
  • Sobrescreve o método "detect()" com seguinte algorítmo: recebe do "sensoryMap" tudo o que foi visto num bitmap e compara, ponto a ponto, cor do fundo - BRANCA - contabilizando quantos pontos viu de cor diferente. Faz a proporção de pontos não brancos que encontrou dentro de toda a área vista. Ativação máxima é indicada se essa proporção for equivalente à proporção esperada, configurada pelo parâmetro "area".
 
  • Classe "ButtonEnvironmentPanel": define o painel gráfico do exercício:

 
 
  • Classe "ButtonEnvironment": extende a "EnvironmentImpl", que é a implementação abstrada de "Environment" que, de acordo com a documentação LIDA, corresponde à:
 
"Especificação de domínios que o framework pode utilizar como um ambiente. Ambientes podem ser 'sentidos' e podem receber ações".
 
 
Assim, essa classe corresponde ao ambiente do agente.
 
 
  • Possui um membro "BackgroundTask", que é uma extensão de "FrameworkTaskImpl" que é, por sua vez, a implementação padrão da interface "FrameworkTask" que, também pela documentação:
 
"This is the base interface for all task process in the LIDA framework. All parts of processes in the LIDA Framework have to implement this interface. A FrameworkTask is intended as a small fraction of a process."
 
Nesse caso sobrescreve o método "runThisFrameworkTask()" onde está a chamada de "driveEnvironment()", que corresponde ao ciclo do ambiente: gera randomicamente um circulo, quadrado ou deixa o espaço em branco.
 
 
 
  • Acessa uma instância de "TaskSpawner" via membro de "FrameworkTaskImpl".
  • Métodos "getState()" e "processAction()" são as interfaces para EXPORTAR o estado do ambiente e para REALIZAR as ações do agente.
 
 
  • Classe "ButtonSensoryMemory": extende a classe "SensoryMemoryImpl", que é a implementação abstrata de "SensoryMemory" que, pela documentação:
 
"This is the interface to be implemented by sensory memory modules. Implementing modules sense the environment, store the sensed data and process it."
 
 
  • Implementa o método "getSensoryContent()", utilizado pelos detectores; aqui fica claro o uso dos parâmetros "smParam" pelos detectores. "ColorFeatureDetector" busca a cor num ponto específico da imagem; "ShapeFeatureDetector" busca a imagem inteira.
  • Método "runSensors()" chama "getState()" implementado por "ButtonEnvironment", também utilizando um hash "sensorParam" para definir o que está buscando.
 
 

EXERCÍCIO 1

 
As primeiras tarefas deste exercício explora a GUI do lida, com as seguintes operações:
 
  • Tarefa 1: controle da execução via botão "Start/Pause";
  • Tarefa 2: controle da execução via botões "Step mode" e "Run ticks";
  • Tarefa 3: controle da velocidade de execução, via a definição de duração dos "ticks".
  • Tarefa 4: controle do log: configuração de qual componente logar e de qual nível de log utilizar.

 

Já a Tarefa 5 lista os arquivos de configuração utilizados por uma simulação LIDA, na GUI listados na tab "Configuration Files".

 

EXERCÍCIO 2

 
Tarefa 1: uso da tab "PAM table" da GUI para checar as ativações que ocorrem em cada ciclo, e como elas vão decaindo durante os ciclos seguintes.
 
 
 
 
Tarefa 2: uso do painel "Perceptual Buffer" no GUI, onde está o grafo dos nós que fazem parte dele; é o processo de esquecimento (decay) dos nós no "Perceptual Buffer" que faz com que eles desapareçam
 
 
 
 
QUESTÃO 1.1: Em qual módulo do LIDA o "Perceptual Buffer" está? De onde os nós desse buffer vem? Como esses nós diferem dos nós em outros módulos?
 
O "Perceptual Buffer" está no Workspace; seus nós advém do PAM. Não está claro como eles diferem dos nós em outros módulos.
 
 
 
Tarefa 3: uso do painel "Global Workspace" da GUI
 
 
 
QUESTÃO 1.2: De onde vem as coalisões do "Global Workspace"? Para onde essas coalisões vão? Pense como a resposta para essas perguntas depende se estamos discutindo o modelo LIDA ou um agente específico utilizando o framework LIDA.
 
Do ponto de vista do modelo LIDA, as coalisões são ligações entre os nós que estão no "Perceptual Buffer", construídas pelos "attention codelets"; como resultado do processo de competição entre elas, a coalisão vencedora irá para o "Global Workspace", ou seja, atingirá a consciência. Uma vez no "Global Workspace", essas coalisões são difundidas por todos os demais módulos da arquitetura.
 
Analisando a implementação da arquitetura LIDA - essencialmente via a sua documentação - a geração das coalisões ocorre nas classes listadas no arquivo "basicAgent.xml", dentro da TAG "AttentionModule". Essas classes devem implementar a interface "AttentionCodelet"; no exemplo básico o agente utiliza a implementação default feita pela classe "BasicAttentionCodelet".
 
Durante o processo de difusão da consciência, as coalisões são repassadas para todas as classes que implementam a interface "BroadcastListener" e foram registradas no "Global Workspace" via método "GlobaWorkspace.addBroadcastListener()"; no caso do exemplo, nenhuma classe customizada recebe a difusão da consciência.
 
 
Task 4: Criação de um novo painel - "Current Situational Model"
 
QUESTÃO 1.3: Como que os conteúdos do "Current Situational Model" e "Perceptual Buffer" estão relacionados? E com os conteúdos da PAM? Pense como a resposta para essas perguntas depende se estamos discutindo o modelo LIDA ou um agente específico utilizando o framework LIDA.
 
O contéudo o "Perceptual Buffer" e do "Current Situational Model" são praticamente os mesmos; e ambos variam de acordo com o grau de ativação dos nós dentro da PAM. Pelas informações disponíveis não está clara qual a diferença entre eles.
 
 

EXERCÍCIO 3

 
Tarefa 1: análise inicial do arquivo "basicAgent_ex3.xml" - nele estão faltando algumas declarações que estavam presentes da versão anterior ("basicAgent.xml").
 
 
Tarefa 2: nesta tarefa é criado o módulo "Environment"; como não existe uma conexão - via "Listener" - entre a PAM e o "Workspace", nada é detectado.
 
 
 
 
Tarefa 3: nesta tarefa é criado o "Listener" para conectar a PAM e o "Workspace"; com o "Listener", os elementos "red" e "square" passam a serem detectados e copiados no "Workspace".
 
 
 
 
Tarefa 4: criação do "blueDetector" dentro da PAM; com a criação desse detector, o elemento "blue" passa a ser detectado.
 
 
 
 
Tarefa 5: criação do "circleDetector" dentro da PAM; neste ponto o elemento "circle" também passa a ser detectado; no entanto, não ocorre a ação de pressionar o botão 2.
 
 
 
 
Tarefa 6: criação do "AttentionModule"; é com esse "Attention codelet" que a combinação "blue + circle" é detectada e dispara o pressionamento do botão 2.
 
 
 
 
 

Exercícios avançados 1

 
Execução do agente sem o GUI do LIDA - configuração de "lida.gui.enable = false" dentro de "lidaConfig.properties".
 
Outro ponto indicado neste exercício é o controle do log através do mecanismo padrão de "java.util.logging".
 
 

Exercícios avançados 2

 
Pela documentação do LIDA: "refractoryPeriod" - é o tempo em "ticks" que um "codelet" deverá esperar para poder criar coalisões sucessivas.
 
"ticksPerRun", por sua vez, determina a frequência (n-ticks) com que a "task" irá executar - a "task" executa a cada n-ticks.
 
De acordo com essas descrições, ambas características controlam a velocidade global de atuação de um determinado elemento.
 
 

Exercícios avançados 3

 
Neste exercício é feito o ciclo completo de criação de um detector de uma característica, de um attention codelet para essa característica, de um novo scheme de ações e da execução de uma nova ação.
 
Para este exemplo o objetivo é fazer com que o agente solte o último botão pressionado, no caso da tela estar vazia; o detector deve, então, reconhecer a tela vazia e criar um novo nó na PAM representando isso. O novo "attention codelet" deve reconhecer esse nó e levar esse fato à consciência. Deve haver na "Procedural Memory" um scheme que dispare a ação de soltar o botão e, por fim, na "Sensory-Motor memory" deve haver um nó que execute de fato essa ação.
 
Como o agente do exercício já tinha essa ação implementada - em "ButtonEnvironment.processAction()" - não foi preciso implementá-la depois de executar os passos acima.
 
Na sequência, temos então:
 
1. Declaração do detector:
 
 
 
 
2. Declaração da task de execução do detector:
 
 
 
 
3. Declaração do codelet das características (empty):
 
 
 
 
4. Declaração do scheme e da ação:
 
 
 
 
5. Método de detecção da tela vazia:
 
 

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer