Este projeto é uma implementação do clássico jogo Snake com agentes de Aprendizado por Reforço (Reinforcement Learning) usando três algoritmos principais: DQN, A2C e PPO. O objetivo é treinar agentes que possam aprender a jogar Snake de forma autônoma, maximizando a pontuação ao consumir alimentos e evitando colisões.
snake_rl_game/
├── game/ # Contém a lógica do jogo e a interface do ambiente RL
│ ├── snake.py # Implementação do jogo Snake
│ ├── game_env.py # Ambiente do Gym para integração com RL
│ └── config.py # Configurações de parâmetros do jogo
├── ai/ # Implementações dos agentes e modelos RL
│ ├── agents/ # Agentes para DQN, A2C e PPO
│ │ ├── dqn_agent.py # Agente DQN
│ │ ├── a2c_agent.py # Agente A2C
│ │ ├── ppo_agent.py # Agente PPO
│ │ └── base_agent.py # Classe base com métodos comuns
│ ├── models/ # Modelos de redes neurais dos agentes
│ ├── memory/ # Memória de replay para experiência do DQN
│ └── replay_memory.py
├── training/ # Scripts de treinamento e avaliação
│ ├── train_dqn.py # Script para treinar o agente DQN
│ ├── train_a2c.py # Script para treinar o agente A2C
│ ├── train_ppo.py # Script para treinar o agente PPO
│ ├── evaluation.py # Script para avaliar o agente treinado
│ └── utils.py # Funções auxiliares para treinamento e avaliação
├── tests/ # Testes para o ambiente, agentes e modelos
├── assets/ # Sprites e sons para o jogo
├── notebooks/ # Análises e visualização de dados de treinamento
├── logs/ # Armazenamento dos logs de treinamento
├── checkpoints/ # Checkpoints e salvamento de modelos treinados
├── requirements.txt # Dependências do projeto
├── setup.py # Script de instalação do projeto
├── README.md # Documentação do projeto
└── run_game.py # Executa o jogo com o agente treinado
- Python 3.8+
- Bibliotecas:
PygameGymTorch- Outras dependências listadas no arquivo
requirements.txt
-
Clone este repositório:
git clone https://github.com/seu-usuario/snake_rl_game.git cd snake_rl_game -
Crie um ambiente virtual:
python -m venv venv source venv/bin/activate # Para Linux/Mac venv\Scripts\activate # Para Windows
-
Instale as dependências:
pip install -r requirements.txt
- Arquivo de Configuração (
game/config.py): Parâmetros como tamanho da tela, velocidade da cobra, e recompensas podem ser ajustados no arquivoconfig.pypara facilitar experimentos. - Variáveis de Hiperparâmetros: Cada agente possui hiperparâmetros específicos (taxa de aprendizado, gama, epsilon, etc.), definidos nos scripts de treinamento em
training/.
Para rodar o jogo com o agente treinado:
python run_game.pyEste comando executa o jogo Snake, onde o agente RL irá interagir com o ambiente em tempo real.
Os scripts de treinamento para cada agente estão na pasta training/. Ao rodar um script, ele treina o agente correspondente, salva checkpoints e gera logs do progresso.
Para treinar o agente DQN:
python training/train_dqn.pyPara treinar o agente A2C:
python training/train_a2c.pyPara treinar o agente PPO:
python training/train_ppo.pyCada um desses scripts salva checkpoints a cada 100 episódios e registra métricas de desempenho em arquivos
.loge.csv.
Após o treinamento, os agentes podem ser avaliados usando o script evaluation.py:
python training/evaluation.pyEste script carrega o modelo treinado e executa uma série de jogos para medir a performance, registrando métricas de desempenho.
Na pasta notebooks/, há notebooks (exploration_analysis.ipynb e reward_analysis.ipynb) para explorar as recompensas e o comportamento do agente durante o treinamento. Eles permitem visualizar o equilíbrio entre exploração e exploração e o impacto das recompensas no aprendizado.
A pasta tests/ contém testes unitários para garantir a integridade do código:
- test_game_env.py: Testes para o ambiente do jogo.
- test_agents.py: Testes para os agentes (DQN, A2C, PPO).
- test_models.py: Testes para verificar a integridade das redes neurais.
Execute os testes com:
python -m unittest discover -s tests- game/snake.py: Contém a lógica do jogo, incluindo detecção de colisão, movimento da cobra, e geração de comida.
- game/game_env.py: Interface do ambiente Gym, definindo o espaço de ação, recompensas, e estados para integração com os agentes.
- ai/agents/: Implementações dos agentes (DQN, A2C, PPO), com métodos para treinamento e seleção de ações.
- ai/models/: Modelos de redes neurais específicas para cada agente.
- training/: Scripts para treinamento e avaliação dos agentes, com checkpoints e registros de dados.
- tests/: Testes unitários e de integração para o jogo, agentes e redes neurais.
- assets/: Contém sprites e sons para o jogo, melhorando a experiência visual e sonora.
- checkpoints/: Salva os checkpoints dos modelos treinados para retomar o treinamento.
- Aprimoramento de Hiperparâmetros: Ajuste fino de hiperparâmetros para melhorar o desempenho dos agentes.
- Implementação de Modelos Avançados: Experimentação com outros algoritmos de RL como DDPG e SAC.
- Visualizações Mais Detalhadas: Adição de gráficos de métricas como perda de aprendizado e taxas de sucesso.
Este projeto é aberto a contribuições. Para contribuir:
- Crie um fork do projeto.
- Crie uma nova branch (
git checkout -b feature/sua-feature). - Faça um commit com suas alterações (
git commit -am 'Adiciona nova feature'). - Envie suas alterações para o repositório remoto (
git push origin feature/sua-feature). - Abra um Pull Request.
Este projeto é licenciado sob a licença MIT.