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 DimensionValuePair, ExternalActionChunk 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. |