You are here

Atividade 1 - Familiarização com TankSoar

Esta atividade consiste na familiarização da execução do programa TankSoar: essencialmente ele provê um ambiente similiar ao Eaters - jogo de tabuleiro com agentes se movimenta e realizando ações. Entretanto, o TankSoar oferece uma maior complexidade, com mais sensores e ações disponíveis para cada agente.

 
 
Tabuleiro de uma partida do TankSoar - reprodução do Tutorial 3.
 
 
Uma diferença importante com o jogo Eaters é o processo de execução/escalonamento de cada agente: uma vez que cada tanque poderá executar uma grande variedade de ações simplesmente analisando e elaborando as informações recebidas dos sensores, o TankSoar possui um processo de escalonamento que permite cada agente executar até que ele crie uma extensão no objeto "io.output-link", ou seja, defina uma ação para executar no tabuleiro, ou atinja um total de 15 ciclos de decisão do Soar. Esse escalonamento está ilustrado a seguir:
 
 
 
O jogo também estabelece um limite de 100 rodadas para auto reinciar os tanques - como se todos houvessem sido destruídos - caso durante essas 100 rodadas nenhum deles dispare um míssel.
 
Cada tanque ganha 2 pontos quando um míssel que disparou atinge outro tanque com o escudo desligado; ganha 3 pontos quando seu míssel destrói um tanque. Cada tanque perde 1 ponto quanto é atingido por um míssel enquanto está com o escudo desligado; perde 2 pontos quanto morre.
 
O jogo termina quando um tanque atinge 50 pontos.
 
 

1.1. Quais sensores disponíveis?

 
São muitos sensores disponíveis para cada agente, acessíveis a partir de extensões no objeto "io.input-link"; o tutorial os divide em 2 categorias - Primários e Secundários - descritos a seguir:
 
Primários:
 
  1. Blocked sensor"^blocked" - possui extensões para cada direção ("backward""forward""left" e "right") que indicam qual está bloqueada por qualquer tipo de objeto.
  2. Incomming sensor"^incoming" - também possui extensões para cada direção, indicando em quais delas um míssel foi disparado contra o tanque.
  3. Radar sensor: "^radar" - rastreia objetos à frente do tanque, cobrindo a direção imediatamente à frente do tanque e também uma posição à esquerda e outra à direita. Possui uma extensão para cada tipo de objeto ("energy""health", "missiles""obstacle""open" e "tank"); dentro de cada uma dessas extensões existem outras duas, indicando a distância do objeto ("distance") - medida apenas em termos de posições à frente (não distância necessária para se chegar do tanque até o objeto que, no caso de objetos à frente à esquerda ou direita seria diferente) - e indicando se o objeto está logo à frente, à direita ou à esquerda na frente do tanque ("center""right" "left" respectivamente).
  4. Rwaves (radar waves) sensor"^rwaves" - possui extensões para cada direção, indicando em qual delas ondas de radar foram lançadas para deterctar o tanque, indicando um oponente nessa direção.
  5. Smell sensor"^smell" - detecta o tanque mais próximo (usando distância de Manhattan, sem levar em conta a existência de obstáculos), indicando a distância até ele e a sua cor (característica estranha para um sensor de cheiro...).
  6. Sound sensor"^sound" - informa o tanque mais próximo que se moveu durante o último ciclo de decisão, desde que ele não esteja a uma distância superior a 7 blocos. Devolve a direção do caminho mais curto para o tanque.
 
Secundários
 
  1. Clock: "^clock" - contador de rodadas da partida.
  2. Direction"^direction" - direção absoluta ("north", "east", "south" e "west") absoluta para a qual o tanque está virado.
  3. Energy"^energy" - recarregador de energia.
  4. Energy recharger"^energyrecharger" - indicador se o tanque está ou não recarregando energia.
  5. Health"^health" - recarregador de saúde.
  6. Health recharger"^healthrecharger" - indicador se o tanque está ou não recarregando saúde.
  7. Missiles"^missiles" - pacote para recarga de mísseis.
  8. My-color"^my-color" - cor própria do tanque
  9. Radar-distance"^radar-distance" - potência atual do radar, indicando até qual distância ele pode analisar.
  10. Radar-status"^radar-status" - indicação se ele está ligado ou não.
  11. Random"^random" - um valor randômico entre 0.0 e 1.0.
  12. Resurrected"^resurrected" - indicação se o tanque ressucitou (mudando subtamente de posição) durante a última rodada.
  13. Shield-status"^shield-status" - indicação se o escudo protetor do tanque está ligado ou não.
  14. XY"^x" "^y" - coordenadas atuais do tanque.
 

1.2. Quais ações possíveis para cada tanque?

 
  1. Move - mover nas 4 direções; mover para o lado é chamado "slide" no tutorial.
  2. Rotate - rotacionar na mesma posição
  3. Fire - disparar míssel
  4. Radar - ligar/desligar radar
  5. Radar Range - selecionar a distância que o radar chega, mudando a sua potência
  6. Shields - ligar/desligar escudo
 

1.3. Quais objetos podem ser encontrados?

 
  1. Obstáculos - árvores ou rochas
  2. Health charger - carregador de saúde
  3. Energy charger - carregador de energia
  4. Pack of missiles - carga com 7 mísseis
  5. Tanks - outros tanques 
 
 

1.4. Tabelas de consumo de energia, saúde e pontuação

 
  • Energia:
  • 1000 - valor inicial
  • -20  - consumo pelo uso do escudo por uma rodada
  • -1 ~ -14 - consumo de energia pelo uso do radar, definido de acordo com a potência de uso; ligando-se o radar sempre na potência usual de 13 (não faz sentido ligar com 14, já que o tabuleiro tem 16 posições, as extremidades são sempre bloqueadas e o tanque ocupa pelo menos 1 posição)
  • +250  - carga recebida por rodada do carregador
 
 
  • Saúde:
  • 1000 - valor inicial
  • -400 - se for atingido por um míssil inimigo
  • -100 - se tentar mover para posição bloqueada
  • +150 - carga recebida por rodada do carregador
 
 

1.5. Criação de 2 agentes com "simple-bot.soar":

 
Com essas regras Soar os tanques tem os comandos básicos para batalhar: ligam radar, encontram-se, disparam mísseis, ligam o escudo.
 
 
Execução 2 tanques utilizando regras definidas no arquivo "SimpleBot.soar"
 
 
 

 

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer