You are here

e) Aula 13 - LIDA 2: Exemplos de Implementação Prática

Aula 13 - LIDA 2: Exemplos de Implementação Prática

 

Objetivo:

O objetivo desta aula é executar um tutorial prático utilizando a arquitetura LIDA -> "Tutorial Prático LIDA". O arquivo principal, e que guiará todas as implementações, é o LIDA-Tutorial-Exercises.pdf.
A Atividade 1 é relacionada ao download, instalação e reconhecimento do conteúdo do pacote "Tutorial Prático LIDA".
A Atividade 2 é relacionada ao capítulo "Tutorial Project I" e utiliza o projeto "basicAgentExercises" para implementação dos exercícios básicos propostos. O projeto pode ser encontrado no pacote "Tutorial Prático LIDA", na pasta exampleProjects\basicAgentExercises. 
A Atividade 3 se relaciona ao capítulo "Tutorial Project II" e utiliza o projeto "ALifeAgentExercises" para implementação de exercícios mais avançados. O projeto "ALifeAgentExercises" pode ser encontrado na pasta exampleProjects\ALifeAgentExercises do pacote.
Instruções importantes de como criar um projeto LIDA no NetBeas são encontradas no "Appendix" do 
LIDA-Tutorial-Exercises.pdf. 

 

Relatório de Atividades:

 

Atividade 1:


- Conforme indicado no link acima, foi feito o download do "Tutorial Prático LIDA". Ressalto que para esta atividade serão utilizados os projetos que estão dentro do arquivo exampleProjects.zipDescompactando o arquivo verifica-se a existência de dois projetos: basicAgentExercisesALifeAgentExercises.

- Para "instalar" o LIDA e iniciar as implementações, na verdade basta abrir o referido projeto, que servirá como base para as atividades, no IDE Netbeans:

 

Estes projetos destinam-se a fazer parte de um tutorial maior que inclui uma introdução para o modelo de LIDA de cognição e a estrutura de software LIDA. Os exercícios foram divididos entre estes dois principais projetos, BasicAgent e ALifeAgent, e demonstram as principais características da plataforma LIDA, as várias maneiras que podem ser personalizados, e o uso de sua interface gráfica.

 

Atividade 2:

Siga o roteiro apresentado no arquivo "LIDA-Tutorial-Exercises.pdf" e execute as seguintes atividades:

  • Basic Agent Exercise 0:

O objetivo desta atividade é explorar as funcionalidades de um agente LIDA básico e a estrutura de seu projeto. Para tanto, abrimos o projeto no IDE NetBeans, com foco no "Pacote de Codigo-Fonte":

 

No tab do NetBeans com a visão de arquivos, temos uma lista de arquivos dentro da pasta "configs".
Estes arquivos são importantes para a configuração do ambiente e mecanismos da aquitetura LIDA.
Veja algumas descrições na figura abaixo:

  A listagem abaixo, do arquivo lidaConfig.properties, mostra como os aquivos secundários de configuração são definidos:



 

  • Basic Agent Exercise 1:
Objetivos:
- Familiarizar com o framework.
- Entender a aplicação e suas funcionalidades, incluindo start/pause, ticks, step mode.
- Familiarizar com o ambiente da aplicação "Button".
- Aprender mais sobre log e arquivos de configuração da interface gráfica.

Inicialmente, o tutorial orienta sobre a execução do projeto basicAgentExercises:

 
Este projeto envolve um simples agente em um ambiente chamado "Button". Este ambiente gráfico mostra de forma randômica um quadrado vermelho, um círculo azul ou nada. O agente deve reagir ao que é mostrado pressionando "virtualmente" um dos dois botões apresentados em sua interface gráfica. 
 
Quadrado vermelho -> Agente pressiona button 1.
Círculo azul -> button 2 deve ser pressionado. 
 
Estes botões são "virtuais", ou seja, não fazem parte da interface funcional com o usuário, apenas com o agente.
É importante dizer que este projeto foi inspirado no desenvolvimento de agentes com o propósito de replicar habilidades reativas. Isto explica um pouco da sua simplicidade, um dos motivos para a sua escolha para o tutorial.  
 

 

Task 1
Find the tool bar section of the GUI.
It appears directly below the File, Panels, and Help menus. Press the ‘Start/Pause’ button a few times to toggle the running of the simulation. The run status appears just to the right of this button. To the right of this is the current tick text field. Notice how it advances as the simulation runs.
 
A figura abaixo mostra o botão "Start/Pause" da aplicação:
 
 
A próxima figura mostra a aplicação sendo executada. 
Na parte inferior se apresenta o log das atividades executadas pela aplicação e pelo agente. 
Na parte superior direita, algo que impressiona e torna a arquitetura bastante interessante, logo de início: vários tabs de status de artefatos da arquitetura LIDA, alguns comuns a qualquer arquitetura computacional cognitiva, como "Procedural Memory", outras específicas, como "Global WorkSpace".
 
 
 
 
Alguns dos artefatos do framework, que aparecem nesta interface, e que trazem os conceitos da arquitetura para o ambiente implementado:
 
 
 
Global Workspace
 
 
 
 
Perceptual Associative Memory
 
 
Perceptual Buffer
 
 
 
Activation
 
 
 
Graph for Perceptual Associative Memory
 
 
 
Table for Perceptual Associative Memory
 
 
Acrescento ainda como "highlights" deste framework, além da fidelidade à arquitetura proposta, os seguintes pontos:
- Apresenta uma proposta amigável - user friendly!
- Biblioteca de classes e documentação bem organizada, orientada à arquitetura.
- Busca implementações baseadas no que a teoria de sistemas cognitivos vem buscando, bem embasada, ponto a ponto.
- A linguagem de programação se torna apenas um meio, não o ativo principal do framework. 
 

 

Task 2
Next find the ‘Step Mode’ button and click it. The button will darken signifying that the system is now in “Step Mode”. In this mode the application can be run for a specified amount of ticks at a time. Try it now; enter 100 in the tick text field that appears to the right. Now click ‘Run ticks’ and observe that the application runs 100 ticks and stops. Each time you press ‘Run ticks’ the application will run for a period of 100 ticks.
 
A figura abaixo ilustra como explorar o "Step Mode" da aplicação, definindo a quantidade de "ticks", unidade de tempo/processamento, e pressionando o botão "Run ticks":
 

 

Task 3
Leave step mode by clicking the ‘Step mode’ button again. Find the tick duration control in the far right of the tool bar. With the system running, use the arrows to adjust the tick duration to 20 and then to 0. Notice how the speed of the application changes.
 
Nota-se que a execução da aplicação passa a ocorrer sob uma base de tempo maior quando aumentamos o valor da unidade tick.
Assim, podemos verificar as ações em "slow motion" quando 1 tick = 20 ms.
 

 

