Nesta aula, irá estudar e experênciar a utilização da arquitetura cognitiva artificial SOAR como um sistema de controle em um ambiente virtual. Para execução desta aula, será utilizado os seguintes códigos fontes de softwares juntamente com sua respectiva função como:
O DemoSOAR é um software que implementa o conceito de mente artificial que controla Animats presente no ambiente virtual proposto pelo software WorldServer3D. Ele utiliza-se da arquitetura cognitiva artificial denominada de SOAR, que basicamente ela executa regras de produção que são previamente projetadas e que manipula (grava e exclui) dados presente em um grafo (Memória de Trabalho), que pode realizar comportamentos diversos no Animat que o mesmo controla. Neste caso, o SOAR serve como controlador do Animat no mundo virtual.
Como visto nos tutoriais, o SOAR apresenta características fundamentais para ser considerada um sistema cognitivo artificial e algumas delas a capacidade de controle, a capacidade de aprendizado e a capacidade de armazenamento. Tendo em vista uma comparação com um sistema nervoso humano, o SOAR é a mente do Animat que é capaz de sensoriar e executar ações sobre o mundo em sua volta, as regras de produção é a consciência de um indivíduo que executa e controla as atividades no mundo e o grafo é a memória de trabalho do indivíduo.
O DemoSOAR e o ambiente WorldServer3D são aplicações independentes e distintas, portanto há a necessidade de existir uma ferramenta que servirá como um meio de comunicação entre ambos que neste caso estabelece um conexão via protocolo TCP/IP, consequentemente definindo alguns protocolos de comunição para ações do Animat no ambiente virtual. Por sua vez, a ferramenta utilizada para determinada responsabilidade é o WS3DProxy, nela está implementada protocolos de comunicação pré-determinados conforme os comandos do WorldServer3D.
Inicialmente, deve-se entender como o DemoSOAR importa as libraries do SOAR para poder utiliza-la. O SOAR foi desenvolvido em JAVA e apesar de ser desenvolvido em uma linguagem Multiplaforma, o SOAR apresenta suas libraries compiladas para diversos SOs como Mac OS, Distribuições Linux e Windows, então as libraries do SOAR são carregadas conforme o sistema operacional que o usuário esta utilizando naquele momento. Portanto, o DemoSOAR utiliza-se de um gerenciamento de JNIs (Java Native Interface) para selecionar quais libraries o mesmo deve carregar para execução conforme o sistema operacional que o usuário está executando. No código fonte do projeto do DemoSOAR apresenta um trecho de código que responsável por verificar na Figura 1 abaixo.
Figura 1 - Código Fonte Gerenciador de JNIs.
Podemos perceber na Figura 1 demonstrada anteriormente que o software DemoSOAR utiliza-se da library System(nativa do JAVA) para verificar em qual SO o mesmo se encontra e em qual versão é sua arquitetura (32 ou 64bits) com os seguintes códigos abaixo.
A partir desse momento, obtem-se um série de condições "if" verificando o SO/Arquitetura e consequentemente carregando as libraries correspondente. Para isso, o DemoSOAR utiliza-se da Classe NativeUtils. Vale ressaltar que este trecho de código está presente no método "main()" da classe SimulationSOAR.
A função da classe NativeUtils é localizar e carregar as libraries do SOAR conforme a seleção anterior. Para cada SO o SOAR apresenta suas libraries que são:
A classe NativeUtils apresenta outra função de grande importância que é carregar os arquivos relacionados a lógica operacional do SOAR (extensão *.soar). Internamente deste arquivo estão as regras de produção que irá realizar todo o sistema de controle do Animat. Abaixo a Figura 2 o trecho de código presente na classe SimulationSOAR.
Figura 2 - Código Fonte Carregando Regras de Produção SOAR.
A partir do momento que o DemoSOAR carrega todas as libraries do SOAR, o método "main()" instância a classe SimulationTask. A função principal desta classe é inicializar objetos no ambiente virtual do Animat juntamente com os objetos do SOAR e também inicializa a comunicação com WorldServer3D utilizando da classe WS3DProxy. Pode-se verificar no trecho de código a seguir na Figura 3.
Figura 3 - Código Fonte Inicializando Comunicação e Mundo Virtual.
Com o código acima demonstrado, pode-se observar que com a utilização da classe SimulationTask inicializa parâmetros do ambiente virtual "initializeEnviroment()" e "initializeCreatureAndSOAR()". O primeiro método é responsável por criar muros em volta do ambiente virtual, entretanto efetifivamente isso não acontece porque é passado o parâmetro booleano "false". Em seguida é executado o "initializeCreatureAndSOAR()" com os parâmetros: "soarRulesPath, soarDebuggerPath, soarDebuggerPort". O intuito principal deste método é: estabelecer comunicação com o WorldServer3D, inicializar o ambiente virtual, inicializar uma criatura(Animat) e inicializar a mente virtual SOAR com base no arquivo "soar-rules.soar".Após a execução dos métodos, o software entre em um laço onde executa os seguintes passos:
Com dito anteriormente, os softwares WorldServer3D e DemoSOAR são aplicações distintas que se comunicam utilizando o protocolo TCP/IP. Toda tomada de decisão gerada por parte do SOAR (encasulado no DemoSOAR) é convertida em comando (padrão WorldServer3D) e enviado ao ambiente virtual, em seguida, recebe a resposta para determinado comando. Com os comandos padronizados, obtem-se o conceito fundamental que entre as aplicações que existe um protocolo de comunicação, em outras palavras, uma lista de comandos de ações no WorldServer3D. Portanto, houve a necessidade de desenvolver uma ferramenta (Framework) de comunicação entre aplicações e o WorldServer3D, que neste caso é o WS3DProxy.
O WS3DProxy dispõe de métodos para diversas ações no mundo virtual, porem ele é instânciado pela classe SimulationTask que utiliza-o para envia alguns comandos que são:
Além de utilizar-se do WS3DProxy, a classe SimulationTask usa outra classe chamada SoarBridge, que é justamente a proposta de servir como "ponte" entre o SOAR e a criatura no mundo virtual. As responsabilidades são de converter os sinais sensoriais que foram enviados pelo WorldServer3D em WMEs na mente artificial(SOAR) via o método "setupStackHolder()" e por converter as tomadas de decisão realizadas pelo SOAR em comandos para criatura no mundo virtual utilizando o método "getReceivedCommands()".
O arquivo "soar-rules.soar" compor a mente artificial da criatura com regras referente ao comportamentos que ocorrerão. Os comportamentos ocorrem com o "chuncking" e aplicação dos operadores. No arquivo temos os seguintes operadores com as suas respectivas funcionalidades:
Quando há operadores selecionados ao mesmo tempo ou até mesmo ausência de "chuncking" de operador, o SOAR permite criar regras de resolução de impasses e preferência de operadores, porem deve-se informar a mente artificial qual operador tem preferencia sobre outro e neste caso o arquivo apresenta as seguites regras:
Na atividade 2, deve-se análise e otimizar o código do DemoSOAR e principalmente o arquivo "soar-rules.soar". De maneira resumida, o software DemoSOAR tem a meta de capturar jóia e alimentos que estão dentro de seu campo de visão. Pode-se perceber com a execução do DemoSOAR a maior meta da criatura é capturar jóias do que alimento, com anteriormente demonstrado temos mecanismo de regras de impasses que propõe a resolução deste problema.
A principal ação a se tomar é realizar alterações na mente da criatura, ou seja, alterar o arquivo SOAR. Primeiramente, deve-se verificiar os operadores responsaveis pela movimentação e orientação, que neste caso são: See Entity With Memory Count, See Entity Without Memory Count, MoveFood, MoveJewel e Wander. Portanto alterou-se a velocidade de rotação da criatura(de 1 para 10) no operador Wander, para que ela consigua perceber mais rapidamente os objetos presentes dentro de seu campo de visão. Em seguida, alterou-se a velocidade da criatura para busca-las de forma mais eficiente. Após isso, criou-se um ramo do WME "Creature" chamado "Target", nele estão links com os nomes das cores presentes no leaflet que consequentemente aponta para a quantidade necessária a ser pega. Conforme a criatura captura as jóias, é decrementado do valor do nó do link de cor corresponde. Assim, aplicou-se uma condição nos operadores "See Entity With Memory Count e See Entity Without Memory Count" para que a criatura apenas enchergue as jóias que devem ser capturadas e as que ainda não completaram a quantidade suficiente propósta pelo leaflet. Para maiores detalhes da aplicação, segue o código fonte juntamente com WebStart.
Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer