Em mais um tutorial que apresenta ferramentas sem indicar claramente como devem ser utilizadas, este quarto tutorial trás informações a respeito de como configurar os muitos parâmetros existentes nos diversos módulos do Clarion e também em como utilizar a memória de trabalho.
Parâmetros configuráveis
O tutorial indica que o funcionamento de vários dos módulos e componentes do Clarion pode ser configurado através de parâmetros; um exemplo são os limites de generalização e especialização das regras refináveis - RefineableActionRule(s) - que podem ser determinados através dos seguintes parâmetros:
Outro exemplo apresentado é o controle de ativação dos diversos métodos de aprendizagem implementados no ACS:
ActionCenteredSubsystem.GlobalParameters.PERFORM_RER_REFINEMENT = false;
ActionCenteredSubsystem.GlobalParameters.PERFORM_RULE_EXTRACTION = false;
ActionCenteredSubsystem.GlobalParameters.PERFORM_TOP_DOWN_LEARNING = false;
ActionCenteredSubsystem.GlobalParameters.PERFORM_BL_LEARNING = false;
É indicado que todo componente que possui parâmetros configuráveis terá uma classe "<component>Parameters" associada; no caso do "ActionCenteredSubsystem", a classe "ActionCenteredSubsystemParameters" inclui todos os seus parâmetros de funcionamento configuráveis:
Novamente fica claro que o uso do Clarion exige um conhecimento teórico mais aprofundado, uma vez que para realizar essas configurações é preciso conhecer os componentes e módulos existentes mas também seu mecanismo de funcionamento.
Parâmetros globais e locais
O tutorial apresenta a distinção entre configurar parâmetros GLOBAIS ou parâmetros LOCAIS. Os primeiros compreendem em modificar os parâmetros de um componente ou módulo no nível de CLASSE; dessa maneira, TODOS os objetos dessa classe que forem inicializados DEPOIS da mudança do parâmetro terão esse nova configuração. Em outras palavras, para que uma mudança de parâmetros no nível global faça efeito, ela tem que ocorrer ANTES do objeto daquela classe ser instanciado.
Exemplos de mudança de parâmetros no nível global são:
RefineableActionRule.GlobalParameters
ou
ActionCenteredSubsystem.GlobalParameters
Utilizando a configuração LOCAL de parâmetros, esses são alterados diretamente no nível do OBJETO de uma determinada classe ficando, dessa maneira, válidos apenas para aquela instância específica. Um exemplo apresentado, do código de "HelloWorld - Full.cs" , é o seguinte:
Este exemplo é ilustrativo do fato de que a mudança do parâmetro no nível local pode ocorrer até mesmo DEPOIS de que o objeto seja ATIVADO (via "Agent.Commit()").
Uso da Memória de Trabalho
A segunda parte deste tutorial é a respeito do uso da memória de trabalho; de uma forma geral ela é definida como um contâiner onde o agente armazena informação a respeito do ambiente, sendo que qualquer informação pode ser armazenada sob a forma de CHUNKs.
A memória de trabalho está localizada no ACS, mas toda a interação com ela é feita a partir da classe "Agent"; por exemplo, seu conteúdo pode ser acessado através da seguinte sequência de código:
IEnumerable<Chunk> wmContents =
(IEnumerable<Chunk>)John.GetInternals (Agent.InternalWorldObjectContainers.WORKING_MEMORY);
Sem estar explícito no tutorial, a ideia que permeia o uso da memória de trabalho é o armazenamento de elementos transientes, mas que precisam ser lembrados para os ciclos cognitivos subsequentes.
Dessa forma, é indicado que toda informação contida na memória de trabalho compõe um conjunto INTERNO de informações sensoriais e é ATIVADO em conjunto com a "SensoryInformation" passada como entrada de cada ciclo cognitivo, utilizando o nível de ativação com a qual o CHUNK foi incluído na memória de trabalho (ver adiante).
Como a memória de trabalho pode conter qualquer tipo de CHUNK, ela não define uma subclasse específica de CHUNK, tratando-os a partir da superclasse.
De forma similar aos GoalChunks, um CHUNK pode ser ATIVADO - ou inserido - dentro da memória de trabalho manualmente ou através de um objeto "WorkingMemoryUpdateActionChunk", o qual inclui uma sequência de comandos de ativação para CHUNKs na memória de trabalho.
A ativação manual é feita a partir dos seguintes métodos da classe "Agent":
Agent.SetWMChunk (<which-chunk>, <activation-level>)
Agent.ResetWMChunk (<which-chunk>)
Já a ativação via "WorkingMemoryUpdateActionChunk" é feita a partir da adição de "WorkingMemory.RecognizedActions", como no exemplo a seguir, retirado do código exemplo "PrisonersDilemma - Simple.cs", o único que utiliza a memória de trabalho:
De maneira similar ao GoalChunks, são reconhecidas as seguintes operações para um "WorkingMemoryUpdateActionChunk":
Através do uso de "WorkingMemoryUpdateActionChunk" não parece ser possível definir o nível de ATIVAÇÃO de um CHUNK, enquanto armazenado na memória de trabalho.
Para que um "WorkingMemoryUpdateActionChunk" seja utilizado, ele precisa ser associado como saída de algum objeto funcional; no tutorial é citado como exemplo o seu uso como SAÍDA de uma IDN dentro do ACS; no exemplo mencionado acima, seu uso é através de uma "FixedRule":
Comentários finais
Este tutorial apresentou mais 2 elementos do framework Clarion, que são a customização dos componentes via parâmetros e o uso da memória de trabalho. Para a customização ficou claro que maiores conhecimentos teóricos são necessários; já para o uso da memória de trabalho não fica totalmente claro, somente via o tutorial, como que ele pode auxiliar na composição de um agente.