Skip to content

conceitos o que e uma estrategia

Eduardo Makita edited this page Jul 21, 2023 · 2 revisions

Estratégias, dentro do NeonFC, são módulos cruciais para a tomada de decisão do sistema. Através delas nós implementamos os algoritmos e usamos de heurísticas para gerar comportamentos de ataque ou defesa. Estratégias representam o controle individual de cada robô.

Na prática, uma estratégia é qualquer classe dentro do NeonFC que herda strategy.BaseStrategy.Strategy. Essa classe age como um template com os métodos principais de uma estratégia, e são eles:

  • __init__ (construtor): Recebe a match, nome da estratégia (como string). Idealmente devemos passar qual algoritmo de controle esse sistema deverá rodar através do parâmetro nominal controller e os seus parâmetros por controller_kwargs (por padrão irá rodar o SimpleLQR).

  • start: Esse metódo é chamado pelo robot.start. Nele, o algoritmo de controle do robô é instanciado e qualquer algoritmo que dependa o objeto robot deverá ser instanciado aqui. Como o start pode ser chamado inúmeras vezes durante a partida (principalmente quando o coach tem troca de estratégias dinâmica) é importante sempre recriar todos os algoritmos dependentes de robot nesse método.

  • reset: método adicional para limpar algoritmos caso haja troca de robôs na estratégia. Não precisa ser implementado se não for necessário.

  • decide: Esse método deverá conter a parte responsável pela tomada de decisão propriamente dita, esse método deverá retornar o parâmetro esperado pelo controle definido anteriormente. A exemplo, o LQR recebe o vetor velocidade [Vx, Vy] desejado, já o PID recebe a posição [X, Y] desejada.

Um exemplo base que pode ser usado para criar estratégias é o pfScratch.

strategy: Geralmente deverá implementar um ou mais algoritmos, o uso deles é específico ao comportamento esperado.