You are here

Aulas 10 e 11 - Clarion: Controlando o WorldServer3D

Clarion: Controlando o WorldServer3D

 

Objetivo

Utilizar a arquitetura cognitiva Clarion para controlar uma criatura artificial no WorldServer3D, de modo análogo ao que foi feito com o SOAR. Para tanto, é necessário entender o funcionamento do Clarion, e desenvolver uma instância da arquitetura Clarion para controlar a criatura.

Relatório das Atividades

O programa ClarionDemo foi alterado para que a criatura procure completar os leaflets que lhe forem atribuídos.

Inicialmente, o comportamento da criatura foi implementado apenas com o uso de regras fixas, de uma forma mais simples.

Se houver tempo, outras abordagens serão tentadas, como, por exemplo, o uso do Motivational Subsystem.

A lógica da solução é seguinte:

  • Se há uma parede à frente, a até 61 unidades de distância, a criatura permanece girando sobre o próprio eixo, no sentido horário
  • Se não há nenhuma jóia pertencente a um leaflet em seu campo de visão, a criatura pemanece girando sobre o próprio eixo, no sentido horário
  • Se há uma jóia à frente, a mais de 30 unidades de distância, em seu campo de visão, a criatura se dirige até ela
  • Se há uma jóia à frente, a até 30 unidades de distância, em seu campo de visão, a criatura a pega
  • Se todos os leaflets estiverem completos, a criatura para

O primeiro passo para a implementação foi a criação das classes Leaflet e LeafletItem, e a modificação da classe Creature, no projeto WorldServerLibrary. As duas primeiras representam um leaflet e seus elementos e a última foi modificada para acrescentar a lista de leaflets para a criatura. Também foram incluídos métodos para testar se uma jóia pertence ao leaflet, se todos os elementos do leaflet foram obtidos e para informar o score obtido pela criatura.

Ainda no projeto WorldServerLibrary, na classe WorldServer, foram criados métodos para a geração de leaflets e modificado o método ParseGetCreatureStateResponse para incluir um parser para os leaflets da criatura.

Na classe Main do projeto ClarionDEMO foram alterados os métodos:

  • MainClass, para popular o ambiente do WorldServer3D com jóias (3 de cada tipo) e para gerar leaflets para a criatura
  • agent_OnNewVisualSensorialInformation, para obter as informações da criatura, da jóia mais próxima e da jóia mais próxima pertencente a um leaflet
  • agent_OnNewExternalActionSelected, para incluir o tratamento para as novas ações definidas para a criatura (GOTO, GET, END)

Por fim, a classe ClarionAgent do projeto WorldServerAgent sofreu as seguintes alterações:

  • foram incluídas as ações GOTO, GET e END
  • foram definidos variáveis dos tipos DimensionValuePairExternalActionChunk e FixedRule para definir as condições de entrada e as ações correspondentes aos novos comportamentos da criatura
  • as regras fixas definidas foram adicionadas à configuração do subsistema ACS (no método SetupACS)
  • as novas condições de entrada e seus níveis de ativação foram adicionados ao SensoryInformation da criatura, através do método MakePerceptionFromSensorialInput

Observações:

  • foi utilizado o atributo reward do objeto Thing para "marcar", durante o parser da resposta ao comando SendGetCreatureState da classe WorldSever as jóias pertencentes a um leaflet e simplificar a sua identificação no método MakePerceptionFromSensorialInput da classe ClarionAgent
  • de forma a simplificar a implementação, não foi adicionada a ação deliver; a criatura simplesmente para ao perceber que já obteve todas as jóias definidas em seus leaflets 

Foi utilizada a mesma versão do WorldServer3D usada na Aula 7, onde as classes Main, Creature e Leaflet foram modificadas para contabilizar as jóias de um leaflet já obtidas e impedir o deliver de um leaflet incompleto ou já entregue.
A versão modificada pode ser executada pelo link: WorldServer3D e os códigos fonte podem ser obtidos no link: WorldServer3D.zip.

Os executáveis podem ser obtidos no link: ClarionDemoExe.zip e os códigos fonte no link: SimulationClarion.zip.

O resultado da execução é mostrado nas Fig. 1 e 2.

Fig. 1 - Ambiente WorldServer3D ao final da execução.

 

Fig. 2 - Console do MonoDevelop ao final da execução, mostrando o score final obtido.

 

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer