ADVERTENCIA: Este repositorio ya no se mantiene, utilice el zoológico RL-Baselines3 para una versión actualizada, alimentada por estables-Baselines3

Una colección de agentes de aprendizaje de refuerzo entrenado (RL), con hiperparámetros sintonizados, utilizando líneas de base estables.
¡Estamos buscando contribuyentes para completar la colección!
Objetivos de este repositorio:
Si el agente entrenado existe, puede verlo en acción usando:
python enjoy.py --algo algo_name --env env_id
Por ejemplo, disfrute de A2C en Breakout durante 5000 times de tiempo:
python enjoy.py --algo a2c --env BreakoutNoFrameskip-v4 --folder trained_agents/ -n 5000
Si ha entrenado a un agente usted mismo, debe hacer:
# 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 cargar el mejor modelo (cuando use el entorno de evaluación):
python enjoy.py --algo algo_name --env env_id -f logs/ --exp-id 1 --load-best
Los hiperparámetros para cada entorno se definen en hyperparameters/algo_name.yml .
Si el entorno existe en este archivo, entonces puede capacitar a un agente usando:
python train.py --algo algo_name --env env_id
Por ejemplo (con soporte de placa tensor):
python train.py --algo ppo2 --env CartPole-v1 --tensorboard-log /tmp/stable-baselines/
Evalúe el agente cada 10000 pasos utilizando 10 episodios para la evaluación:
python train.py --algo sac --env HalfCheetahBulletEnv-v0 --eval-freq 10000 --eval-episodes 10
Guarde un punto de control del agente cada 100000 pasos:
python train.py --algo td3 --env HalfCheetahBulletEnv-v0 --save-freq 100000
Continúe entrenando (aquí, cargue el agente previo al estado de la ruptura y continúe entrenando para 5000 pasos):
python train.py --algo a2c --env BreakoutNoFrameskip-v4 -i trained_agents/a2c/BreakoutNoFrameskip-v4.pkl -n 5000
Nota: Al entrenar TRPO, debe usar mpirun para habilitar el multiprocesamiento:
mpirun -n 16 python train.py --algo trpo --env BreakoutNoFrameskip-v4
Usamos Optuna para optimizar los hiperparámetros.
Nota: La búsqueda de hiperparámetros no se implementa para ACER y DQN por ahora. Al usar sucesiveHalvingPruner ("reducción de la mitad"), debe especificar --n-jobs > 1
Presupuesto de 1000 pruebas con un máximo de 50000 pasos:
python train.py --algo ppo2 --env MountainCar-v0 -n 50000 -optimize --n-trials 1000 --n-jobs 2
--sampler tpe --pruner median
Puede especificar en la configuración Hyperparameter uno o más envoltorio para usar en el entorno:
Para un envoltorio:
env_wrapper: gym_minigrid.wrappers.FlatObsWrapper
Para múltiples, especifique una lista:
env_wrapper:
- utils.wrappers.DoneOnSuccessWrapper:
reward_offset: 1.0
- utils.wrappers.TimeFeatureWrapper
Tenga en cuenta que también puede especificar fácilmente los parámetros.
Puede especificar argumentos de palabras clave para pasar al constructor ENV en la línea de comando, usando --env-kwargs :
python enjoy.py --algo ppo2 --env MountainCar-v0 --env-kwargs goal_velocity:10
Puede sobrescribir fácilmente los hiperparámetros en la línea de comandos, usando --hyperparams :
python train.py --algo a2c --env MountainCarContinuous-v0 --hyperparams learning_rate:0.001 policy_kwargs:"dict(net_arch=[64, 64])"
Registre 1000 pasos:
python -m utils.record_video --algo ppo2 --env BipedalWalkerHardcore-v2 -n 1000
Los puntajes se pueden encontrar en benchmark.md . Para calcularlos, simplemente ejecute python -m utils.benchmark .
7 Juegos Atari de Operai Benchmark (versiones Noframeskip-V4).
| Rl algo | Beamrider | Fugarse | Enduro | Apestar | Qbert | Seaquest | SpaceInvaders |
|---|---|---|---|---|---|---|---|
| A2C | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Acer | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| Acktr | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Dqn | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Trpo |
Juegos Atari adicionales (para completarse):
| Rl algo | Mspacman |
|---|---|
| A2C | ✔️ |
| Acer | ✔️ |
| Acktr | ✔️ |
| PPO2 | ✔️ |
| Dqn | ✔️ |
| Rl algo | Cartpole-V1 | Montaña-v0 | Acrobot-V1 | Péndulo-v0 | MountainCarcontinuous-V0 |
|---|---|---|---|---|---|
| A2C | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Acer | ✔️ | ✔️ | ✔️ | N / A | N / A |
| Acktr | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Dqn | ✔️ | ✔️ | ✔️ | N / A | N / A |
| Ddpg | N / A | N / A | N / A | ✔️ | ✔️ |
| SACO | N / A | N / A | N / A | ✔️ | ✔️ |
| TD3 | N / A | N / A | N / A | ✔️ | ✔️ |
| Trpo | ✔️ | ✔️ | ✔️ | ✔️ |
| Rl algo | Bipedalwalker-v2 | Lunarlander-v2 | Lunarlandercontinuous-v2 | Bipedalwalkerhardcore-v2 | Carracing-V0 |
|---|---|---|---|---|---|
| A2C | ✔️ | ✔️ | ✔️ | ✔️ | |
| Acer | N / A | ✔️ | N / A | N / A | N / A |
| Acktr | ✔️ | ✔️ | ✔️ | ✔️ | |
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ | |
| Dqn | N / A | ✔️ | N / A | N / A | N / A |
| Ddpg | ✔️ | N / A | ✔️ | ||
| SACO | ✔️ | N / A | ✔️ | ✔️ | |
| TD3 | ✔️ | N / A | ✔️ | ||
| Trpo | ✔️ | ✔️ | ✔️ |
Consulte https://github.com/bulletphysics/bullet3/tree/master/examples/pybullet/gym/pybullet_envs. Similar a Mujoco Envs pero con un simulador gratuito: Pybullet. Estamos utilizando la versión BulletEnv-v0 .
Nota: Esos entornos se derivan de Roboschool y son mucho más difíciles que la versión de Mujoco (ver problema de Pybullet)
| Rl algo | Walker2d | Mediajeeta | Hormiga | Alcance | Tolva | Humanoide |
|---|---|---|---|---|---|---|
| A2C | ✔️ | ✔️ | ✔️ | ✔️ | ||
| Acktr | ✔️ | |||||
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Ddpg | ✔️ | ✔️ | ✔️ | |||
| SACO | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| TD3 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| Trpo | ✔️ | ✔️ | ✔️ | ✔️ |
Envss de Pybullet (continuación)
| Rl algo | Minitaur | Minitaurduck | Péndulo invertido | Invertidopendulumswingup |
|---|---|---|---|---|
| A2C | ||||
| Acktr | ||||
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ |
| Ddpg | ||||
| SACO | ✔️ | ✔️ | ||
| TD3 | ✔️ | ✔️ | ||
| Trpo |
Ver https://github.com/maximecb/gym-minigrid Una implementación de entornos de gimnasio simples, livianos y rápidos del famoso Gridworld.
| Rl algo | Vacío | Cuatro habitaciones | Key | Multiroméstico | Buscar |
|---|---|---|---|---|---|
| A2C | |||||
| PPO2 | ✔️ | ✔️ | |||
| Ddpg | |||||
| SACO | |||||
| Trpo |
Hay 19 grupos ambientales (variaciones para cada uno) en total.
Tenga en cuenta que debe especificar: gym_minigrid gym_minigrid con disfrutar.py y trenes.py, ya que no es un entorno de gimnasio estándar, así como instalar el módulo de paquete de gimnasio personalizado o ponerlo en Python Path.
pip install gym-minigrid
python train.py --algo ppo2 --env MiniGrid-DoorKey-5x5-v0 --gym-packages gym_minigrid
Esto hace lo mismo que:
import gym_minigridAdemás, es posible que deba especificar un envoltorio de entorno de gimnasio en hiperparámetros, ya que los entornos minigrid tienen espacio de observación dict, que no es compatible con StableBaselines por ahora.
MiniGrid-DoorKey-5x5-v0:
env_wrapper: gym_minigrid.wrappers.FlatObsWrapper
Puede entrenar a los agentes en línea usando el cuaderno de Colab.
Versión mínima: Baselines estables [MPI]> = 2.10.0
apt-get install swig cmake libopenmpi-dev zlib1g-dev ffmpeg
pip install -r requirements.txt
Consulte ReadMe de línea base estable para alternativas.
Build Docker Image (CPU):
./scripts/build_docker.sh
GPU:
USE_GPU=True ./scripts/build_docker.sh
Tire de la imagen Docker construida (CPU):
docker pull stablebaselines/rl-baselines-zoo-cpu
Imagen de GPU:
docker pull stablebaselines/rl-baselines-zoo
Ejecutar el script en la imagen de Docker:
./scripts/run_docker_cpu.sh python train.py --algo ppo2 --env CartPole-v1
Para ejecutar pruebas, primero instale pytest, luego:
python -m pytest -v tests/
Para citar este repositorio en publicaciones:
@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} } ,
}Si entrenó a un agente que no está presente en el zoológico RL, envíe una solicitud de extracción (que contiene los hiperparámetros y el puntaje también).
Nos gustaría agradecer a nuestros contribuyentes: @iandanforth, @tatsubori @shade5