Task 4:
With the application running find the “Logging” GuiPanel at the bottom. Each line in this panel is a logger entry. The first column is the number of the log entry; the second is the tick at the time of the log; next, the level of severity; then the name of the logger; finally, the message.
Find the first drop down list called “Logger”. This controls the logger whose logs are displayed in this panel. In this menu, select myagent.modules.ButtonEnvironment. In the second drop down list, “Level”, select a level of FINEST. This controls the level of logs that are created by this particular logger (see java logger API for details). Notice now that there are additional logs from the environment. A large volume of logs may slow down the speed of the application. Each time the application is run the logging levels are returned to their default settings.
 
A figura abaixo ilustra como explorar o log da aplicação e os diversos níveis de log que podem ser gerados:
 
 

 

Task 5
Study the “ConfigurationFiles” GuiPanel which appears as a Tab in the same section as the Logging Panel. This panel displays the configuration files currently used by the application. Its table displays the content of the LidaConfig.properties file.
 
 
 
 


 

  • Basic Agent Exercise 2:

 Objetivos:

- Familiarizar com as funcionalidades do detector de caracteísticas.       
- Familiarizar com funcionalidades do codelet de atenção - Sistema Reativo. 
- Estudar alguns artefatos da arquitetura disponibilizados através da GUI: “PAM Table”, “Perceptual Buffer” e “GlobalWorkspace”.
- Aprender como customizar a GUI: adição de um campo para visualizar o conteúdo do modelo corrente situacional do Workspace.
 
Inicialmente, o tutorial orienta para modificarmos o nome de um dos arquivos secundários de configuração no arquivo principal.
Portanto, em lidaConfig.properties, propriedade lida.agentdata, trocaremos o nome de arquivo configs/basicAgent.xml por configs/basicAgent_ex2.xml, que possue algumas deficiencias e que serão resolvidas durante as próximas atividades.
 
 
 
Neste ponto, gostaria de observar a forte característica de modularidade da plataforma, permitindo mudar comportamentos e características dos agentes e ambiente com a simples troca de arquivos de configuração. Esta característica também é revelada no último objetivo desta tarefa - modificar a GUI para mostrar resultados e status de alguns artefatos.
 

 

Task 1
In the tool bar, set the tick duration value to 20. Make sure the application is not paused. Now go to the “PAM table” GuiPanel. This table shows what the agent currently perceives as a result of its recent sensory input. Observe the nodes ‘square’ and ‘red’; their activation values should be changing. Their activation is 1.0 when a red square as sensed, and decays to 0.0 otherwise. If there isn’t a red square present in the environment, you may need to wait a few moments before the values change. On the other hand, the activation of the ‘blue’ and ‘circle’ nodes should NOT be changing — this agent doesn’t have a feature detector for these PAM nodes yet. In the next exercise, you will add feature detectors to the agent to allow it to perceive the blue circles.
 
Uma das alterações no novo arquivo de configuração da propriedade lida.agentdata é que este não possue as tasks "BlueDetector" e "CircleDetector", responsáveis por declarar estes detectores para o agente. Com isto, confirma-se a falta de atividade na PAM Table para os nodes que representam a ocorrencia destes eventos. A figura abaixo ilustra as declarações encontradas no arquivo anterior e faltantes no novo arquivo:
 
 

 

Task 2
Open the “PerceptualBuffer” GuiPanel. Observe how it changes over time. (Scrolling with your mouse or trackpad zooms in and out. Also the window area can be clicked and dragged.) What causes the panel to become empty? (Notice that the nodes here are not exactly the same ones listed in the PAM Graph and Table, but rather instantiations of some of them.) Mouse-­‐over the nodes that appear here and their values will appear the tooltip (increase the tick duration to make this easier). Note that these tooltip values are not updated in real‐time.
 
Nota-se que o painel PerceptualBuffer detecta e exibe nodes das características square e red. Os detectores para características círculo e azul não estão declarados nesta nova configuração, o que explica momentos quem que a tela fica vazia. O tooltip para cada node, quadrado e vermelho, não muda de valor em sua ativação, como é possível verificar na Perceptual Table, por exemplo. O motivo para que isto aconteça é que estes nós não são exatamente os mesmos nodes da PAM Graph e Table. Na verdade são instancias destes nodes originais e na Perceptual Buffer possuem relevância e níveis de ativação específicos, diferentes dos originais - possuem mecanismos distintos para controle de sua excitação (via ExcitationTask e  ExciteStrategy)  e decaimento (via  DecayStrategy).
 
STUDY QUESTION 1.1: What module of the LIDA Model is the Perceptual Buffer in? Where do the nodes in this buffer come from? How do they differ from the nodes in other modules?
 
O Perceptual Buffer está na área de trabalho (portanto, ele é implementado como um sub-módulo do Workspace framework).
Os nodes do buffer originam-se de forma assíncrona dos nodes, acima do limiar de activação, que estão na PAM. Os nodes no Workspace são ativáveis, mas não podem ser aprendidos - o que remete, provavelmente, a ações reativas já que dispensam a estapa de aprendizado.
Possuem de ativação atual, mas não "bas-level activation", como nodes da PAM. No entanto, são cópias dos nodes que estão na PAM, e representam os mesmos dados e são referenciados aqueles nós originais. Como já mencionamos, estes nodes do Buffer podem ter diferentes estratégias de excitação e decaimento.
 
Obs: suspeito que este efeito de excitação e decaimento na buffer, para características que já foram aprendidas de alguma forma e que dispensam esta etapa, permanecendo ativa por algum momento, acabam reproduzindo aspectos de mecanismos reativos e de memória de trabalho.
 
 

 

Task 3
Open the “GlobalWorkspace” GuiPanel and observe what is displayed here: In the top half of this panel is a table that displays the Coalitions currently in the GlobalWorkspace and their attributes. In the bottom half of this panel there is a table that displays the recent history (with the top being most recent) of winning coalitions and their data.
 
A figura abaixo ilustra esta atividade sobre coalizões no "GlobalWorkspace". A metade superior do painel apresenta as coalizões correntes (Coalitions) e seus respectivos atributos. A metade inferior apresenta o histórico recente das coalizões vencedoras.
Nos dois painéis são apresentados o nível de ativação das coalizões, atributo determinante para a seleção da coalizão. Um dos fatores que influenciam o nível de ativação de cada node e, consequentemente da coalizão a que faz parte, é sua fidelidade relacional com o evento corrente naquele instante e que possue maior prioridade também naquele instante. Ex: caso vc esteja fazendo "tricô" e apareça um leão na sua frente, obviamente, nodes relacionados ao leão terão total prioridade naquele instante - depois, ainda vivo, vc faz o "tricô".
 
Observe ainda que na figura abaixo são mostradas as coalizões para a nova configuração, ou seja, tetectores de CIRCULO e AZUL desativados, e para a configuração original, com tais detectores ativos - isto para mostrar que as coalisões se modificam e se adaptam aos eventos de cada instante.
Isto acaba revelando a possibilidade de se provocar algumas disfunções, que muito provavelmente ocorram também nas "mentes naturais" e que poderiam ser simuladas nesta arquitetura: Qual seria o comportamento de nosso agente caso o tempo em que ocorre os eventos não estivesse sincronizado com o tempo da avaliação dos nodes para o estabelecimento das coalizões? Com certeza isto poderia ser comparado a sintomas de alguma patologia humana ou de "mentes naturais".
 
 
 
STUDY QUESTION 1.2: Where do the coalitions in the Global Workspace come from? Where do they go? Think about how the answer to these questions depends on whether we are discussing the LIDA Model or a specific agent implemented using the Framework.
 
As coalizões vêm do "Global Workspace". No Modelo, uma coalizão vence o "concurso" e é escolhido para a comunicação em broadcast para os outros módulos. Em uma implementação particular de um agente usando este framework, somente receberão a comunicação os módulos que implementaram BroadcastListener e foram registrados como ouvintes do módulo GlobalWorkspace deste agente. 
Mais uma possibilidade de se provocar disfunções cujos sintomas comportamentais podem se assemelhar a disfunções de "mentes naturais". O que aconteceria se modulos que não deveriam receber certos brodcasts de comunicação, recebecem estes brodcasts? Provavelmente, se estes módulos não devessem receber tais comunicações, não saberiam o que fazer com tal comunicação, o que poderia provocar algum colapso ou deadlock computacional - em "mentes naturais", me arrisco a mencionar quadros de confusões mentais ou ataques epilépticos.
Ainda não conheço a plataforma LIDA em detalhes, mas, com certeza, o aprimoramento de filtros nos "Listeners" dariam maior fidelidade à plataforma, sobretudo no que diz respeito à peservação do papel e responsabilidade de cada módulo sobre o que está sendo comunicado em broad cast.
 
A figura abaixo ilustra a arquitetura LIDA e setas em vermelho, juntamente com uma descrição, evidenciam o GlobalWorkspace e a comunicação em broadcast, fruto de disputas de coalizões:
 
 
 

A figura abaixo ilustra a inserção da declaração do painel no arquivo de configurações "guiPanels.properties", seguindo o template:

name = panel title, class name, Position [A,B,C,FLOAT, TOOL], tab order, Refresh after load, parameters

O novo painel apresenta basicamente as mesmas informações que o Perceptual Buffer:

 

STUDY QUESTION 1.3: How are the contents of the Current Situational Model related to the contents of the Perceptual Buffer? to the contents of PAM? Think about how the answer to these questions depends on whether we are discussing the LIDA Model, or a specific agent implemented in the Framework.

A estrutura interna do workspace é composta de vários buffers e três módulos:
- Current Situational Model,
- Scratchpad e
- Conscious Contents Queue
 
O Current Situational Model é o local de armazenamento das estruturas que representam os eventos correntes internos e externos.
Os codelets "structure-building" são responsávei pela criação dessas estruturas usando elementos de vários sub-módulos do workspace. O Scratchpad é uma área auxiliar (localizada no workspace) onde os codelets "structure-building" constroem estruturas para depois movê-los para o Current Situational Model. O Conscious Contents Queue mantém o conteúdo dos últimos broadcasts e permite o "entendimento" e manipulação de conceitos.
Portanto, as informações apresentadas pelo painel CSM depende das características do ambiente e do agente (de como ele percebe o  mundo). Isto é, depende das especificações declaradas nos arquivos de configuração. No caso da espeficicação do basicAgent não há nenhum módulo na memória declarativa e todo conteúdo da CSM vem do buffer perceptual via PAM.
"In the LIDA Model, CSM should contain the agent’s idea about what is currently happening in the external and/or internal environments. It will be built by Structure Building Codelets, primarily out of input from PAM and Declarative Memory Modules, In a specific Framework implementation, the CSM’s contents will depend on the specifications in the agent declaration and other configuration files. In the basicAgent exercise, there are no Declarative Memory modules, and all of the CSM contents are from the Perceptual Buffer by way of PAM."
 
 
 


 

  • Basic Agent Exercise 3:
Objetivos:
 
- Modificar o aquivo de declaração do agente de forma a melhorar sua funcionalidade.
- Adicionar uma declaração de módulo no arquivo XML do agente.
- Adicionar uma declaração de “listener” ao aquivo XML do agente.
- Adicionar declaração de detector de característica ao arquivo XML do agente.
- Adicionar declaração de coglet de atenção ao XML do agente.
- Explorar o arquivo XML do agente.
 
Obs: O “arquivo XML do agente”, para esta atividade, é: configs/basicAgent_ex3.xml.
 
Inicialmente, o tutorial orienta para alterar o arquivo lidaConfig.properties na pasta "config", substituindo o atributo da propriedade lida.agentdata, como na figura a seguir:
 
 
A figura abaixo ilustra o diagrama parcial da arquitetura LIDA/ButtonAgent e indica, através de linhas tracejadas, elementos do framework que serão adicionados ao agente nas atividades do exercício 3.
 

 
Task 1:
 
In the ‘configs’ folder of the project open the basicAgent_ex3.xml file. This file has an agent declaration similar to the previous exercise, but is missing some elements (a module and a listener). In this task and those that follow, you will extend this agent’s functionality by adding the missing parts as well as some new ones (a feature detector and an attention codelet).
Perceba que na modificação inicial, a propriedade lida.agentdata do arquivo principal de configuração, passa a apontar para o arquivo basicAgent_ex3.xml. É neste arquivo que são declarados os módulos, listeners e sensores implementados para um agente.
Para esta atividade e subsequentes, o agente ex3 não está completo. Serão adicionados ao agente um detector de características e um codlet de atenção. 
A Task 1 pede apenas que se mostre o arquivo e sua estrutura xml. A figura abaixo ilustra o arquivo de configuração do agente e mostra que o tutorial deixou algumas lacunas para que sejam preenchidas nas atividades:
 
 

 
Task 2
Open the submodules tag. Add a module declaration1 to the agent declaration file nested within the <submodules> tag (there are comments indicating where to insert the new declaration). Model the syntax of the new module declaration after the ActionSelection module declaration in this section (you can copy this and edit the copy). The declaration must be within a <module></module> tag pair, and should have the following tag values:
 
name: Environment class: myagent.modules.ButtonEnvironment
 
