Skip to content

This project was made for ITAndroids soccer 2D team. This is a machine learning project to identificate whose opponent we are play.

Notifications You must be signed in to change notification settings

jonysalgado/opponents-initial-identification

Repository files navigation

Initial Opponents Identification

✅ Tabela de conteúdos

👉 [Para que serve esse projeto?](#introduction)
👉 [Instalação](#install)
👉 [Como rodar o projeto?](#rodar_projeto)
👉 [Mudando os parâmetros de projeto](#parametros)
👉 [Organização do projeto](#organization)
👉 [Problemas a serem resolvidos nas próximas versões](#problems)

✅ Para que serve esse projeto?

 Esse projeto é destinado a fazer um modelo utilizando algoritmos de machine learning para identificar os oponentes com quem jogamos utilizando-se apenas das métricas que o coach do nosso time tem acesso.
 O projeto consiste de duas partes: mineração de dados e predição. A parte de mineração pode ser utilizada para outros projetos da equipe, pois ela inicia os jogos, pega os logs e cria os datasets com as métricas que foram utilizadas. Essa parte foi feita de forma a ser o mais escalável possivel, isto é, de forma a poder alterar os parâmetros para criação do dataset que será melhor descrita na seção de parâmetros.
 A parte de predição é a seção do projeto destinada a testar e aplicar modelos. Foram testados dois modelos: Naive Bayes e K-nearest Neighboors (KNN). Esses dois modelos foram escolhidos devido a sua simplicidade. Durante os testes, descobriu-se que o KNN obtinha uma taxa de acerto maior (90,5%).

✅ Instalação

 Primeiro, clone este repositório no seu pc:
git clone https://gitlab.com/itandroids/projects/soccer2d/itas2d-opponents_identification.git
 Agora, caso você queira testar os modelos e trabalhar em modelos melhores, instale as libs de python necessárias. Entre na pasta raiz do repositório e digite o comando abaixo:
pip3 install -r requirements.txt

✅ Como rodar o projeto?

 Primeiramente, coloque os times que você deseja identificar em um jogo na pasta teams. Tenha em mente que ele classifica os times com base nos times presentes no dataset apenas. Verifique se há um script na pasta raiz do time denominado start.sh, pois o projeto espera esse script de inicialização.

 Antes de rodar o projeto, é recomendado que mude os parâmetros de criação do dataset. Para saber sobre os parâmetros, siga para a seção de parâmetros abaixo.
 Para rodar o projeto basta está na pasta raiz e digitar o comando abaixo no terminal:
python opponents_identification.py

✅ Mudando os parâmetros de projeto

 Os parâmetros recomendados para se mudar foram descritos abaixo:
CYCLES: Esse parâmetro é usado para indicar quantos frames serão utilizados por jogo para a criação do dataset. A Contagem sempre começa no primeiro frame do jogo.

NUMBER_MATCHES: Esse parâmetros é usado para indicar quantos jogos com cada time serão feitos. Serão retirados de cada um dos jogos o número de frames iniciais igual ao parâmetro CYCLO.

ROBOCUP_SERVER_DIR: Esse parâmetro tem que ser alterado para o path do server da Robocup no seu PC. Não modifique a parte os.getcwd(), pois essa função retorna o path atual do programa. Modifique apenas a parte adicional, tendo como path de partida a pasta mining do projeto.

ROBOCUP_MONITOR_DIR: Da mesma mesma forma como no parâmetro anterior, modifique este parâmetro, porém colocando o path do soccerwindow da Robocup no seu computador.

LEFT_DIR: Esse parâmetro é o path do script start.sh do time da ITAndroids. Modifique esse parâmetro apenas se deseja colocar o time em outro local ou se o ano do time mudar.

TEAM_NAMES: Esse parâmetro é uma lista do nome dos times utilizados. Coloque nome igual a pasta do time que foi colocada na pasta teams na raiz do projeto.

SERVER_FAST: Esse parâmetro é o comando usado para iniciar o server em modo rápido. Não há a necessidade de modificar esse parâmetro.

PLAYERS_NUMBER: Aqui você coloca a quantidade de players do oponente que você deseja colocar no dataset. O recomendado é 11, porém esse valor é modificável.

✅ Organização do projeto

+-----------------+
|   Pasta raiz    |
+-------+---------+
        |
        |    +---------+
        +--->|   csv   |
        |    +---------+
        |
        |    +---------+
        +--->|  logs   |
        |    +---------+
        |
        |    +----------+
        +--->| material |
        |    +----------+
        |
        |    +--------+
        +--->| mining |
        |    +---+----+
        |        |     +------+
        |        +---->| test |
        |              +------+
        |
        |    +------------+
        +--->| prediction |
        |    +-----+------+
        |          |     +----------+
        |          +---->| datasets |
        |          |     +----------+
        |          |
        |          |     +-----+
        |          +---->| Knn |
        |          |     +-----+        
        |          |
        |          |    +------+
        |          +--->| test |
        |               +------+
        |
        |    +-------+
        +--->| teams |
             +-------+
CSV: Nesta pasta são colocados os os arquivos csv formados na parte mining.

logs: Aqui se colocam os logs dos jogos rodados.

material: Aqui estão alguns papers que podem auxiliar na manutenção do projeto.

mining: Aqui estão todos os scripts necessários para rodas os jogos, o arquivo com os parâmetros e o script para criação dos datasets. Caso queira testar novas modificações, use a pasta test.

prediction: Nesta pasta estão todos os arquivos utilizados para a criação e utilização do modelo. Caso queira testar novos modelos (o que seria ótimo para o projeto) faça na pasta test.

datasets: Aqui se tem uma cópia do dataset principal criado na parte mining, um dataset de teste (Aqui se tem todas as feactures do dataset criado, porém sem o campo dos times) e um dataset gerado com a saída do modelo.

Knn: Aqui estão os arquivos para a criação do modelo em c++ e os arquivos de compilação. Esse modelo deve ser implantado no coach do time da ITAndroids.

teams: Aqui deve-se colocar as pastas com os times para a criação do dataset.

✅ Problemas a serem resolvidos nas próximas versões

 Percebi após a criação do modelo em c++ que o desempenho não está muito bom. Porém, em python a taxha de acerto é de cerca de 90%. O problema está na passagem do modelo para c++ e isso pode ser corrigido em uma versão superior.
 Qualquer problema, pode entrar em contato comigo!
Jony Salgado T22

About

This project was made for ITAndroids soccer 2D team. This is a machine learning project to identificate whose opponent we are play.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published