You are here

Aula 15 - Projeto

Projeto Final: LIDA - Controlando o WorldServer3D

Objetivo

Criação de um agente baseado no Framework LIDA que seja capaz de controlar a criatura no ambiente WorldServer3D. A criatura devera completar os leaflets que lhe forem atribuídos da mesma forma do que foi feito anteriormente nos projetos do SOAR e Clarion.

Relatório

Um novo projeto com o Framework LIDA foi criado no Netbeans a partir do tutorial do LIDA. De acordo com o que foi sugerido no tutorial foi criado o projeto LIDA_WS3D_Agent no Netbeans, foi adicionado o arquivo WS3DProxy.jar para prover uma interface para o WorldServer3D.

Passos para a implementação de agentes usando o Framework LIDA baseado nos códigos do edu.memphis.ccrg.lida:

a. Criação de uma classe para representar o mundo (Environment), estendendo environment.EnvironmentImpl

    • Método init: inicia a conexão com o WS3D e cria uma criatura;

    • Método getState fornece informações sobre os objetos no mundo;

    • Método processAction executa as ações selecionadas.

    b. Criação da classe para representar a memória sensorial do agente (SensoryMemory), estendendo: sensorymemory.SensoryMemoryImpl

    • Método runSensors: obtém as informações sensoriais através da chamada ao método getState, da classe Environment;

    • Método getSensoryContents: fornece as informações para os codelets de percepção (perceptual codelets).

    c. Criação das classes para detecção dos objetos e situações relevantes ao agente (feature detectors), os codelets de percepção, estendendo pam.tasks.BasicDetectionAlgorithm

    • Método init: define que informação, ou conteúdo sensorial, o codelet deve detetar;

    • Método detect: obtém essa informação da memória sensorial através da chamada ao método getSensoryContent, da classe SensoryMemory.

    d. Declaração de elementos nos arquivos de declaração do agente, LidaWs3dAgent.xml, e de definição dos elementos utilizados (tipos de nodes, links, strategy e task), factoryData.xml

    Nodes definidos:

    • done, representa a situação em que todos os leaflets foram completados e entregues

    • lowEnergy, representa o nível de energia menor ou igual a 400 unidades

    • enoughEnergy, representa o nível de energia superior a 400 unidades

    • food, representa a presença de comida no campo visual da criatura

    • thingAhead, representa uma jóia ou comida a uma distância menor ou igual a 50 unidades

    • leafletJewel, representa uma jóia no campo visual do agente e que consta de um dos seus leaflets

    • noLeafletJewel, representa a situação inversa a anterior

    • completeLeaflets, representa que um ou mais leaflets foram completados

Todas essas informações foram obtidas através da interface WS3DProxy, na classe Environment e repassadas como descrito anteriormente.

A cada um dos detetores, corresponde um codelet de atenção, que se encarregará de encaminhar as informações para o Global Workspace.

As decisões vencedoras no Global Workspace passarão para a memória procedural que instanciará esquemas com o contexto e as ações correspondentes.

Esses esquemas passam para o módulo de seleção de ação que por sua vez encaminha a ação selecionada para o módulo Sensory-Motor.

E por fim deverá mapear a ação para o algoritmo correspondente e enviará para o módulo Environment através da chamada ao método processAction.

Os resultados das ações executadas no mundo retornarão ao agente na próxima atualização do estado, repetindo o ciclo.


A figura a seguir apresenta o arquivo LidaWs3dAgent.xml.



Figura 1

A figura a seguir mostra a estrutura do Enviroment.



Figura 2



A figura a seguir exibe a criatura no Worldserver3D:

Figura 3



A interface do LIDA será apresentada na próxima figura.

Figura 4

A figura abaixo ilustra a saída da execução do agente de controle no Netbeans.



Figura 5





As figuras a seguir ilustram o status da criatura em dois momentos do jogo.




















Figura 6





















Figura 7



O projeto WS3DProxy foi alterado para se adequar ao LIDA, métodos auxiliares nas classes Creature, Leaflet e Thing foram adicionados. As alterações permitiram testar se uma jóia pertence a um dos leaflets, se um leaflet está completo e a ordenação dos objetos no campo visual, com base na distância até a criatura. Também, foi removida a instanciação de Creature como Singleton.


Os códigos fonte da versão modificada do WS3DProxy podem ser obtidos no link: WS3DProxy.tar.gz.

A versão modificada do WorldServer3D pode ser executada pelo link: WorldServer3D e os códigos fonte podem ser obtidos no link: WorldServer3D.tar.gz.

O código fonte do projeto LIDA_WS3D_Agent pode ser obtido pelo link: LIDA_WS3D_Agent.tar.gz, o Webstart do projeto está disponível neste Link LIDA_WS3D_Agent.

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer