You are here

Tutorial 2: Setting Up & Using the Goal Structure

 

Tutorial 2: Setting Up & Using the Goal Structure

 

Setting Up the Goal Structure

Aqui se falará como é configurado e usado a estrutura de objetivos. De forma geral a estrutura de objetivos é um contenedor dentro do agente que contem os objetivos do agente (Na forma de objetos do mundo tipo GoalChuck). Esta estrutura está localizada no nível superior do MS (Motivational Subsystem). Todas as iterações desde o entorno de simulação são feitas a través da classe Agent. Pode-se obter o conteúdo da estrutura de objetivos utilizando o método GetInternals.

//Gets all of the items in the goal structure
IEnumerable<GoalChunk> gsContents = (IEnumerable<GoalChunk>)John.GetInternals
(Agent.InternalWorldObjectContainers.GOAL_STRUCTURE);

//Gets the current goal
GoalChunk currentGoal = John.CurrentGoal;

Como as ações, os objetivos são representados como chunks, ou seja, usando a classe GoalChunk e são inicializados a través do objeto World:

GoalChunk g = World.NewGoalChunk();

Existem dois parâmetros que podem ser estabelecidos para modificar o comportamento da estrutura de objetivos. Eles estão localizados nos parâmetros da classe MotivationalSubsystem e podem ser usados para especificar:

  1. O comportamento da estrutura de objetivos, isto é, deveria ser tratada como uma lista ou como uma pila?
  2. Como estabelecer a ativação do objetivo atual, ou seja, usar a ativação atual: especificada quando o objetivo foi estabelecido, ou usar a ativação completa?

As seguintes linhas apresentam como estabelecer estos parâmetros para o agente John:

John.MS.Parameters.CURRENT_GOAL_ACTIVATION_OPTION = MotivationalSubsystem.CurrentGoalActivationOptions.FULL;
John.MS.Parameters.GOAL_STRUCTURE_BEHAVIOR_OPTION = MotivationalSubsystem.GoalStructureBehaviorOptions.STACK;

As seguintes linhas apresentam como o objetivo é inicializado e usado como parte da entrada ao SimplifiedQBPNetwork usado no nível inferior do ACS

//Elided code initializing other world objects
GoalChunk g = World.NewGoalChunk();
Agent John = World.NewAgent("John");
SimplifiedQBPNetwork net = AgentInitializer.InitializeImplicitDecisionNetwork(John,
                                                      SimplifiedQBPNetwork.Factory);
net.Input.Add(g);
... //Elided code performing additional initialization for the network

Todos os objetivos no mundo são sempre especificados como parte da informação interna do sensor e serão automaticamente ativados no SensorInformation a seguinte vez que eles sejam percebidos.

Até o momento a gente só apresento como configurar ao agente para usar objetivos, agora é apresentado como é possível ativar esses objetivos. Existem duas maneiras de ativar os objetivos: a primeira é estabelecer os objetivos na estrutura de forma manual. A segunda é estabelecer os objetivos usando o “goal structure update action chunk.” que será apresentado mais na frente.

 

Manually Setting a Goal

A maneira mais simples de ativar (ou adicionar) um objetivo dentro da estrutura de objetivos é estabelecê-lo manualmente. Isso é feito usando o método SetGoal do agente.

John.SetGoal(g, 1);

São especificadas dois itens quando é chamado o método: O objetivo que será estabelecido e seu nível de ativação.

É possível remover um objetivo da estrutura usando o método ResetGoal. O seguinte código apresento como eliminar ou desativar o objetivo da estrutura:

John.ResetGoal(g);

 

Using Action Chunks

Em Clarion as ações que produzem uma atualização na estrutura de objetivos são definidas usando a classe: GoalStructureUpdateActionChunk. Por exemplo, suponha que a gente quer uma ação que estabeleça o objetivo g na estrutura de objetivos. O seguinte código produz isso:

GoalStructureUpdateActionChunk gAct = World.NewGoalStructureUpdateActionChunk();
gAct.Add(GoalStructure.RecognizedActions.SET, g);

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer