RobotBulls Robotics Team Description 2015 (2D) Alexandre Baratella Lugli, Haroldo Manoel Dornelas, Leonardo de Oliveira Saldanha e Wanderson Eleutério Saldanha. Av. João de Camargo, 510, Santa Rita do Sapucaí/MG. INATEL National Institute of Telecommunications, Department of Industrial Automation and Control. Santa Rita do Sapucaí, Minas Gerais, Brazil. Resumo - O documento a seguir descreve a composição de um time de futebol virtual, na categoria 2D. Tem como principal objetivo apresentar o desenvolvimento do time de futebol RobotBulls, assim como as metodologias utilizadas e resultados obtidos durante o desenvolvimento do trabalho. I - INTRODUÇÃO A RobotBulls é marca do Laboratório de Robótica e Inteligência Artificial do Instituto Nacional de Telecomonunicações - INATEL. Foi idealizada no segundo semestre de 2013 pelos alunos de Engenharia de Controle e Automação Industrial. O objetivo da equipe é promover a pesquisa na área da robótica visando aprimorar o conhecimento, de forma que auxilie na criação de soluções inovadoras. O objetivo do trabalho é estudar, desenvolver e aplicar técnicas de programação, a fim de desenvolver uma equipe de robôs virtuais, autônomos, para participação em eventos de pesquisa e desenvolvimento, motivando a busca por soluções inovadoras. O trabalho é direcionado para o desenvolvimento de uma aplicação de futebol de robôs, na modalidade de simulação em duas dimensões (2D). Utilizando técnicas de programação que visam implementar as possíveis jogadas que cada jogador pode executar no campo, o time foi desenvolvido sob um modelo disponibilizado livremente na internet, com características básicas dos jogadores, chamado de Agent2D Helios base[1]. A partir do time base, os comportamentos dos jogadores são modificados, a fim de melhorar seu desempenho e estratégia em campo. Cada jogador deve possuir um certo grau de inteligência artificial (IA) que lhe permita prever uma possível jogada do adversário e, então, ser capaz de executar uma ação preventiva. Os jogadores programados, denominados agentes desempenham papéis distinto em campo, como acontece no futebol real. Os principais papéis são: goleiro, defensores, meio campistas, atacantes e técnico, de acordo com as regras e regulamentações disponíveis em [2]. orientada a objetos. A modularidade oferecida pela linguagem permite a abstração e modelagem de comportamentos e atitudes, praticados na realidade pelos jogadores reais. Uma abstração mais próxima da realidade vai além da lógica booleana e requer técnicas avanças de programação e aprendizado. A lógica difusa e o aprendizado por reforço são as técnicas mais comuns utilizadas na categoria entre outras. A lógica difusa permite, através de cálculos de persistência, encontrar infinitos valores determinísticos entre 0 e 1, o que representa uma alusão do mundo real, onde quase nada é exato. [4] No mundo real, a habilidade e aprimoramento das técnicas proporcionada pelos jogadores são desenvolvidos com a prática repetitiva em exaustivos treinos. O futebol virtual diverge pouco da prática real. O aprendizado por reforço pode ser alcançado por modelagem de estados, formalizados por Processos Markovianos de Decisão, introduzindo a função heurística para influenciar o agente na escolha de suas ações, durante o aprendizado. As heurísticas são extraídas em tempo de execução, oferecendo alguma recompensa para as ações corretas. [5] III - DESENVOLVIMENTO A. Elementos do jogo Para se realizar um jogo é necessário ter, no mínimo, os seguintes agentes: goleiro, jogadores, técnico e campo. A Figura 1 ilustra, de forma simples, a disposição dos jogadores do time base Agent2D. O time base é um time padrão, com apenas os movimentos e ações básicos, sem a implementação de nenhuma lógica avançada de controle. A estrutura básica permite iniciar o desenvolvimento de novos métodos e características conforme a necessidade vem sendo apresentada pelos oponentes em cada nova competição. [1] II - METODOLOGIA A categoria de futebol de robôs em 2D utiliza a linguagem de programação C++. Segundo [3], nos últimos anos cresceu muito a utilização de programação orientada a objetos. A linguagem de programação C++ implementou vários elementos chave de programação orientada a objetos, permitindo a utilização de poderosas técnicas de projeto
Figura 3. Exemplo do campo de visão. Figura 1. Disposição dos jogadores do time base. A comunicação entre os agentes é feita através da troca de mensagens UDP conforme Figura 2. O servidor, por padrão cria interferência aleatória sobre as mensagens, oferecendo ao cenário virtual um comportamento semelhante ao do mundo real. O ambiente de simulação possui além dos jogadores e o goleiro, dois agentes abstratos denominados Árbitro e técnico. Estes agentes não são apresentados visualmente durante a execução da simulação, não obstante que, interagem normalmente com os demais agentes em campo. O árbitro efetua a supervisão da partida, efetuando a marcação de irregularidades, aplicação de advertências, bem como, a expulsão de determinado jogador. O técnico efetua a manutenção do time, substituindo jogadores cansados e alterando as tácticas do jogo. Figura 4. Marcas de orientação. Os agentes nada mais são que objetos instanciados a partir de basicamente duas classes principais em campo, interagindo em modo cooperativo com os demais companheiros. A classe SamplePlayer que implementa as características e comportamentos dos diversos jogadores e a classe SampleCoach implementa as características e comportamentos do técnico da equipe.em campo. Através destas classes é possível implementar uma lógica de controle, a fim de otimizar a realização de alguma tarefa específica. [1] Figura 2. Comunicação entre agentes. Cada agente possui uma visão limitada do jogo, conforme ilustrado na Figura 3. Para sua orientação em campo, cada agente consegue ver, pelo menos, uma flag de marcação, conforme a Figura 4. O campo é mapeado sobre um Plano cartesiano com origem no centro (pontapé inicial) através de coordenadas horizontais e verticais. Essas coordenadas são a referência de orientação para os objetos em campo, no caso, agentes e bola. B. Estratégias e programação A programação orientada a objetos surgiu com o principal objetivo de unir os dados e funções em um único elemento: o objeto. Esta metodologia traz uma série de vantagens sobre linguagens de programação procedural, como o C, conforme listado a seguir [3]. - Reusabilidade: as classes que compõem o sistema podem ser aproveitadas em outros sistemas, sem alteração, uma vez que, os dados e funções estão contidos dentro da classe. Caso haja necessidade, podem-se criar novas classes baseadas em outras já existentes, herdando as características da classe pai. - Encapsulamento: proteção dos dados contra alterações indevidas. O encapsulamento mantém escondidos dados e métodos do objeto. Pode-se explicitamente declarar o grau de visibilidade de atributos e métodos. - Produtividade: A partir do momento que temos a disposição uma coleção de classes devidamente testadas e com um funcionamento a prova de erros, para criar novos sistemas, basta usar estas classes,
sem nenhuma necessidade de reescrever e adaptar código. Isto dá, sem sombra de dúvida, maior rapidez e, consequentemente, produtividade no desenvolvimento da equipe. A Linguagem C++ é uma extensão da linguagem C que incorpora recursos de Orientação a Objetos. [3] A Figura 5 ilustra um trecho de código de programação básica do agente goleiro, no qual é possível verificar um teste se deve "pegar" ou "chutar" a bola ou se movimentar em campo. Figura 6. Trecho de código de implementação Fuzzy. Figura 5. Exemplo do metódo executar() do agente goleiro. C. Técnicas avançadas de programação Além da programação estruturada e orientada a objetos, também é possível utilizar a técnica de inteligência artificial chamada de lógica Fuzzy (Difusa). Esse sistema lógico vai além da Lógica Booleana, onde temos apenas dois valores lógicos: o FALSO (0) e o VERDADEIRO (1) e possibilita a utilização de valores lógicos intermediários. Isto significa que um valor lógico difuso é um valor qualquer no intervalo de valores entre 0 e 1. O que diferencia a lógica Fuzzy da lógica booleana é a capacidade desta de se aproximar do mundo real onde não existem somente respostas extremas. A lógica Fuzzy fornece espaço ao meio termo apresentando ainda a possibilidade de mensurar o grau de aproximação da solução exata e assim inferir algo que seja necessário. A Figura 6 apresenta um trecho de código implementando a lógica Fuzzy para um cálculo de probabilidades. [4] Quando um determinado problema apresenta um grande grau de incerteza é necessário que para solução deste se utilize um modelo matemático que contemple essa especificidade e não desconsidere aspectos que possam ser ignorados na aplicação de lógicas tradicionais. Para esses casos a Lógica Fuzzy é amplamente recomendada, pois apresenta um modelo capaz de combinar a imprecisão associada aos eventos naturais e o poder computacional das máquinas produzindo assim sistemas de respostas inteligentes. [4] Um dos grandes objetivos inerentes à Lógica Fuzzy é se aproximar em sua lógica, da forma com que o raciocínio humano relaciona as informações buscando respostas aproximadas aos problemas, por isso o grande foco desta lógica é a solução de problemas cujas informações recentes sejam incertas. Na Figura 7 é apresentada a representação de um sistema difuso, contendo os seus principais componentes. Figura 7. Representação de um sistema difuso
A "fuzzificação" do sistema lógico Fuzzy consiste analise do problema e os dados de entrada são transformados em variáveis linguísticas. O processo de inferência consiste na elaboração de regras definidas para a execução da lógica. A defuzzificação é a etapa em que os valores Fuzzy são convertidos em números reais tendo assim um conjunto de saída matematicamente definido. [4] D. Aprendizado por reforço O aprendizado com reforço pode ser entendido da seguinte forma, se uma ação é seguida de estados satisfatórios, ou por uma melhoria no estado, então a tendência para produzir esta ação é aumentada, isto é, reforçada. Estendendo-se esta ideia, ações podem ser selecionadas em função da informação sobre os estados que elas podem produzir, o que introduz aspectos de controle com realimentação. Uma forma de modelar problemas de aprendizado com reforço é utilizar o Processo de Decisão de Markov. Três sinais passam de um lado para outro entre o agente e o ambiente, como é mostrado na Figura 8, caracterizando o problema de aprendizagem: um sinal para representar as escolhas feitas pelo agente, um sinal que indica o estado do ambiente e um sinal para definir as metas do agente, representando respectivamente as ações, estados do ambiente e as recompensas. [5] Figura 9. Método de recompensa para ação de chutar a bola. IV - RESULTADOS PARCIAIS Os testes de validação foram realizados ao longo do ano, após a equipe ter estudado as regras do jogo, comportamentos dos jogadores e o funcionamento do sistema. A partir do time base padrão foram desenvolvidos alguns times, testados entre si para definir o time que obtivesse melhor desempenho dentre os demais, logo o time oficial foi definido e testado com outros times disponibilizados por competidores de campeonatos anteriores. Alguns dos resultados parciais estão ilustrados na Tabela I, na qual é possível verificar uma porcentagem de 18/28 de vitórias sobre as demais equipes, representando uma margem de vitórias em 64,3%. Figura 8. Modelo padrão de aprendizado com reforço. Na estrutura da aprendizagem com reforço, o agente faz suas decisões com base num sinal do ambiente chamado de estado do ambiente. Caso um estado contenha toda a informação relevante, então ele é chamado de Markov ou que tem a propriedade de Markov. A Figura 9 apresenta um trecho de código do método de recompensa para as ações de chute do agente.
Tabela III. Classificação Final na IWCA 2015 VI - CONCLUSÃO Tabela I. Resultados parciais. V - CAMPEONATOS O ápice do trabalho chega ao seu início com a participação da equipe no Congresso Brasileiro de Robótica, em 2014 [6]. A Tabela II demonstra a classificação final da equipe RobotBulls entre os 12 times que participaram da competição. A equipe obteve a oitava posição na classificação, sendo esse resultado considerado satisfatório, uma vez que esta foi a primeira participação da equipe em uma competição. [7] Os sistemas de robôs estão em grande ascensão atualmente, devido às inúmeras aplicações que podem ser realizadas. O futebol de robô possibilita a implementação de conceitos computacionais inovadores e aplicações de técnicas de sistemas dotados de inteligência, a fim de otimizar a jogada e operação dos elementos de campo. Assim, é de suma importância ter a correta posição dos jogadores dentro do campo, ter uma lógica de programação consistente e poder prever as jogadas do time adversário com precisão e rapidez. É possível, ainda, utilizar das técnicas de decisão persistente, como lógica Fuzzy, visando a otimização e previsão das jogadas realizadas pelos jogadores e técnicas de aprendizado, como Q-learning e o uso de heurísticas. Com o desenvolvimento deste trabalho, a equipe obteve incentivo e confiança para seguir em frente, iniciando o desenvolvimento do estudo em novas categorias e segmentos. Conclui-se que o futebol 2D é apenas o inicio de um estudo que visa o desenvolvimento de um time de futebol com robôs reais. A meta para o ano de 2015 será participar do Congresso Brasileiro de Robótica - LARC/CBR 2015, buscando uma colocação entre os melhores times latinoamericanos e continuar o trabalho para iniciar sua primeira participação no campeonato mundial Robocup 2016. REFERÊNCIAS BIBLIOGRÁFICAS Tabela II. Classificação Final LARC/CBR 2014. Em 2015 a equipe participou da competição de robótica promovida pela organização da IWCA no Instituto Nacional de Telecomunicações. Entre seis times brasileiros e dois times internacionais, a RobotBulls conquistou o terceiro lugar, ficando em primeiro lugar entre os times nacionais. A Tabela III apresenta a classificação da equipe na competição de robótica da IWCA 2015. [9] [1] Robocup Tools Project. Disponível em <http://en.osdn.jp/projects/rctools/> - Acesso em 02 de Maio de 2015. [2] Rules of Soccer Simulation League 2D. Disponível em <http://www.cbrobotica.org/wpcontent/uploads/2drulesrobocup2014.pdf> - Acesso em 21 de Maio de 2015. [3] Robocup Federation. Dispnível em <http://www.robocup.org.br/> - Acesso em 02/06/2015 [4] MANSSOUR, Isabel H. Linguagem de Programação C++. Curso de Linguagem de programação C++. Disponível em: <https://www.inf.pucrs.br/manssour/linguagemc++/> - Acesso em 02 de Junho de 2015. [5] COX, E. The fuzzy systems handbook: a practitioner s guide to building, using, and
maintaining fuzzy systems. New York: AP Professional, 1994. [6] BIANCHI, Reinaldo A. da Costa. Uso de Heurísticas para a Aceleração do Aprendizado por reforço. Tese de doutorado - Escola Politécnica da Universidade de São Paulo. São Paulo, 2004. [7] Congresso Brasileiro de Robótica. Disponível em: <http://www.cbrobotica.org/> - Acesso em 02 de Junho de 2015. [8] Final Results - RoboCup Simulation 2D. CBR/LARC 2014. São Carlos - SP. Disponível em: <http://www.dainf.ct.utfpr.edu.br/~fabro/larc2014/> - Acesso em 02 de Junho de 2015. [9] Robotics Championship soccer simulation. IWCA 2015. Santa Rita do Sapucaí. Disponível em: <http://www.inatel.br/iwca/futebol2d> - Acesso em 02 de Junho de 2015.