Atividade #1365
AbertaRefatorar modelo de Pass da SSL
Adicionado por Felipe Welington mais de 3 anos atrás. Atualizado mais de 3 anos atrás.
Descrição
Essa tarefa tem com o intuito, atualizar as premissas e verificações para a realização do passe, bem como unificar a lógica do pass, tentando torná-la mais simples e mais organizada, visto que, atualmente, há diversas plays de pass que depois de iniciadas continuaram, mesmo que em algum momento o chute ao gol seja a melhor opção ou um novo passe invés dessa ação.
Arquivos
AtributoPlays.png (71,2 KB) AtributoPlays.png | Felipe Welington, 21/04/2021 00:23 h |
Atualizado por Felipe Welington há mais de 3 anos
- Arquivo AtributoPlays.png AtributoPlays.png adicionado
Updates
1)Criação das seguintes plays:
- 5RobotsPassGamePlay
Play de passe no jogo com 5 robôs no ataque, possuem as seguintes roles:
1. PassBestRobotRole(nova)
2. PassObserverRole
3. PreparePassReceiver1
4. PreparePassReceiver2
5. FollowAtackerRole
Foi criado um atributo adicional, chamado factorpass, ou qual é um vetor float, formado por fatores dos robôs possíveis para o passe.
- 5RobotsNormalGamePlay
Play de default no jogo com 5 robôs no ataque, possuem as seguintes roles:
1. ShootRole
2. PassObserverRole
3. PreparePassReceiver1
4. PreparePassReceiver2
5. FollowAtackerRole
2) Criação de uma nova Role:
Como a play inicia com nosso robô com a posse da bola e os outros em posições, foi necessário criar uma nova role de passe direto em game, sem a necessidade de posicionamento, denominada PassBestRobotRole, a qual tem as seguintes tactics:
1. KickToBestRobotTactic(nova)
2. FollowAttackerTactic(a ser atualizada, visto que o FollowAtackerRole também possui tal tactic)
3) Criação de uma nova tactic:
Como a tactic KickToPassReceiverTactic foi formulada para plays especificas de passe, sendo assim utiliza-se cases para diferenciar cada play de passe, vendo que a nova play tem 5 robôs iria ficar com muitas novos cases. Dessa forma, surgiu uma nova Tactic com uma skill usando um for que utiliza do atributo factorpass da play 5RobotsPassGamePlay para saber quem irá dar o passe.
4) Mudança na chooseOffensivePlay
O factorpass é calculado como condição de início, visto que deve ser mais vantajoso a ocorrência do passe perante a ocorrência de um chute ao gol, nesse aspecto, como o factorpass é utilizado no pickrobots e nas tactics da play 5RobotsPassGamePlay, criou-se um atributo para receber esse valor a partir da condição de início, com isso pensando em possíveis novos atributos futuros para outras plays que estejam ligados a condição de início, liguei as plays ao game, o que antes não ocorria, pois a condição de início não contribuía com nenhum valor ao game. Vemos na imagem abaixo essa ligação:
5) Mudança em Obtenção dos Robôs em Skills:
Fiz leves mudanças em algumas skills, como a PassObserverSkill, pois antes era considerado a escolha baseada do robô a determinadas roles, o que limitava essa de ser utilizada em outras plays que não possuíam tal role.
6) Criação das condições de início:
- 5RobotsPassGamePlay ( A ser adicionado outras condições)
1. Robô tem que estar com a bola
2. O maior FactorPass de um Robô, tem que estar maior que os respectivos calculados no Gol, o que implica que é mais viável tocar do que chutar.
3. O comando é diferente de Stop
- 5RobotsNormalGamePlay
1. Condição default de Play em jogos ofensivos, em que escolheu-se manter 5 robôs invés de 2 no ataque.
2. Nenhuma play está disponível além dela.
7) Criação das condições de Termino:
- 5RobotsPassGamePlay ( A ser adicionado outras condições)
1. Juiz deu comando Halt ou Stop
2. Bola saiu do campo
3. Perda de posse de bola para o oponente
4. Bola se afastou do robô e o passe falhou ( A ser otimizado)
5. Bola entrou na área sem ser um cruzamento ( A ser feito)
- 5RobotsNormalGamePlay
1. Juiz deu comando Halt ou Stop
2. Bola saiu do campo
3. Perda de posse de bola para o oponente
4. Chute ao gol falhou e bola entrou dentro da área ( A ser otimizado)
8) Projeto
Atualizei o projeto em áreas necessárias como o playbook, rolebook com as novas plays, roles ...
OBS:
1. Há ainda algumas skills , provavelmente, utilizando roles como índice nos cases, o que pode levar a inconsistência de tal skill.
2. O novo RRT, quando utilizado com uma das novas plays trava quando os robôs estão próximos dos inimigos.
Issues:
1. Como manter a ordem predeterminado de 5 robôs de uma play para outra, visto que o robô mais próximo da bola sempre tem sua role bem definida, assim como o que irá receber o passe, todavia os outros 3 pode haver , atualmente, permutação das roles na transição da 5RobotsNormalGamePlay a 5RobotsPassGamePlay.
Novos passos:
1) Terminar a skill do KickToBestRobotTactic
2) Testar para ver o funcionamento da 5RobotsPassGamePlay, ajustando as plays, roles e tactics ao seu pleno funcionamento.
3) Elaborar nova lógica para o factorpass
4) Testar o funcionamento da 5RobotsPassGamePlay, ajustando os pesos da factorpass
Atualizado por Gabriel Borges da Conceição há mais de 3 anos
Gostei do andamento e organização da explicação do que foi feito.
Parece estar bastante encaminhado. Focar em terminar logo a "burocracia" da arquitetura pra poder se concentrar na execução das jogadas.
Atualizado por Felipe Welington há mais de 3 anos
Novos passos:
1. Trocar as labels das plays de posicionamento para um nome que identifique a lógica do posicionamento do robô.
2. No Choose play, passar a escrita do factor pass para dentro da condição de início.
3. Se a condição for falsa, não é necessário escrever o factor pass na play.
4. Fazer os typedefs dos states das tactics que for mexendo.
5. Criar role para receber o passe, usando a tactic waitpass.
6. Formular posição dos 4 robôs na pick robot, tomando como base a bola e inimigos e a abertura do gol, serão mantidos o do best y e o 2ndStrikerDpass.
Atualizado por Felipe Welington há mais de 3 anos
Consertado
1. Correção no ChoosePass.
2. Foi utilizado a PassReceiver com index 0 constante, para o recebimento do passe, usando assim somente a WaitPassTactic.
3. No PickRobot foi criado um case para 5PassGamePlay e outro para 5NormalGamePlay:
- No 5NormalGamePlay:
- * O primeiro robô é o mais próximo a bola.
- * O resto é indiferente.
- No 5PassGamePlay:
- * O primeiro robô é o mais próximo a bola.
- * O segundo robô é o com maior factorpass.
- * O resto é indiferente.
Alterado
1) 5PassGamePlay agora só possui 3 roles:
- PassBestRobotRole.
- PassReceiverRole.
- 5RobotsRole
2) 5NormalGamePlay agora só possui 2 roles:
- ShootRole
- 5RobotsRole
3) PassBestRobotRole possui 2 tactic:
- KickToBestRobotTactic
- 5RobotsTactic (Position = -1)
4) 5RobotsRole possui 1 tactic:
- 5RobotsTactic
Criado
1) 5RobotsSkill, 5RobotsTactic, 5RobotsRole, 5RobotsPlay:
Referentes ao posicionamento dos robôs que não estão com a bola, sendo que o robô que irá dar o passe, durante o deslocamento dela para o receptor também usa o posicionamento da 5RobotsSkill, para isso usa-se o position = -1
2) 5RobotsPosition:
Vi criada a partir da utilities, com o intuito de calcular as 5 posições possíveis, sendo que possui 2 saídas, uma para o robô mais próximo da bola, e outra como vetor de 4 posições.
Atualizado por Felipe Welington há mais de 3 anos
Updates
1) Criação da seguinte play:
- 5KeeperGamePlay:
Play em que o nosso goleiro está com a posse da bola preparando um tiro de meta, ou um passe(a ser feito essa sinergia). Possui a seguinte role:
1. 5RobotsRole
2) Criação das seguintes roles:
Por necessidade, criamos uma nova role para recepção do passe que recebe a tactic WaitPassTactic
1. PassBestReceiverRole
3) Mudança na pickRobotOffensivePlay:
Para a utilização das plays 5NormalGamePlay e 5PassGamePlay foram criadas lógicas especificas de seleção de robôs em que a lógica consiste basicamente de:
- 5PassGamePlay: Escolhe-se o robô mais próximo da bola para receber a role PassBestRobotRole, o robô com maior fator dado por 5RobotsFactorPass recebe a role PassBestReceiverRole, os outros(a play pode funcionar com 2 robôs ou mais) recebem a 5RobotsRole em ordem decrescente de ID.
- 5NormalGamePlay: Escolhe-se o robô mais próximo da bola (Pode ser otimizado) para receber a role ShootRole e os outros recebem a 5RobotsRole em ordem decrescente de ID.
- 5KeeperGamePlay: Todos os robôs recebem a 5RobotsRole em ordem decrescente de ID, utilizando-se assim o case default.
3) Correção da 5RobotsPosition:
Agora só possui um vetor de saída contendo as 5 posições possíveis.
4) Correção na 5RobotsSkill, 5RobotsTactic, 5RobotsRole, 5RobotsPlay:
Fator position eliminado, por não ser mais necessário.
5) Correção nas condições de início:
- 5KeeperGamePlay:
1. Novo -Inicia quando a bola entra no gol.
- 5PassGamePlay:
1. Novo - Só pode começar se a play 5NormalGamePlay é a anterior.
2. Atualizado - O 5RobotsFactorPass de algum robô, exceto o que vai dar o passe, deve ser superior ao do chute gol e o 5RobotsFactorPass do chute ao gol deve ser inferior a 0,84.
3. Novo - Deve haver pelo menos 2 robôs no ataque
4. Intacto - O comando é diferente de Stop
5. Removido - O comando é diferente de Stop, Halt ou TimeOut
- 5NormalGamePlay:
1. Intacto - Condição default de Play em jogos ofensivos
2. Intacto - Nenhuma play está disponível além dela.
6) Correção nas condições de Termino:
- 5KeeperGamePlay:
1. Novo - Goleiro chutou a bola e ela se afastou 300 mm.
2. Novo - Juiz deu comando Halt ou Stop.
- 5PassGamePlay:
1. Intacto - Juiz deu comando Halt ou Stop.
2. Intacto - Bola saiu do campo
3. Intacto - Perda de posse de bola para o oponente
4. Atualizado - Bola se afastou do robô e o passe falhou ( Já foi feito uma otimização, mas pode melhorar se sobrar tempo)
5. Intacto - Bola entrou na área sem ser um cruzamento ( A ser feito)
- 5NormalGamePlay:
1. Novo - Acaba toda interação, pois é a play default.
Outras condições foram retiradas.
7) ChoosePlayOffensive
Desativei algumas plays do in game, ficando somente as 3 plays dessa tarefa durante o jogo.
8) Projeto
Atualizações inerentes a criação de plays, roles...
OBS:
1. Tem que pintar os quadrados e colocar descrição nas lógicas, pois algumas são complexas e isso dificultou em algumas análises.
Issues:
1. Como generalizar uma busca vetorizada da 5RobotsPosition de N posições para N robôs sem aumentar demasiadamente a complexidade do código, pensei em quebrar as posições em prioridade de posição e lado, fazendo assim N² se repartir em partições de 2 robôs e 2 posições, assim em cada escolhendo a posição através da regra que as arestas de um quadrilátero são menores que suas diagonais, se N for impar a posição mais próxima de y = 0 é removida do vetor.
2. Necessidade de Vi que consegue detectar um robô que sumiu, prevendo sua posição ou mantendo sua antiga, algumas plays podem ter rendimento negativo, por um robô que sumiu mesmo que não seja parte principal dessa.
3. Quando perdemos a bola, atualmente, 3 robôs recuam para a barreira, então acho q um bom posicionamento a ser mantido é 2x1x2(lateral de campo do nosso lado, central do lado inimigo, atacante), para fortificar o ataque, ao passo que a defesa se mantêm resistente.
Novos passos:
1) Terminar de fazer as posições para haver 5 posições possíveis, ainda não foi definido ao certo qual serão, e como será sua lógica.
2) Otimizar a condição de termino da 5PassGamePlay, visto que há alguns possíveis casos que não está terminando, fazendo os robôs ficarem imóveis.
3) Otimizar a 5KeeperGamePlay, para que haja uma melhor sinergia com o goleiro.
4) Otimizar o 5RobotsFactorPass, atualmente, está numa versão que consegue acertar as decisões de passe ou chute ao gol de maneira aceitável, porém com o novo controle e posse de bola com o driblador, vale a pena, revisar algumas modalidades de toque em série, sobretudo toques de cruzamento com o funcionamento do chute alto.
Atualizado por Gabriel Borges da Conceição há mais de 3 anos
Excelente descrição!
Mas fiquei com algumas dúvidas:
1. Nessa parte "3) Correção da 5RobotsPosition: Agora só possui um vetor de saída contendo as 5 posições possíveis".
(Então agora as 5 posições são calculadas apenas uma vez cada em cada iteração, certo?
Onde essas posições são calculadas e onde são armazenadas?)
Atualizado por Gabriel Borges da Conceição há mais de 3 anos
2. "5) Correção nas condições de início:
5KeeperGamePlay:
Novo -Inicia quando a bola entra no gol.
(É quando a bola entra no gol ou na área?)
5PassGamePlay:
Novo - Só pode começar se a play 5NormalGamePlay é a anterior.
Atualizado - O 5RobotsFactorPass de algum robô, exceto o que vai dar o passe, deve ser superior ao do chute gol e o 5RobotsFactorPass do chute ao gol deve ser inferior a 0,84.
Novo - Deve haver pelo menos 2 robôs no ataque
Intacto - O comando é diferente de Stop
Removido - O comando é diferente de Stop, Halt ou TimeOut" (por que isso foi removido?)