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](https://github.com/project-neon/NeonFC/blob/master/strategy/tests/pfScratch.py). ```strategy```: Geralmente deverá implementar um ou mais algoritmos, o uso deles é específico ao comportamento esperado.