You are here

Aula 3

 

 

A primeira atividade consiste em rodar um exemplo simples do Eaters utilizando o exemplo do tutorial move-to-food.soar.

Inicialmente o exemplo foi rodado e algumas informações puderam ser notadas, como exemplificadas nas figuras Figura1.1 e Figura1.2. Nessas figuras é possível visualizar no Soar as informações de Entrada e Saída (^io WM).

Figura1.1 - Inputs

Nesse exemplo o Input mostra os WME relacionados ao Eater Puple. As posições adjacentes tem os elementos Leste E3, Norte N1, Sul S3 e Oeste W1. Ao imprimir esses elementos, vemos que E3 é vazio, N1 bonusfood, S3 bonusfood e W1 normalfood. é Possível explodir a árvore e ver quais sao os elementos adjacentes desses itens.

Figura1.2 - Outputs

No output acima, é possível ver que o comando para mover para Oest foi enviado, e o mesmo esta completo.

A lógica desse exemplo é simples. A proposição do operador é feita caso identificado um alimento em uma das celulas adjacentes do eater. Caso haja, o operador para mover em direção a esse alimento é proposto, e assim o Soar escolhe para qual caminho seguir.

Uma regra existente nessa lógica é o apply*move-to-food*remove-move. Essa regra é utilizada para remover os movimentos que ja foram executados do output. Isso é feito para que não haja sobrecarda da memória de trabalho. Isso pode ser notado na diferença entre a Figura1.3 e Figura1.4.

Figura1.3 - Output Sem  apply*move-to-food*remove-move

Figura1.4 - Output Sem  apply*move-to-food*remove-move

 

Esse programa tem limitação caso não tenha mais alimentos em nenhuma das posições adjacentes do eater, entrado assim em um estado de "lockup". Podemos alterar a regra de proposição para incluir as posições vazias tambem nas proposições, ou então expandindo a visão para além da célula adjacente.

Agora iremos explorar alguns elementos durante o desenvolvimento que ajudam na resolução da limitação descrita anteriormente. Basicamente o item mais importante aqui é a utilização das preferencias e a utilização da técnica que evita a última posição, que nos ajudarão a escolher o melhor caminho a se seguir durante a resolução do problema.

Codigos utilizados nessa atividade:

Figura2.1 - Move to North

Figura2.2 - Move to Food - Usando writes para debug

Figura2.3 - Move to food - Setando preferencias para evitar empty e dar prioridade a bonusfood

Figura2.4 - Jump to food

Figura2.5 - Evitando posição anterior

Dentre essas atividades, é possível notar algumas limitações, por exemplo o Move to Jump, nunca soluciona o problema pois afeta somente metade dos elementos no mapa. Move to north vai sempre no sentido norte. Move to Food com preferencia e evitando a posição anterior, por mais que terminem o jogo, não tem uma eficiencia muito boa.

Aqui podemos checar o código desenvolvido com melhor eficiencia se comparado com o exemplo utilizado nas atividades anteriores. Durante o desenvolvimento desse código foi possível estudar a utilização do Visual soar para solucionar problemas de sintaxe.

Figura3.1 - Visual soar para resolução de sintaxe

Esse código consiste na junção de elementos de Jump e Move, histórico de movimentação, preferências para posições com comida, ainda melhor quando a comida for do tipo bonus.

 PreferenciaEvitar ultima posiçãoUltima Atividade
 564717748
 993772605
 44431325590
 576654708
 567478472
 1025728613
 1239869449
 710720549
 1145399440
 2447505259
Média1370,9716,7543,3

Quadro1 - Quantidade de decisões para resolução do problema utilizando diversos elementos estudados nessa atividade

É possível notar no quadro acima que quanto mais regras e mais bem elaboradas elas são, melhor o Soar resolve o problema.

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer