You are here

Aula 7 - SOAR: Controlando o WorldServer3D - Atividade 2

Atividade 2

A seguinte proposta para a criatura possa completar a leaflet está sendo proposta:

1. Criação de dois novos elementos no Working Memory, sendo:

- Elemento com a informação da cor requerida

- Outro elemento para verificar se a leaflet foi completada.

A figura 1 representa a estrutura do Working Memory com a proposta de inclusão desse dois novos elementos:

S (estado) ^IO -> l1 ^input-link → L1 ^CRIATURE → C1 ^PARAMETERS → P1 ^COMPLETEDLEAFLET

S (estado) ^IO -> l1 ^input-link → L1 ^CRIATURE → C1 ^PARAMETERS → P1 ^GOAL

Figura 1

O novo elemento ^GOAL possui a cor que é procurada, já o novo elemento ^COMPLETEDLEAFLET armazena 0(zero) se toda a leaflet ainda não foi completada ou 1 se todos os objetivos estão completos.

Obtenção do ^GOAL

O elemento ^GOAL é obtido a partir da leaflet. Primeiro são armazenados em uma lista as cores das Joias que fazem parte da leaflet. Depois é obtida, de forma aleatória, uma das cores e ela faz a definição do elemento ^GOAL, assim somente é feita a procura de uma cor por vez. Se a criatura completar a sua leaflet o método irá retornar um String vazio. A figura 2 apresenta o código em Java que realiza essa tarefa.





Figura 2

Criação do ^GOAL e do ^COMPLETEDLEAFLET

O novo elemento ^COMPLETEDLEAFLET contem a informação para que a finalização do leaflet seja verificada. Se não existem mais objetivos a ser cumpridos então o valor é 1. A figura 3 apresenta esse código em Java.




Figura 3



Delivery

A criatura deve parar após terminar os objetivos da leaflet, para isso foi criado uma nova ação. O Delivery é acionado sempre que todas as joias do leaflet foram obtidas. As figuras 4 e 5 apresentam a função que processa o comando Delivery.




Figura 4




Figura 5



Regras no SOAR

As regras do arquivo soar-rules.soar foram modificadas para atender a nova proposta, as regras: seeEntityWithMemoryCount e seeEntityWithoutMemoryCount foram alteradas para que armazenem na memoria somente a cor que está definida na ^GOAL, as figuras 6 e 7 apresentam as modificações.


















Figura 6




















Figura 7

O valor para a comida não é armazenado, pois só é procurada quando o nível de energia da criatura é menor igual a 400. A figura 8 apresenta a regra do soar para mover em direção à comida.






















Figura 8



A partir da verificação do valor do elemento ^COMPLETEDLEAFLET será possível verificar se a criatura terminou a lista de joias. Esse processo está apresentado na figura 9.




















Figura 9



Foram inseridas outras regras do tipo operators preferences para resolver possíveis impasses da criatura.

Resultado:

O resultado das simulações são interessantes, mesmo que a criatura possa ignorar joias que estão mais perto do que outras, pois a seleção da joia é feita de forma aleatória.

A figura 10 apresenta a criatura indo em busca da joia de sua leaflet.




Figura 10



Após a criatura terminar sua leaflet o cliente informa e o programa em SOAR fica em halt.






Código fonte

  1. WorldServer 3D: aqui
  2. Cliente modificado do Soar: aqui
  3. WS3DProxy: aqui

Webstart

  1. WorldServer 3D: aqui
  2. Cliente modificado do Soar: aqui

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer