👉 [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)
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%).
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
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.
python opponents_identification.py
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.
+-----------------+
| Pasta raiz |
+-------+---------+
|
| +---------+
+--->| csv |
| +---------+
|
| +---------+
+--->| logs |
| +---------+
|
| +----------+
+--->| material |
| +----------+
|
| +--------+
+--->| mining |
| +---+----+
| | +------+
| +---->| test |
| +------+
|
| +------------+
+--->| prediction |
| +-----+------+
| | +----------+
| +---->| datasets |
| | +----------+
| |
| | +-----+
| +---->| Knn |
| | +-----+
| |
| | +------+
| +--->| test |
| +------+
|
| +-------+
+--->| teams |
+-------+