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
- WorldServer 3D: aqui
- Cliente modificado do Soar: aqui
- WS3DProxy: aqui
Webstart
- WorldServer 3D: aqui
- Cliente modificado do Soar: aqui