Aviso: Este repositório não é mais mantido, use o zoológico RL-Baselines3 para uma versão atualizada, alimentada por estábulo-Baselines3

Uma coleção de agentes de aprendizado de reforço treinado (RL), com hiperparâmetros sintonizados, usando linhas de base estáveis.
Estamos à procura de colaboradores para concluir a coleção!
Objetivos deste repositório:
Se o agente treinado existir, você poderá vê -lo em ação usando:
python enjoy.py --algo algo_name --env env_id
Por exemplo, aproveite o A2C em Breakout durante 5000 Timestesps:
python enjoy.py --algo a2c --env BreakoutNoFrameskip-v4 --folder trained_agents/ -n 5000
Se você mesmo treinou um agente, precisa fazer:
# exp-id 0 corresponds to the last experiment, otherwise, you can specify another ID
python enjoy.py --algo algo_name --env env_id -f logs/ --exp-id 0
Para carregar o melhor modelo (ao usar o ambiente de avaliação):
python enjoy.py --algo algo_name --env env_id -f logs/ --exp-id 1 --load-best
Os hiperparâmetros para cada ambiente são definidos em hyperparameters/algo_name.yml .
Se o ambiente existir neste arquivo, você poderá treinar um agente usando:
python train.py --algo algo_name --env env_id
Por exemplo (com suporte ao Tensorboard):
python train.py --algo ppo2 --env CartPole-v1 --tensorboard-log /tmp/stable-baselines/
Avalie o agente a cada 10000 etapas usando 10 episódios para avaliação:
python train.py --algo sac --env HalfCheetahBulletEnv-v0 --eval-freq 10000 --eval-episodes 10
Salve um ponto de verificação do agente a cada 100000 etapas:
python train.py --algo td3 --env HalfCheetahBulletEnv-v0 --save-freq 100000
Continue treinando (aqui, carregue o agente pré -traido para fuga e continue treinando para 5000 etapas):
python train.py --algo a2c --env BreakoutNoFrameskip-v4 -i trained_agents/a2c/BreakoutNoFrameskip-v4.pkl -n 5000
Nota: Ao treinar TRPO, você deve usar mpirun para permitir o multiprocessamento:
mpirun -n 16 python train.py --algo trpo --env BreakoutNoFrameskip-v4
Utilizamos o Optuna para otimizar os hiperparâmetros.
Nota: A pesquisa de hiperparameters não é implementada para a Acer e DQN por enquanto. Ao usar sucessivohalvingpruner ("metade"), você deve especificar --n-jobs > 1
Orçamento de 1000 ensaios com no máximo 50000 etapas:
python train.py --algo ppo2 --env MountainCar-v0 -n 50000 -optimize --n-trials 1000 --n-jobs 2
--sampler tpe --pruner median
Você pode especificar na configuração HyperParameter um ou mais wrapper para usar em todo o ambiente:
Para um invólucro:
env_wrapper: gym_minigrid.wrappers.FlatObsWrapper
Para múltiplos, especifique uma lista:
env_wrapper:
- utils.wrappers.DoneOnSuccessWrapper:
reward_offset: 1.0
- utils.wrappers.TimeFeatureWrapper
Observe que você também pode especificar parâmetros facilmente.
Você pode especificar argumentos de palavras-chave para passar para o construtor Env na linha de comando, usando --env-kwargs :
python enjoy.py --algo ppo2 --env MountainCar-v0 --env-kwargs goal_velocity:10
Você pode substituir facilmente os hiperparâmetros na linha de comando, usando --hyperparams :
python train.py --algo a2c --env MountainCarContinuous-v0 --hyperparams learning_rate:0.001 policy_kwargs:"dict(net_arch=[64, 64])"
Registre 1000 etapas:
python -m utils.record_video --algo ppo2 --env BipedalWalkerHardcore-v2 -n 1000
As pontuações podem ser encontradas em benchmark.md . Para calculá -los, basta executar python -m utils.benchmark .
7 jogos Atari do OpenAI Benchmark (versões noframeskip-v4).
| RL Algo | Beamrider | Saia | Enduro | Pong | Qbert | SeaQuest | SpaceInvaders |
|---|---|---|---|---|---|---|---|
| A2C | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Acer | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| Acktr | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Dqn | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| TRPO |
Jogos Atari adicionais (a serem concluídos):
| RL Algo | MSPACMAN |
|---|---|
| A2C | ✔️ |
| Acer | ✔️ |
| Acktr | ✔️ |
| PPO2 | ✔️ |
| Dqn | ✔️ |
| RL Algo | Cartpole-V1 | Mountaincar-V0 | Acrobot-V1 | Pendulum-V0 | MountainCarcontinuous-V0 |
|---|---|---|---|---|---|
| A2C | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Acer | ✔️ | ✔️ | ✔️ | N / D | N / D |
| Acktr | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Dqn | ✔️ | ✔️ | ✔️ | N / D | N / D |
| Ddpg | N / D | N / D | N / D | ✔️ | ✔️ |
| SACO | N / D | N / D | N / D | ✔️ | ✔️ |
| TD3 | N / D | N / D | N / D | ✔️ | ✔️ |
| TRPO | ✔️ | ✔️ | ✔️ | ✔️ |
| RL Algo | Bipedalwalker-V2 | Lunarlander-V2 | LunarLanderContinuous-V2 | Bipedalwalkerhardcore-v2 | TrapaceR-V0 |
|---|---|---|---|---|---|
| A2C | ✔️ | ✔️ | ✔️ | ✔️ | |
| Acer | N / D | ✔️ | N / D | N / D | N / D |
| Acktr | ✔️ | ✔️ | ✔️ | ✔️ | |
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ | |
| Dqn | N / D | ✔️ | N / D | N / D | N / D |
| Ddpg | ✔️ | N / D | ✔️ | ||
| SACO | ✔️ | N / D | ✔️ | ✔️ | |
| TD3 | ✔️ | N / D | ✔️ | ||
| TRPO | ✔️ | ✔️ | ✔️ |
Consulte https://github.com/bulletphysics/bullet3/tree/master/examples/pybullet/gym/pybullet_envs. Semelhante ao Mujoco Envs, mas com um simulador gratuito: pybullet. Estamos usando a versão BulletEnv-v0 .
Nota: Esses ambientes são derivados do RobosChool e são muito mais difíceis que a versão Mujoco (consulte a questão do Pybullet)
| RL Algo | Walker2d | Halfheetah | Formiga | Reacher | Tremonha | Humanóide |
|---|---|---|---|---|---|---|
| A2C | ✔️ | ✔️ | ✔️ | ✔️ | ||
| Acktr | ✔️ | |||||
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Ddpg | ✔️ | ✔️ | ✔️ | |||
| SACO | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| TD3 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| TRPO | ✔️ | ✔️ | ✔️ | ✔️ |
Pybullet Envs (continuação)
| RL Algo | Minitaur | Minitaurduck | InvertedDoublependulum | InvertedPendulumSwingup |
|---|---|---|---|---|
| A2C | ||||
| Acktr | ||||
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ |
| Ddpg | ||||
| SACO | ✔️ | ✔️ | ||
| TD3 | ✔️ | ✔️ | ||
| TRPO |
Consulte https://github.com/maximecb/gym-minigrid Uma implementação simples, leve e rápida de ambientes de ginástica do famoso gridworld.
| RL Algo | Vazio | Quartos | Porta | Multiroom | Buscar |
|---|---|---|---|---|---|
| A2C | |||||
| PPO2 | ✔️ | ✔️ | |||
| Ddpg | |||||
| SACO | |||||
| TRPO |
Existem 19 grupos ambientais (variações para cada) no total.
Observe que você precisa especificar-Gym_minigrid com desfrute.py e trens.py, pois não é um ambiente de ginástica padrão, além de instalar o módulo de pacote de ginástica personalizado ou colocá-lo no caminho do Python.
pip install gym-minigrid
python train.py --algo ppo2 --env MiniGrid-DoorKey-5x5-v0 --gym-packages gym_minigrid
Isso faz a mesma coisa que:
import gym_minigridAlém disso, pode ser necessário especificar um invólucro de ambiente de ginástica em hiperparâmetros, pois os ambientes de minigrídeos têm espaço de observação de ditos, que não é suportado pelas linhas do StableBaseLines por enquanto.
MiniGrid-DoorKey-5x5-v0:
env_wrapper: gym_minigrid.wrappers.FlatObsWrapper
Você pode treinar agentes on -line usando o Colab Notebook.
Versão Min: Linhas de base estável [MPI]> = 2.10.0
apt-get install swig cmake libopenmpi-dev zlib1g-dev ffmpeg
pip install -r requirements.txt
Consulte Linhas de base estáveis Readme para alternativas.
Build Docker Image (CPU):
./scripts/build_docker.sh
GPU:
USE_GPU=True ./scripts/build_docker.sh
Pull Built Docker Image (CPU):
docker pull stablebaselines/rl-baselines-zoo-cpu
Imagem da GPU:
docker pull stablebaselines/rl-baselines-zoo
Execute o script na imagem do Docker:
./scripts/run_docker_cpu.sh python train.py --algo ppo2 --env CartPole-v1
Para executar testes, primeiro instale o Pytest e depois:
python -m pytest -v tests/
Para citar este repositório em publicações:
@misc { rl-zoo ,
author = { Raffin, Antonin } ,
title = { RL Baselines Zoo } ,
year = { 2018 } ,
publisher = { GitHub } ,
journal = { GitHub repository } ,
howpublished = { url{https://github.com/araffin/rl-baselines-zoo} } ,
}Se você treinou um agente que não está presente no zoológico da RL, envie uma solicitação de tração (contendo os hiperparâmetros e a pontuação também).
Gostaríamos de agradecer nossos colaboradores: @iandanforth, @tatsubori @Shade5