Um projeto de aprendizado por reforço que implementa o algoritmo Q-Learning para treinar um agente a navegar em um ambiente de plataformas.
Este projeto utiliza Q-Learning para treinar um agente que navega entre plataformas em um ambiente 2D. O agente aprende a tomar decisões ótimas (pular, mover para esquerda ou direita) baseado em seu estado atual e nas recompensas recebidas.
- Algoritmo Q-Learning: Implementação completa com parâmetros configuráveis
- Ambiente de Plataformas: 24 plataformas com 4 direções possíveis (96 estados totais)
- Três Ações:
left,right,jump - Estratégia Epsilon-Greedy: Balanceamento entre exploração e explotação
- Persistência: Salvamento automático da Q-table durante o treinamento
Qlearning/
├── __pycache__/ # Cache do Python
├── executables/ # Executáveis do ambiente
├── scripts/
│ ├── client.py # Script principal do agente Q-Learning
│ └── connection.py # Módulo de conexão TCP com o servidor
├── data/
│ ├── initial_q_table.txt # Q-table inicial (zeros)
│ └── new_q_table.txt # Q-table atualizada após treinamento
├── LICENSE # Licença MIT
├── README.md # Este arquivo
└── specifications.pdf # Especificações do projeto
| Parâmetro | Valor | Descrição |
|---|---|---|
LEARNING_RATE |
0.5 | Taxa de aprendizado (α) |
DISCOUNT_FACTOR |
0.5 | Fator de desconto (γ) |
EPSILON |
0.3 | Taxa de exploração (ε) |
num_actions |
100000 | Número de ações de treinamento |
- Python 3.x
- NumPy
- Servidor do ambiente de plataformas rodando na porta 2037
- Clone o repositório:
git clone [url-do-repositorio]
cd Qlearning- Instale as dependências:
pip install numpy- Certifique-se de que o servidor do ambiente está rodando na porta 2037
- Execute o cliente Q-Learning:
python scripts/client.pyO agente começará a treinar automaticamente, salvando a Q-table a cada ação em data/new_q_table.txt.
O estado é representado por um número binário de 7 bits:
- Bits 6-5: Direção (00=Norte, 01=Leste, 10=Sul, 11=Oeste)
- Bits 4-0: ID da plataforma (0-23)
O agente utiliza a equação de Bellman para atualizar os valores Q:
Q(s,a) = Q(s,a) + α * (r + γ * max(Q(s',a')) - Q(s,a))
Onde:
s: estado atuala: ação tomadar: recompensa recebidas': próximo estadoα: taxa de aprendizadoγ: fator de desconto
- Exploração (30%): Ação aleatória
- Explotação (70%): Melhor ação conhecida (maior valor Q)
- Dimensões: 96 x 3 (96 estados × 3 ações)
- 96 Estados: 24 plataformas × 4 direções
- 3 Ações: left, right, jump
Para ajustar o comportamento do agente, modifique os parâmetros no início de client.py:
LEARNING_RATE = 0.5 # Velocidade de aprendizado
DISCOUNT_FACTOR = 0.5 # Importância de recompensas futuras
EPSILON = 0.3 # Taxa de exploração
num_actions = 100000 # Número de ações de treinamentoO script exibe informações em tempo real:
- Estado atual e recompensa
- Ação selecionada (aleatória ou ótima)
- Direção do agente
- Progresso do treinamento
- Aline Acioly
- Emanuel Pedroza
- Julio Sobral