You are here

Atividade 2

Atividade 2


 

Controlando o WorldServer com SOAR

 

Proposta:

A proposta para que o robô consiga completar a leaflet foi a seguinte. Primeiro criou-se dois novos elementos no Working Memory, um elemento com a informação da cor requerida (que está dentro da leaflet) e outro elemento para verificar se a leaflet foi completada. Na seguinte figura apresenta-se a estrutura do Working Memory com os dois novos elementos em vermelho.

O elemento ^GOAL armazena a cor que é procurada, o elemento ^LEAFLETCOMPLETED armazena 0 se ainda não foi completada toda a leaflet ou 1 se todos os objetivos foram completos.

Obtenção do ^GOAL

O elemento ^GOAL é obtivo a partir da leaflet. Primeiro são armazenados numa lista as cores das Joias que fazem parte da leaflet. Depois é obtida uma das cores de forma aleatória e ela é assignada ao elemento ^GOAL. Assim somente uma cor é procurada à vez. Se o robô completo sua leaflet o método retorna um String vazio. A seguinte figura apresenta o código em Java que realiza o descrito anteriormente.

        

 

Criação do ^GOAL e do ^LEAFLETCOMPLETED

O elemento ^LEAFLETCOMPLETED contem a informação de finalização da leaflet. Se não contem mais objetivos a ser cumpridos então seu valor é 1. O seguinte código apresenta como é feito isto em Java.

Delivery

Para deter o robô após ele terminar os objetivos da leaflet, foi criado mais uma ação. O Delivery é utilizado quando todas as joias do leaflet foram obtivas. O código seguinte apresenta a função que processa o comando Delivery.

Regras no SOAR

Foram modificadas as regras do programa soar-rules.soar o primeiro cambio é modificar a regra seeEntityWithMemoryCount  e seeEntityWithoutMemoryCount para que armazene na memoria só as Joias da cor que está em ^GOAL, o seguinte código apresenta essa modificação.

A comida não é armazenada já que ela é procurada só quando o nível de energia do robô é de 400 ou menos. O seguinte código apresenta a regra do soar para ir por comida.

Foi criada uma regra para quando o robô termine sua lista de joias. Neste casso é verificado o valor do elemento ^LEAFLETCOMPLETED.

Foram agregadas regras de operators preferences e impasse solve para que o agente funcione corretamente.

Resultado:

O resultado das simulações são bastante bons, embora o robô pode ignorar joias que estão mais perto do que outras (devido a que a seleção da joia que vai procurar é aleatória) consegue ignorar as joias que não são parte de sua leaflet e procurar até que ache alguma que seja parte dela.

A seguinte imagem apresenta ao robô indo pela ultima joia do leaflet.

Quando o robô termina sua leaflet para, o cliente informa e o programa em SOAR fica em halt:

 

 


Arquivos

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

 

 


Fuentes

  1. DemoSoar.zip (Cliente)
  2. WorldServer3D.zip
  3. WS3DProxy.zip

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer