You are here

Atividade 2 - Leitura do tutorial LIDA

Este tutorial se inicia com uma definição rápida a respeito do modelo LIDA:
 
"O modelo LIDA é ao mesmo tempo uma modelagem conceitual do funcionamento de mentes e também um modelo computacional que possibilita o criação de arquiteturas de agentes autônomos" (p.2)
 
É frisado que o framework LIDA é atualmente apenas uma implementação parcial do modelo LIDA.
 
 
Na sequência o tutorial elabora mais a definição do modelo LIDA e faz a sua associação ao framework; nessa sequência, apresenta um resumo do ciclo cognitivo:

"Durante cada ciclo cognitivo, um agente LIDA primeiramente percebe a sua situação atual da melhor maneira possível, atualizando suas informações a respeito tanto do cenário EXTERNO quanto INTERNO. Através de um processo de competição, tal como especificado pela teoria da memória de trabalho global, o agente decide qual parcela da situação reconhecida precisa de maior atenção. A difusão dessa parcela da informação - que é reconhecida como sua consciência - habilita o agente a escolher e executar a ação mais apropriada, completando assim o ciclo, durante o qual ocorre o processo de aprendizagem." (pp 2-3)
 
 
Como justificativa da criação de um framework está o fato de que agentes de SW inteligentes podem ser extremamente complexos e um framework facilita esse processo, ao constituir um esqueleto de uma aplicação, o qual captura de uma forma genérica as principais funcionalidades. Um framework também promove a reusabilidade.

Algumas terminologias do LIDA Framework:
  • Módulo: uma coleção coesa de dados e seus processos específicos de operação.
  • Tarefa: pequeno algoritmo que executa repetitivamente, implementando um pequeno processo.
  • Representações internas comuns: estruturas de dados internas.
  • Gerenciador de tarefas: implementa a executa simultânea de tarefas.
  • GUI configurável: utilizada para apresentar o estado interno dos processos de dados de um sistema.
  • Fábrica (factory): onde são criados as estruturas de dados comuns.
  • Estratégias (strategies): representam o encapsulamento de algoritmos comuns.
  • Parser XML: para ler e criar um agente a partir de um arquivo XML que declara suas características.
 

Relação entre o modelo e o framework LIDA

 
São apresentados seguintes pontos relacionando o mdelo ao framework LIDA:
 
  • O conceito de módulo é implementado pela interface FrameworkModule.
  • Módulos particulares no modelo são normalmente representados por uma interface específica no framework.
  • Processos relativos a módulos específicos são implementados como tarefas, as quais são implementações da interface FrameworkTask.
  • O conceito de tempo é representado pela unidade tick do framework.
  • A execução assíncrona do modelo é implementada pelo gerenciador de tarefas - TaskManager.
  • Comunicação entre módulos é implementada através do uso de listeners - uso do design pattern observer - com o uso da interface ModuleListener.
  • Nós e Links são implementados através de NodeStructures.
  • O processo de ativação de nós, links e outros elementos do modelo LIDA é implementado através do uso da interface Activable.
 
Assim:

"O framework LIDA disponibiliza uma estrutura genérica pra criação de agentes, utilizando a arquitetura definida pelo modelo LIDA." (p.5)
 
 
 

Funcionalidades básicas do framework

 
. MODULES e LISTENERS

Dos muitos módulos que fazem parte do modelo Lida, o framework  provê uma implementação default apenas para os módulos que são independentes do domínio do problema; para os módulos que tem uma dependência maior - como por exemplo o Environment e também a Sensory Memory - são fornecidos apenas interfaces.
 
Como mencionado anteriormente, Listeners são utilizados para implementar a comunicação entre módulos; um exemplo é a interface BroadcastListener, que deve ser implementada por módulos que desejam receber o broadcast das informações que chegam à consciência; esses módulos devem se adicionar ao GlobalWorkspace através do seu método "addBroadcastListener()".
 
Existe o conceito de módulos associados, que representam uma ligação ainda mais intensa entre módulos, permitindo que haja - por exemplo - a troca direta de informações. Módulos associam-se através do método "addAssociatedModule()" da interface FrameworkModule.
 
 
. TASK, TASKSPAWNERS e TASKMANAGER
 
As tarefas - tasks - são os processos do modelo LIDA; cada uma delas executa um algoritmo contido no seu método "runThisFrameworkTask()" e podem ser executadas uma única vez o repetidamente.
 
O gerenciador de tarefas - task manager - é o coração da engine de simulação do framework LIDA e cada agente possui o seu. Ele recebe as tarefas para executar enviadas pelos TaskSpawners associados a cada módulo, que são responsáveis pela geração das tarefas, registrando-as no gerenciador.
 
O ciclo de execução do TaskManager é o seguinte:
 
  1. "Envelhece" (Decay) todos os módulos
  2. Executa todas as tasks escalonadas/definidas para o TICK corrente e espera pelo fim da sua execução

A execução pode ser concorrente, dependendo to tamanho do POOL de threads e da quantidade de tasks escalonadas para o mesmo TICK.

  1. Atualiza a GUI
  2. Incrementa o TICK corrente


. NODES, LINKS and NODE STRUCTURES
 
Nós e links são as principais estruturas de dados do framework LIDA. Ambos possuem uma ATIVAÇÃO que representa o nível de excitação do elemento.
 
Um nó pode representar funcionalidades, objetos, eventos, conceitos, sensações, ações; todo nó é derivado do PamNode.
 
Um link associa nós a outros nós - no caso de um link simples - ou associam um nó a outro link - nesse caso, é chamado de link complexo.
 
Tanto nós quanto links podem ser especializados, permitindo sua customização.
 
Uma estrutura de nós - node structure -  é uma representação em forma de grafo de conhecimento, capturado a partir de nós e links.

Quando um nó ou link é adicionado a um estrutura, é na verdade feita uma cópia - facilidade e flexibilidade para manipulação.



. ACTIVATION and STRATEGIES (design pattern)

Vários elementos do framework LIDA possuiem parâmetro de ativação: NODE(s), LINK(s), COALITION(s), CODELET(s), SCHEME(s), BEHAVIOR(s), entre outros. A ativação varia de [0.0 a 1.0].

Alguns elementos possuem também "base-level activation", utilizada para aprendizagem, representando a utilidade passada do elemento.

São definidas 2 interfaces - "Activatible" e "Learnable" - para implementar ambas ações - ativação e aprendizagem.

Elementos são normalmente removidos caso sua ativação caia abaixo de um limite ("removal threshold").

Ações de "excite()" e "decay()" - métodos da interface Activable - são facilmente configuráveis a partir de STRATEGIES correspondentes.

A versão corrente do framework não implementa algoritmos de aprendizado; métodos próprios podem ser feitos e devem manipular o "base-level activation".



. FRAMEWORK TOOLS
 
Algumas ferramentas adicionais do framework LIDA:
 
  • "ElementFactory" - Implementa "Singleton" e "Factory" design patterns e deve ser utilizado para criar instâncias de muitos dos elementos do LIDA - NODES, LINKS, TASKS, STRATEGIES, etc.
  • "Graphical User Interface (GUI)": Pode ser considerada a versão LIDA do "SOAR Debugger", mas com facilidades de configuração, manipuláveis dentro do próprio programa do agente.



INICIALIZAÇÃO DO FRAMEWORK

 
A inicialização do run-time do framework LIDA está num pacote específico - "initialization". A classe "AgentStarter": disponibiliza métodos para executar uma simulação; seu método "start()" executa os seguintes passos:
  1. Carrega arquivo com definições dos itpos de elementos dentro do "factory data file" - especificada pela propriedade "lida.elementfactory.data" do arquivo de configuração "lidaConfig.properties".
  2. Cria uma instância da classe "Agent", baseada nos conteúdos do "agent declaration file", especificada pela propriedade "lida.agentdata", também do arquivo de configuração "lidaConfig.properties".
  3. Cria a interface gráfica do framework, caso a propriedade "lida.gui.enable" seja "true", utilizando a configuração especificada nos arquivos "lida.gui.panel" e "lida.gui.commands".
  4. Carrega o agente.
  5. Carrega e apresenta a GUI.



ARQUIVO DE DECLARAÇÃO DO AGENTE


Classe "AgentXMLFactory" carrega o arquivo de declaração do agente; esse arquivo possui as seguintes TAGs de nível mais alto:
 
  • <globalparams>: opcional, contém parâmetros utilizados durante o processo de inicialização do módulo.
  • <taskmanager>: contém parâmetros de configuração do TaskManager.
  • <taskspawners>: contém subtags do tipo <taskspawner> que declara os tipos de TaskSpawner disponíveis para uso do agente.
  • <submodules>: definem classes e parâmetros necessários para criar os módulos do agente, através de subtags <modules>; opcionalmente, podem haver subtags <associatedmodule>, <initialtasks>, <initializerclass> ou mesmo <submodules>, definidos para uma tag <modules>.
  • <listeners>: declaram os listeners que realizam conexões entre os módulos do agente.




ARQUIVO DE DEFINIÇÃO dos FACTORY DATA


Define os elementos Strategy, Node, Link e Task que serão adicionados ao ElementFactory; possui as seguintes TAGs de primeiro nível:
 
  • <strategies>: define os tipos de Strategy - através de subtags <strategy> - que serão adiconados ao ElementFactory.
  • <node>: define os tipos de Nodes (subtags <node>) que serão adicionados ao ElementFactory.
  • <links>: define os tipos de Links (subtags <link>) que serão adicionados ao ElementFactory.
  • <tasks>: define os tipos de Tasks  (subtags <task>) que serão adicionados ao ElementFactory.












 

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer