Skip to content

conceitos coach playbook

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

O Playbook é uma estrutura alternativa para se criar coachs, ele funciona como uma máquina de estados onde cada transição (chamada de trigger) pode ser ativado por alguma flag vísivel no NeonFC e cada estado (chamado de Play) é um conjunto de strategy a serem atribuídas aos robôs.

Um exemplo dessa implementação pode ser vista no código usado para a IRONCup 2021:

import algorithms
import strategy
from entities import plays
import math
import time

from commons.math import angular_speed, speed, rotate_via_numpy, unit_vector

class Coach(object):
    def __init__(self, match):
        self.match = match

        self.playbook = plays.Playbook(self)

        one_to_one_play = plays.OneOneOnePlay(self)
        unstuck_play = plays.UnstuckPlay(self)

        stuck_trigger = plays.StuckRobotsTrigger(stuck_strategies=['attacker', 'midfielder'])
        wait_for_trigger = plays.WaitForTrigger(5)

        one_to_one_play.add_transition(stuck_trigger, unstuck_play)
        unstuck_play.add_transition(wait_for_trigger, one_to_one_play)

        self.playbook.add_play(one_to_one_play)
        self.playbook.add_play(unstuck_play)

        self.playbook.set_play(one_to_one_play)
    
    def decide (self):
        self.playbook.update()

Nesse coach, temos duas "jogadas": one to one e unstuck. E entre elas existem duas transições: stuck_trigger e wait_for_trigger.

No comando self.playbook.set_play(one_to_one_play) definimos que a jogada inicial será one to one. Dessa forma, o sistema irá rodar o que está descrito nesse objeto até que alguma transição seja satisfeita. Nesse exemplo, a transição stuck_trigger verifica se um conjunto de robôs com as estratégias passadas no construtor estão em estado de stuck. Caso estiverem, o Playbook troca para a jogada unstuck.

Atualmente, apenas esses dois triggers estão implementados, porém as implementações atuais servem de prova de conceito para um momento futuro, onde possamos criar transições para estratégias de bola parada.

Para entender como cada um desses objetos está implementado, olhe os módulos desse diretório.