Also include the following two param tags noting the structure of parameter declarations. They have a name, a type (int, boolean, string, double), and a value inside the tag. If not specified, the default type of the parameter will be string:
 
Param1: name=”height” type=”int”, tag value is 10
Param2: name=”width” type=”int”, tag value is 10
 
Finally include another tag as follows: taskspawner is defaultTS.
 
Seguindo as instruções acima, escrevemos o novo módulo no espaço indicado seguindo a sintaxe do módulo ActionSelection que se encontra no mesmo arquivo. Então, a declaração do novo módulo fica:
 
 
Como orientado no tutorial, salvamos o arquivo e validamos a formação xml do mesmo - validação sintática do arquivo xml.
 
 
Now run the application by pressing the NetBeans run button, and then click the Start/Pause button to begin the simulation. The Button environment should appear running in the GUI. Set the tick duration to 10 or so to slow the simulation down enough so that you can see the activation values changing in the PAM Table GuiPanel. Notice that the “red” and “square” nodes are receiving activation, but not the “blue” and “circle” nodes. This is because feature detectors for “blue” and “circle” have not yet been added to the PAM module. This will be done below in Tasks 4 & 5.
However even though “red” and “square” have feature detectors that activate the appropriate PAM nodes when these features are present in the ButtonEnvironment, these nodes do not appear in the PerceptualBuffer GuiPanel. This is because the connection between PAM and the Workspace has not yet been defined in this agent’s declaration file (this connection corresponds to the arrow labeled “Move Percept” in the LIDA Model diagram). Therefore, this agent can perceive red and square, but these nodes never enter the Workspace. In order to make this connection, a PamListener must be added to the agent declaration file. This will be done in the next task.
 
Com a execução percebe-se que apenas os nodes red e square estão ativos. Os detectores para blue e circle ainda não foram adicionados à PAM.
Apesar de estarem ativos, os nodes red e square não aparecem na PerceptualBuffer GuiPanel. Isto acontece porque a conexão entre a PAM e o Workspace ainda não está declarada - não há comunicação com o PerceptualBuffer. Portanto, o agente percebe red e square, mas estes nós não entram no Workspace como processo de consciencia. Será necessário, nas próximas atividades, adicionar um PamListener na declaração do agente. 
 

Task 3

Now open the <listeners> tag in the agent xml file. Add a new listener declaration at the beginning of this section, modeling it after the other listener declarations. The declaration should have the following tag values
listenertype is edu.memphis.ccrg.lida.pam.PamListener modulename is PerceptualAssociativeMemory listenername is Workspace
Save the file. Rerun the application. Now the PerceptualBuffer should display nodes “red” and ”square” when the agent perceives a red square in the environment. If these nodes are not appearing in the PerceptualBuffer when there is a red square in the ButtonEnvironment GuiPanel, carefully check the declaration file and make sure that the new listener declaration has the correct information. Also note that nodes for “blue” and “circle” do not appear in the PerceptualBuffer, even when a blue circle is present in the environment. As mentioned above, this is because there are no feature detectors in PAM for these features yet.
 
Como orientado, adicionamos o PamListener entre os listeners do agente:
 
Agora o painel PerceptualBuffer mostra os nodes sensoriados pela PAM, ou seja, red e square. Azul e circulo ainda não são sensoriados pela PAM.

 
Task 4
 
Find the declaration of the PerceptualAssociativeMemory module. Now find the <initialtasks> tag in this module declaration. Find the redDetector task declaration. Add a new task declaration modeled after redDetector task.
Set its tag values as follows:
 
name: blueDetector
tasktype: ColorDetector ticksperrun: 3
 
Set its parameters as follows:
 
Parameter 1
name=”color” type=”int”, tag value is -16776961
 
Parameter 2
name=”node” type=”string”, tag value is blue.
 
 
Task 5
 
Add another task declaration for a detection algorithm that detects a circle. Set its tag values as follows:
 
name: circleDetector
tasktype: ShapeDetector
ticksperrun: 3
 
Set its parameters as follows:
 
Parameter 1
name=”area” type=”int”, tag value is 31
 
Parameter 2
name=”backgroundColor” type=”int”, tag value is -1
 
Parameter 3
name=”node” type=”string”, tag value is circle
 
Implenetando as tarefas 4 e 5, o arquivo de configuração do agente fica assim:
 
 
Notice that the blue and circle nodes appear now.
However, the agent still does not ‘press button 2’ in response to blue circles. This is because there is no attention codelet to add these nodes (as a Coalition) to the GlobalWorkspace.
 
De fato, todas as características agora são agora sensoriadas e apresentadas no PerceptualBuffer.
Nota-se que as ações relacionadas à cor azul e shape círculo, ou seja - pressionar o botão 2, ainda não é executada. A razão para isto é que não existem ainda codlets de atenção que levem esta proposta de coalizão para a GlobalWorkspace.
 

Task 6

Go to the AttentionModule declaration in the agent xml file. Find its <initialtasks> tag. Add another task declaration similar to the RedSquareCodelet. It should have the following tag values:
name: blueCircleCodelet
tasktype: BasicAttentionCodelet
ticksperrun: 5

Set its parameters as follows:

Parameter 1

name=”nodes” type=”string”, tag value is blue,circle

Parameter 2

name=”refractoryPeriod” type=”int” tag value is 30

Parameter 3

name=”initialActivation” type=”double” tag value is 1.0 

Save the file. At this point run the application again and the agent should press button 2 in response to blue circles.

Optional task
Those interested may examine the Java classes for the simple feature detectors used in this project. They are located in the package myagent.featuredetectors.
 
Seguindo as instruções, o codlet de atenção para as caractrísticas azul e círculo é adicionado como segue:
 
 
Agora, na execução, o botão 2 também é pressionado, comprovando a atuação do codlet de atenção para os eventos azul/circulos, criando as coalizões e comunicações necessárias para a correta atuação do agente.
 


 

  • Advanced Exercise 1 - Logging & GUI Configuration:
The LIDA Framework can be run without the GUI. In order to do so go to the lidaConfig.properties file and change the property lida.gui.enable to false. Now the application will run the agent without the GUI.
Optionally, the Logging can be configured so that the logging handlers will send the logs to a file or to the console. The LIDA framework uses the standard Java logging mechanism; see java.util.logging in the standard Java platform for details on this. The framework uses the logging.properties file defined in the lidaConfig.properties file. You can see an example in the configs folder of this project.
 
Esta é uma atividade de simples configuração computacional da GUI e propriedades do arquivo de log, logging.properties.
Como não envolve conheciento relativo à arquitetura LIDA, vou poupar espaço no relatório com as imagens sobre estas configurações. (done).


  • Advanced Exercise 2:
This exercise will introduce you to the effects of tuning the ticksPerRun parameter.
Launch the application, set tickDuration to 10 before starting the simulation. Observe that several coalitions in the upper part of the Global Workspace panel appear when the red square appears in the environment. Now, exit the application…
-­‐ Set the lidaConfig.properties to run the basicAgent.xml agent declaration -­‐ Open the agent xml file
-­‐ Go to the RedSquareCodelet declaration inside the Attention module’s <initialtasks> tag
-­‐ Change ticksPerRun to 50 -­‐ Change refractoryPeriod to 300
 
 
-­‐ Launch application, set tickDuration to 10. There will be relatively few coalitions in the upper part of the Global workspace panel when the red square appears. There should also be less coalitions being broadcast (appearing in the lower section of the same panel).
 
De fato aparecem bem menos coalizoes para os eventos red/square. Pode-se dizer que a mudança nos valores dos parâmetros tornaram o agente um tanto "distraído" com relação especificamente a este evento.


 

  • Advanced Exercise 3:

In this exercise you will be creating a feature detector class and adding it, an attention codelet, and a scheme to the agent xml declaration file.

-­‐ Create your own feature detector to detect when the screen is white. Hint: copy ideas from ShapeFeatureDetector
Como orientado pelo tutorial, basicamente copiei a classe "ShapeFeatureDetector" e construi uma classe que identifica pixels de cor diferente da cor do background, que já é branco:
 
 
-­‐ Add this new feature detector in the factoryData.xml as another task in the <tasks> section
 
 
                                                                          
 
 
-­‐ Find the ‘nodes’ parameter in the PerceptualAssociativeMemory module declaration. Add another node here for empty
 
 
 
 
-­‐ In basicAgent.xml define a task for attention codelet with a parameter for the empty node
 
 
-­‐ Create a new scheme declaration in ProceduralMemory following the format of the existing schemes. The action of scheme can be action.releasePress
 
 
-­‐ In the SensoryMotorMemory module declaration, uncomment the third action-­‐ algorithm association, a parameter named smm.3
 
 
Now when the agent is run it will detect the empty environment and perform the releasePress action in response. This action releases any button that is currently pressed.
Comprovado, entre as ações logadas pelo agente existe a releasePress e acontece sempre que a tela aparece em branco:
 
 
 
 
Conclusion
This concludes the exercises for the basicAgentExercises project. In these exercises we have focused on these topics:
-­‐ The framework’s GUI including the tool bar’s basic functionality and several GuiPanels displaying the internal state of the agent.
-­‐ GuiPanels for logging and for configuration files
-­‐ The agent xml declaration file and how to modify it including adding a module, a listener, feature detectors, and attention codelets.
-­‐ Functionality and definition of feature detectors and attention codelets -­‐ Adding a GuiPanel to the framework’s GUI
 
Estas atividades foram essenciais para o entendimento da arquitetura e como navegar neste framework. 

 


Atividade 3:

Continuando o roteiro "LIDA-Tutorial-Exercises.pdf", execute as seguintes atividades do Tutorial Project II:

This tutorial project involves an agent, “our fearless hero”, in the “Hamburger Jungle” environment. This is a grid world environment where locations are represented as discrete cells. In each cell 0 or more objects can exist, however, cells have a capacity which cannot be exceeded. In this particular implementation there are the following objects: an agent, evil monkeys, trees, rocks, and delicious hamburgers. The evil monkeys move randomly and will try to harm the agent if they are in the same cell. Rocks occupy an entire cell so that no other object may enter that cell. The agent can only sense the objects that are in its current cell and the objects in the cell in front of it in the direction it is facing. It can also sense its own health. The agent can perform the following actions: move forward one cell, turn left, turn right, turn around, eat, and flee (turn and move forward). The agent’s health diminishes a small amount every tick. Also, health is decreased if a monkey attacks the agent; the agent tries to move into a cell with a rock, or tries to move outside of the world’s boundaries. Eating a hamburger increases the agent’s health substantially. These properties of the agent and its environment are summarized in the Table below.

Setup:
-­‐ With NetBeans running select File → Open Project…
-­‐ Browse to the ‘tutorialProjects’ directory and select alifeAgentExercises
-­‐ Click open project. Right-­‐click on the project in the Project view and select Set as Main Project.
 
  • Agent Exercise 1:

Objetivos:

- Explorar as funcionalidades do agente "ALife".

Task 1
Click on an occupied cell in the AlifeEnvironment GuiPanel, which appears in the upper left. Notice that the window just to the right now displays the cell’s contents. To the right of that the information about the cell and the objects it contains are displayed. You may have to resize the dividers to see the information. Clicking on an object in the objects list will display its attributes in the table below. Additionally all objects can be individually selected from the drop down list in this section to view object attributes.
 
A figura abaixo ilustra a atarefa 1. A seta vermelha indica a célula clicada na arena, onde tem uma pedra. O painel a direita é o painel de propriedades que apresenta informações sobre o status de ocupação da célula selecionada e sobre os elementos na mesma.  Ao selecionar o objeto contido na célula seus atributos e valores aparecem na tabela sinalizada em amarelo. Entre as informações que aparecem, id, size, name, health e container, está a coordenada da célula (container). O painel destacado mais a direita é a lista de objetos, que fica originalmente a esqueda.
 
A aplicação também apresenta os mesmos paineis já vistos e que compõe a arquitetura LIDA (PAM Table, PAM Graph, Global Workspace, Procedural Memory, etc).
 
 
 
STUDY QUESTION 2.1: Compare the GUI of the alifeAgent to that of the basicAgent. What are the differences, and why are they different?
 
A própria figura acima ilustra que o cenário da aplicação "alifeAgent" possue mais elementos, situações possíveis e maior complexidade nas avaliações do agente com relação à tomada de decisão. Com relação à GUI da aplicação "alifeAgent", esta acompanha a complexidade do ambiente e apresenta status e propriedades para cada elemento do cenário e sua participação no processo de formação de coalisões, análise e tomada de decisão por parte do agente. A aplicação "basicAgent", como o próprio nome indica, tem o propósito de introduzir os recursos básicos da arquitetura LIDA, com uma coleção restrita de objetos, atributos, eventos e ações - sua GUI é mais simples, mas ilustra também boa parte das funcionalidades da arquitetura.
 

 
Task 2
Inspect the “PAM Graph” GuiPanel. Try pressing the relax button to spread out the nodes and links. Zoom in and out by scrolling with mouse wheel. Also see the “PAM Table” GuiPanel for a different view of PAM’s nodes and links.

O painel “PAM Graph” apresenta a árvore de estados das conjunções de nós representantes de situações no ambiente e estados internos do agente. Situações estas sentidas pelo agente através dos “codlets” de percepção, conforme diagrama abaixo.

Quando o botão RELAX é pressionado algumas vezes, esta arvore passa a apresentar um estado dinâmico onde é possível visualizar um pequeno ponto passando entre os diversos estados – este pequeno ponto dinâmico é o agente e indica suas ações, ou ações sofridas por ele.

 

 
Task 3
Start the simulation. The agent navigates the world avoiding the evil monkeys and exploring when its health gets low. It eats the hamburgers when it can. Click on the ‘Task Queue” GuiPanel and pause the application. Look at the tasks that are scheduled to run at various ticks. Now click on the “Running Tasks” GuiPanel to view a list of all of the currently active tasks and their data.
 
 


  • ALIfe Agent Exercise 2:
Objetivos:
- Criar uma classe detector de características.
- Adicionar uma definição de tarefa no arquivo “factoryData.xml”.
- Adicionar uma declaração de tarefa no arquivo agent.xml.
- Adicionar uma declaração de tarefa nova baseado em uma já existente.
 
Preparation:
-­ From the Files view in NetBeans open the lidaConfig.properties file in the ‘configs’ folder of the alifeAgentExercises project.
Change the lida.agentdata property to configs/alifeAgent_ex2.xml. Save the file.
-­ Also in the ‘configs’ folder find and open the objects.properties file.
Change the quantity value (QTY) for food to 0 (it’s just to the right of the first equals sign).
 
A figura abaixo ilustra a preparação:
 
 

Task 0
Run the application and start the simulation. Choose the agent from the drop-­‐down list in the GUI and watch the agent’s health as it behaves in its environment. Notice how the agent fails to move when it has low health, i.e., health below 0.33. Quit the application.

Após a modificação, o cenário passa a ficar sem "Hambugers", portanto, o agente não tem como recuperar a energia gasta e não consegue andar depois de algum tempo:


 
Task 1
Go to the Projects view in NetBeans and right-­‐click on the icon for the alifeagent.featuredetectors package. Now select New → Java Class… to create a new class and name it BadHealthDetector. It will extend from BasicDetectionAlgorithm.java and should detect bad health, i.e., when health is below 0.33. You can simply copy the code of GoodHealthDetector.java changing the class name to BadHealthDetector and also modifying the if statement appropriately.
 
A figura abaixo ilustra a tarefa de implementação do detector "BadHealth":
 
 

 
Task 2
Add a BadHealthDetector task definition to factoryData.xml modeled after the other health detectors. First, open the factoryData.xml file. Go to the <tasks> section. Find the comment INSERT YOUR CODE HERE. Create a new task entry similar that of the FairHealthDetector. Give it the name BadHealthDetector and set its <class> tag value to be the qualified (package + classname) of the class you created in Task 1. The other tag values are exactly the same as the FairHealthDetector.
Xml files can be validated at any time by right clicking on the xml file body and selecting Validate XML. Validate and save the file.
 
A figura abaixo ilustra a declaração do novo detector no arquivo de configuração "factoryData.xml":
 
 

 
Task 3
Add a task to the declaration of the agent’s PerceptualAssociativeMemory module in alifeAgent_ex2.xml file.
First go to the <initialtasks> tag of the
PerceptualAssociativeMemory module declaration. Create a new task entry with the name BadHealthDetector. The tasktype is BadHealthDetector (you just created this type in the last task), the ticksperrun is 3, and add a node parameter of type string with value badHealth. The entry should look similar to the one for GoodHealthDetector.
Validate and save the file.
 
A figura abaixo ilustra a declaração do detector "BadHealth" no módulo PerceptualAssociativeMemory do arquivo de configuração do agent:
 

 
Task 4
Also in the agent xml file, add a predatorFrontDetector to the initial tasks of the PerceptualAssociativeMemory module. This task is similar to the previous one. Hint: model it after the predatorOriginDetector. The position parameter is 0 for origin and 1 for front. Since this is of tasktype ObjectDetector, you will not need to create a new Java class for this feature detector.
Save the file and run the application again. The agent now has two new feature detectors, and two new perceptive capabilities. Observe its behavior; it should now detect when it has bad health (see Perceptual Buffer GuiPanel) and it should begin moving when it has bad health. Also the agent should run away from the predator when it has a predator in front of it. Previously the agent would only flee if the predator was in the same cell as it.
 
A figura abaixo ilustra a declaração do sensor frontal contra predadores no agente:
 
 
 
STUDY QUESTION 2.2: Why does the agent’s behavior change in this way after the new feature detectors were added?
 
As regras e ações já existiam na Procedural Memory. Não eram executadas porque o agente não estava equipado com mecanismos para disparar os procedimentos. Com a inclusão dos detectores torna-se possível ativar os codlets que levam a estas ações.
 


  • ALIfe Agent Exercise 3:
Objetivos:
- Criar e modificar codlets de atenção.
- Aprender sobre os efeitos de se mudar os parâmetros dos codlets de atenção.
 
Preparation:
-­ In lidaConfig.properties file change the lida.agentdata property to configs/alifeAgent_ex3.xml. Save the file. Some of the agent’s attentional mechanisms have been removed; they will be restored during this exercise.
-­ In the ‘configs’ folder find and open the objects.properties file. Change the quantity value (QTY) for food back to 10.
 

Task 0

Run the application and start the simulation. Notice that the agent doesn’t react to predators at all.
 
STUDY QUESTION 2.3: What are the possible reasons the agent doesn’t flee?
A própria proposta da atividade já introduz o problema: neste novo arquivo de configuração do agente, alifeAgent_ex3.xml, foram omitidas algumas declarações de codlets de atenção. Por isto, o agente não percebe a aproximação de "predadores".
 
Veja a configuração original e a configuração atual, sem a declaração dos codlets de atenção:
 
 

Task 1

In this task you will create a predatorAttentionCodelet task in the AttentionCodelet module’s initial tasks. Open the alifeAgent_ex3.xml file, now (you can use the Netbeans Navigator) go to the AttentionModule declaration, go to the <initialtasks> tag and create a new task entry similar to RockAttentionCodelet.
The name will be PredatorAttentionCodelet, the tasktype will be NeighborhoodAttentionCodelet, ticksPerRun will be 5; nodes will be predator; refractoryPeriod will be 50 and initialActivation will be 1.0.
Save the file and run the application, now the agent will create coalitions (see the Global Workspace Panel) with predator nodes inside the coalitions’ content.
 
 
STUDY QUESTION 2.4: How might this affect the agent’s cognition and behavior?
Com a declaração do codlet de atenção para predadores, a informação de eventual perigo pode ser levada à consciência e, de acordo com a sua prioridade, fazer as coalizôes necessárias para informar os canais de ação através de comunicação broadcast e influenciar no comportamento do agente.
 

Task 2

Open the agent xml file and change the initialActivation parameter for the FoodAttentionCodelet to 0.01. (This task declaration is also in the <initialtasks> tag of the AttentionModule declaration.) Run the application until it starts moving and see if the agent ever reacts to (i.e., eats) any food it comes across. (It most likely won’t react.).
 
 
 
STUDY QUESTION 2.5: How does this parameter change affect the agent’s cognition?
Quanto menor o valor do "initialActivation", menor será a prioridade do referido codlet de atenção na formação de coalizões vencedoras na Global Workspace. Para este caso em particular, é como se tivéssemos diminuído o apetite do agente em 100 vezes. A necessidade de comer continua, mas a vontade já não é a mesma - teremos um quadro de deficiência energética.
 

Task 3
 
Open the agent xml file and reset the initialActivation parameter for the FoodAttentionCodelet to 1.0. Save the file and run the application. Set the tick duration to 40 in the GUI to slow the simulation speed.
Look at the upper half of the Global Workspace GuiPanel and notice how often coalitions containing ‘goodHealth’ appear there. It may help to pause the application and resize the table columns.
Now exit the application and look for the GoodHealthAttentionCodelet declaration in the <initialtask> tag of the AttentionModule module. Set the refractoryPeriod parameter to 10. Run the application again and notice how coalitions containing ‘goodHealth’ appears. The frequency should have increased.
 
 
Obviamente, aumentando 100 vezes o valor de ativação do codlet de atenção, é possível notar um aumento expressivo de coalizões iniciadas por este codlet, relacionado a GoodHealth.


  • ALIfe Agent Exercise 4:
Objetivos:
- Modificar o esquema da Memória Procedural.
- Usar um “inicializador” customizado para o módulo “Perceptual Associative Memory”.
- Obter uma estratégia de decaimento “non-default” através da “ElementFactory”. 
 
Preparation:
-­ In lidaConfig.properties file change the lida.agentdata property to configs/alifeAgent_ex4.xml. Save the file.
 
 

Task 0

Run the application and start the simulation. Notice that the agent doesn’t move from its cell unless its health drops below 0.66. (However, it will still move if an evil monkey comes close.)
De fato, percebe-se que o agente permanece parado até que um macaco se aproxime ou até que seu nível de saúde fique inferior a 0.66.
 

 
Task 1
 
In the alifeAgent_ex4.xml file and find the ProceduralMemory module. Inside this module’s declaration find the <param> tag named scheme.10b. Change the action name, which appears after the second pipe (|), to action.moveAgent. Optionally change the description of the scheme (the first part of the tag value). 
 
 
Save the file.
Run the agent and notice that it now moves even when it has good health.
 
Com esta configuração o agente passa a se movimentar, mesmo em estado de "boa saúde". 
 

Task 2

Now we will customize the initialization of some of the elements in PAM. The default Initializer for PAM, BasicPamInitializer, reads two parameters named “nodes” and “links” and creates Nodes and Links in PAM based on the specifications in these parameters (PAM objetiva). Nodes and Links created in this way will use default excite and decay strategies. In order to obtain elements with non-­‐default strategies, a custom Initializer is required. Most other modules can also be initialized with a custom Initializer.
Open the alifeAgent_ex4.xml file and find the PerceptualAssociativeMemory module declaration. In this declaration change the <initializerclass> tag value to alifeagent.initializers.CustomPamInitializer.
 
 
Save the file. Now go to the Project view in NetBeans and open the CustomPamInitializer class in package alifeagent.initializers. This class is a partial implementation of a custom initializer for the PAM of an agent in the aLife environment. This initializer will enable the agent to add customized nodes and links to PAM, which is not possible using the default initializer. In its current form, this class does two things:
 
    1. Adds a new Node to PAM labeled “object”
    2. Adds a new Link to PAM from the “rock” Node to the new “object” node.
 
The implication of this Link is that any time the agent perceives a rock; the object node in PAM will receive a portion of the rock node’s activation. For this task you will be creating a new link in PAM from “food” to “object”. This means that the “object” node will also receive activation when food is perceived (PAM relacional - lembrança). You can follow the instructions given in the comments of this class to complete this task.
 
 
 
Run the agent and look at the PAM table GuiPanel. There should be an entry for the “object” node. Also in the PAM graph GuiPanel you can find the “object” node with these two links attached to it. Before, this Node only received activation when the agent detected a rock. Now it will receive activation whenever the agent detects a rock or food. This “object” node may enter the PerceptualBuffer as part of percept if it has sufficient activation, just like any other PAM node.
(Note: It is possible to create a Node with two children using the default initializer for PAM. However, adding a non-­‐default decay strategy, as we will do in Task 3, requires the custom Initializer.)
 
 
Este trecho do tutorial explica melhor a formação de "nodes" e sua relação com os links e a própria percepção:
Nodes, Links, and NodeStructures
Nodes and Links are major data structures in the LIDA Framework. Both have activation, a measure of current salience, which can be excited in several situations and which decays over time.
A Node can represent features, objects, events, concepts, feelings, actions, etc. Every Node is grounded in a Node in PAM called a PamNode. Nodes are instantiations of PamNodesEvery Node in a simulation has a reference to its originating PamNode in PAM, as well as an id that uniquely identifies the Node.
A Link connects a Node to either another Node or another Link. A Link that connects two Nodes is known as a simple Link. On the other hand, a complex Link connects a source Node to a simple Link. For example, given two Nodes, B and C, connected by a simple Link, L2, a complex Link would be one that connects a third Node, A, to the simple Link L2. Additionally, Links have a LinkCategory attribute that specifies the nature of the relationship represented by the Link. For instance, a red ball can be represented by a “ball” Node connected to a “red” Node by a Link with LinkCategory “feature”.
 
Both Nodes and Links implement the Linkable interface, and have an ExtendedId that uniquely identifies any Linkable element.
The Framework allows the specification of different subtypes of Nodes and Links. In this way custom Nodes and Links can have their own implementation class that customizes their properties and functionality. All Node and Link instances, both default and custom types, are created dynamically by the ElementFactory (discussed below).
 
A NodeStructure is a graph-like structure composed of Nodes and Links, and is the “common currency” for information exchange between most modules. The NodeStructureImpl implementation provides methods to add, remove, or retrieve, and manage the Nodes and Links contained inside it. When a Node or a Link is added to a NodeStructure, a copy of the element is added (and returned) rather than the element itself. 
This prevents the same Java object from existing in multiple NodeStructures, a problematic situation. While the objects are different, the new Node retains (at least to start) the same attributes as its original Node including its id. This also allows the new element to have different parameters and/or functionality than the original element. For example, when a Node in PAM is added to the Workspace’s Perceptual Buffer, the new Node may have its own activation and different mechanism for its excitation and decay.
 
obs: o texto acima me chamou atenção para a categorização dos links, LinkCategory attribute. Tal conceito me parece a chave para se aumentar a complexidade e capacidade desta plataforma e aproximar sua implementação para um modelo de "mente".
 
A figura abaixo ilustra o painel "PAM Graph"  com o nó "object" e seus links de ativação, rocha e comida.
O nó "object" torna-se então mais uma possível entrada para o PerceptualBuffer, como parte do sistema de percepção, caso tenha ativação suficiente para tal.
 
 

O detalhe é que este caso exemplifica a capacidade de se tornar as implementações de estrutura de "nodes e links", sistema de percepção, tão complexas quanto  se verifica nas "mentes naturais", possibilitando implementações de artefatos psíquicos como lembranças secundárias e derivativas, sistemas de alertas e do próprio raciocínio - não apenas processos diretos de atenção -> atuação, como nos casos primitivamente reativos.


Task 3

Continuing in the CustomPamInitializer class, we want to adjust the DecayStrategy used by the “object” Node. The DecayStrategy governs how a Node’s activation is decayed over time. The available DecayStrategy types are defined in the factoryData.xml file. Go to this file now and in the <strategies> tag look for a strategy definition named slowDecay. Notice that the parameter for this strategy is very small which implies a slow decay rate. You are going to use this strategy for the “object” node. To do this copy the following code and add it in the CustomPamInitializer class. A comment in this class will indicate where to insert it.
DecayStrategy decayStrategy = factory.getDecayStrategy("slowDecay"); objectNode.setDecayStrategy(decayStrategy);
This code obtains the “slowDecay” strategy from the ElementFactory and sets it as the “object” Node’s decay strategy. Save this file and run the application. Find the object node entry in the PAM table GuiPanel. Now when the object Node is detected its current activation will remain high (1.0) for a very long period compared to the rock and food nodes (as well as most other nodes in this agent’s PAM).
 
Tal configuração, baixo decaimento de ativação para um node específico, pode ser utilizada também para ilustrar a capacidade da plataforma de exemplificar casos clínicos conhecidos na psicolologia. 
 
 
 
A figura abaixo ilustra uma situação bastante comum com esta configuração no painel "Perceptual Buffer" em que o node "object" é ativo pelo sensoriamento de uma pedra pelo agente. A tabela ao lado, PAM table, mostra que a ativação no node "object" continua alta mesmo após algum tempo da ocorrência do evento que o ativou - no jargão popular, este agente apresenta um quadro de "ideia fixa".
 
 


 

  • Advanced Exercise 1:

The agent currently does not do anything when facing a tree. When the agent is in a cell with a tree he will be safe from the evil monkeys. Add a new attention codelet declaration to agent xml file that attends to the “tree” node. Add a new scheme to Procedural Memory with a context of treeFront node, and the action action.moveAgent.

Na situação atual, não existe nenhuma regra ou ação relacionada ao evento do agente estar diante de uma árvore. As áreas com árvore são seguras contra os macacos, portanto é interessante que o agente busque refúgio e se mova até ela. Nesta atividade criamos um novo attention codelet para o arquivo de configuração alifeAgent_ex4.xml que atende a esta situação desejada:

 

Um novo schema para a memória procedural com o contexto do nó "treeFront" e a ação "action.moveAgent" também precisa ser adicionado:

Com esta configuração, o agente passa a entrar em uma área com árvore sempre que se dá de frente com ela e não haja um codlet de atenção com ativação maior.



 

  • Advanced Exercise 2:

The Action Selection module used for this project is fairly simple. Based on it, create a new Action Selection class, which extends FrameworkModuleImpl and implements the ActionSelection and BroadcastListener interfaces. Modify the agent xml file adding a new listener declaration where the ActionSelection is a BroadcastListener of the GlobalWorkspace. Change the declaration of the ActionSelection module in the agent xml file so that it uses the class that you have created. In this module try your own algorithm for selecting an action. For example, you can require that a Behavior’s context must be present in the current broadcast before it is eligible for selection.

 

Primeiramente adicionamos o novo listener no arquivo "alifeAgent.xml". O listener "ActionSelection" passa a ser  do tipo "BroadcastListener", do modulo GlobalWorkspace:

 

A declaração do módulo ActionSelection é então modificada considerando a nova classe criada:

 

A nova classe, estendendo FrameworkModuleImpl e implementando as interfaces ActionSelection, BroadcastListener, conforme orientação, foi criada. O código é basicamente o mesmo da classe original, BasicActionSelection, que não implementa a interface BroadcastListener mas sim a ProceduralMemoryListener. Na verdade, a nova classe poderia implementar também a ProceduralMemoryListener - o fato é que a proposta da atividade não é muito detalhada e exige um conhecimento mais refinado sobre a implementação da plataforma LIDA.

A parte inicial da nova classe ficou:

 

Uma das possibilidades de se mudar o algoritmo de seleção de ações seria validar o contexto do "Behavior" antes da seleção. Provavelmente esta mudança envolveria os métodos public Action selectAction()  e private Behavior chooseBehavior():

 

Esta atividade vai exigir mais tempo e envolvimento com o código para poder ser concluída. A proposta é muito genérica e exige algum tempo para se fazer uma mudança no algoritmo que realmente faça diferença e possa ser percebida na execução. Voltarei a este ponto, mesmo que seja após a conclusão da disciplina.



 

Conclusão:

Entre as três arquiteturas de plataformas computacionais inspiradas em cognição – SOAR, CLARION e LIDA, a arquitetura LIDA se mostra mais avançada em diversos sentidos:

- É acompanhada de uma série de trabalhos teóricos, já publicados e intensivamente discutidos pela comunidade científica - Franklin, S; Baars, B. J.; Dong, D.; entre muitos outros.

- A implementação da plataforma LIDA parece ser bastante fiel às teorias que embasam sua arquitetura e serve de laboratório para testes e comprovações destas mesmas teorias – o que leva a um relacionamento de crescimento sustentado da complexidade desta implementação.

- Os pacotes, nomes de classes, atributos e métodos parecem estar de acordo com o que foi definido para a arquitetura – isto torna a implementação amigável e navegável pelas pessoas que estudaram a teoria.

- A arquitetura/plataforma apresenta uma base sólida, bastante coerente e com vários artefatos interessantes. Porém, na minha concepção, percebo que existe uma infinidade de caminhos e possibilidades de se aumentar a complexidade desta plataforma e se aproximar de modelos de “Mentes Artificiais” realmente interessantes.

- A adoção da plataforma JAVA para sua implementação torna o sistema independente de plataforma e acessível à comunidade científica que, em muitos casos, apresenta aversão a linguagens e sistemas operacionais proprietários.

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer