You are here

Tutorial 9: Useful Features

 

Tutorial 9: Useful Features 


Viewing an Agent’s “Internals”

Muitas vesses é desejável conhecer os aspectos internos do agente, para conhecer este tipo de informação é possível utilizar o método GetInternals localizado na classe Agent. Por exemplo, se o agente esta utilizando o aprendizado bottom-up, e se quer conhecer que regras o agente aprendeu, o seguinte código apresenta como obter essa informação

 

O método GetInternals toma como parâmetro o enumerador InternalContainers, este enumerador lista todas as funções internas que estejam disponíveis dentro do Agente. Algumas destas informações são:

  • Drives
  • Action rules
  • Implicit decision networks
  • Associative rules
  • Associative memory networks
  • Associative episodic memory networks
  • Meta cognitive modules

O código anterior apresenta como saída:

Logging (using Trace)

As vesses é importante ver o estado interno do Agente enquanto ele esta fazendo alguma tarefa dentro da simulação. O Clarion implementa vários níveis de informação que podem ser ajustados mediante o parâmetro World.LoggingLevel e o enumerador TraceLevel. Os possíveis níveis que podem ser escolhidos são:

  • TraceLevel.Off: Não é realizado nenhum Logging
  • TraceLevel.Error: Só alguns comportamento anormais são logging
  • TraceLevel.Warning: O sistema realizará um logging quando alguma informação importante ocorra durante a simulação
  • TraceLevel.Info: Similar ao Warning, só que produz mais informação
  • TraceLevel.Verbose: É o mais detalhado de todos, ele prove informação de todo o que acontece no agente durante a simulação.

Para estabelecer qualquer destes níveis simplesmente é necessário:

 

The Implicit Component Initializer

Uma das coisas mais difíceis de fazer em agentes baseados em Clarion é o processo de configurar e pre-treinar componentes implícitos, como uma rede neural. Para simplificar isso é utilizada a classe ImplicitComponentInitializer.

 

Pre-Training

É possível adicionar conhecimento a ao agente através de uma rede que foi treinada com informação adquirida previamente, para isso é utilizada uma classe chamada ImplicitComponentInitializer.
Para poder fazer o pre-treinamento são necessárias duas coisas:

  1.  Um objetivo treinável
  2. Um treinador que contem as saídas desejadas.

O treinador pode ser qualquer tipo de componente implícito (ImplicitComponent) como uma equação, uma lookup table, etc. Neste exemplo se usará a classe GenericEquation. O objeto que será treinado será uma rede backpropagation (BPNetwork). Usando o método Train do ImplicitComponentInitializer, o componente objetivo aprenderá como retornar o valor de uma equação linear simples. do tipo Y=X especificada na GenericEquation.

A maneira de inicializar a GenericEquation é apresentada a seguir:

Como já foi apresentado no tutorial de Basic Customization é necessário adicinar um delegado ou um método com a mesma assinatura do que o delegado da GenericEquation.

O seguinte código mostra como são criadas dois pares de objetos dimensão-valor "X" e "Y", como é inicializada a rede de BP, por meio da função InitializeImplicitDecisionNetwork
e a equação genérica:

As estradas são adicionadas na rede e na equação. Finalmente todo é adicionado ao agente

Apos ter inicializado o treinador e o objetivo (rede) o seguinte que deve ser feito é gerar o data ser com os dados que queres ser aprendidos. Em gerar os dados estão disponível de
forma separada, neste exemplo os dados serão gerados pela equação, assim para cada valor de X a GenericEquation gerará seu correspondente valor de Y, neste casso a relação será Y=X.

Assim o dataset será gerado a partir de alguns valores de X que estarão entre um rango. Para gerar os valores de X. é usada a função range da classe ImplicitComponentInitializer. Este método recebe 3 parâmetros: o objeto associado, o nível de valores inferior, o nivel de valores superior e o incremento. Assim para gerar dados de 0 a 1 cada 0,1, o método será:

O seguinte é criar um novo DataSet usando o método NewDataSet da classe ImplicitComponentInitializer:

 

Agora se é possivel realizar o treinamento. O metodo Train toma as seguientes entradas:

  • The target
  • The trainer
  • The data sets
  • Uma condição de parada, que pode ser um numero fixo de iterações ou um valor minimo do Erro quadratico
  • O numero de iterações
  • O valor do Erro quadratico

Assim para o nosso casso a chamada do método Train é:

 

Auto-Encoding

O Auto-Encoding é a possibilidade de utilizar uma rede de Hopfield para obter conhecimento de forma não supervicionada, ou seja, gerar mapas auto-organizaveis e extrair padrões de dados de forma automática. Para isso Clarion utiliza a classe HopfieldNetwork.
Da mesma forma que o método Train anterior, o método Encode tem os seguintes parâmetros de entrada:

  • O objetivo
  • O DataSet
  • Uma condição de parada
  • Um numero de iterações

No seguinte exemplo é apresentada a maneira de utilizar a rede de Hopfield
Serão usadas 10 nós para codificar três padrões de ativação:

Assim se o data set apresenta algum padrão que seja obtido pela rede de Hopfield o método Encode retornara a rede treinada.

 

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer