ADVERTENCIA: Este paquete está en modo de mantenimiento, utilice Stable-Baselines3 (SB3) para una versión actualizada. Puede encontrar una guía de migración en la documentación SB3.
Las líneas de base estables son un conjunto de implementaciones mejoradas de algoritmos de aprendizaje de refuerzo basados en líneas de base OpenAI.
Puede leer una presentación detallada de líneas de base estables en el artículo Medio.
Estos algoritmos facilitarán que la comunidad de investigación y la industria replicarán, refinar e identificar nuevas ideas, y crearán buenas líneas de base para construir proyectos además. Esperamos que estas herramientas se usen como una base alrededor de la cual se pueden agregar nuevas ideas y como una herramienta para comparar un nuevo enfoque con las existentes. También esperamos que la simplicidad de estas herramientas permita a los principiantes experimentar con un conjunto de herramientas más avanzado, sin ser enterrados en los detalles de implementación.
Nota: A pesar de su simplicidad de uso, las líneas de base estables (SB) supone que tiene algún conocimiento sobre el aprendizaje de refuerzo (RL). No debe utilizar esta biblioteca sin alguna práctica. En ese sentido, proporcionamos buenos recursos en la documentación para comenzar con RL.
Este conjunto de herramientas es una bifurcación de líneas de base OpenAi, con una importante refactorización estructural y limpiezas de código:
| Características | Baselas estables | Líneas de base de Operai |
|---|---|---|
| Métodos de última generación | ✔️ (1) | ✔️ |
| Documentación | ✔️ | |
| Entornos personalizados | ✔️ | ✔️ |
| Políticas personalizadas | ✔️ | ➖ (2) |
| Interfaz común | ✔️ | ➖ (3) |
| Soporte de TensorBoard | ✔️ | ➖ (4) |
| Ipython / cuaderno amigable | ✔️ | |
| Estilo de código Pep8 | ✔️ | ✔️ (5) |
| Devolución de llamada personalizada | ✔️ | ➖ (6) |
(1): bifurcado de la versión anterior de las líneas de base de Operai, con ahora SAC y TD3 además
(2): Actualmente no está disponible para DDPG, y solo desde el script Ejecutar.
(3): Solo a través del script Ejecutar.
(4): Registro rudimentario de información de entrenamiento (sin pérdida ni gráfico).
(5): Editar: ¡lo hiciste OpenAi! ?
(6): pasar una función de devolución de llamada solo está disponible para DQN
La documentación está disponible en línea: https://stable-baselines.readthedocs.io/
RL BASELLINES ZOO. es una colección de agentes de aprendizaje de refuerzo previamente capacitado que usan baselines estables.
También proporciona scripts básicos para capacitación, evaluación de agentes, sintonizar hiperparámetros y grabar videos.
Objetivos de este repositorio:
Repo de Github: https://github.com/araffin/rl-baselines-zoo
Documentación: https://stable-baselines.readthedocs.io/en/master/guide/rl_zoo.html
Nota: Las baselas estables admiten versiones de TensorFlow de 1.8.0 a 1.14.0. Se planea el apoyo a la API de TensorFlow 2.
Las líneas de base requieren Python3 (> = 3.5) con los encabezados de desarrollo. También necesitará paquetes del sistema CMake, OpenMPI y ZLIB. Esos se pueden instalar de la siguiente manera
sudo apt-get update && sudo apt-get install cmake libopenmpi-dev python3-dev zlib1g-devLa instalación de paquetes del sistema en Mac requiere casería casera. Con HomeBrew instalado, ejecute lo siguiente:
brew install cmake openmpiPara instalar baselines estables en Windows, mire la documentación.
Instale el paquete de líneas de base estables:
pip install stable-baselines[mpi]
Esto incluye una dependencia opcional de MPI, habilitando algoritmos DDPG, GAIL, PPO1 y TRPO. Si no necesita estos algoritmos, puede instalar sin MPI:
pip install stable-baselines
Lea la documentación para obtener más detalles y alternativas (de la fuente, usando Docker).
La mayoría de la biblioteca trata de seguir una sintaxis similar a Sklearn para los algoritmos de aprendizaje de refuerzo.
Aquí hay un ejemplo rápido de cómo entrenar y ejecutar PPO2 en un entorno Cartpole:
import gym
from stable_baselines . common . policies import MlpPolicy
from stable_baselines . common . vec_env import DummyVecEnv
from stable_baselines import PPO2
env = gym . make ( 'CartPole-v1' )
# Optional: PPO2 requires a vectorized environment to run
# the env is now wrapped automatically when passing it to the constructor
# env = DummyVecEnv([lambda: env])
model = PPO2 ( MlpPolicy , env , verbose = 1 )
model . learn ( total_timesteps = 10000 )
obs = env . reset ()
for i in range ( 1000 ):
action , _states = model . predict ( obs )
obs , rewards , dones , info = env . step ( action )
env . render ()
env . close ()O simplemente capacite a un modelo con un revestimiento si el entorno está registrado en el gimnasio y si la política está registrada:
from stable_baselines import PPO2
model = PPO2 ( 'MlpPolicy' , 'CartPole-v1' ). learn ( 10000 )Lea la documentación para obtener más ejemplos.
Todos los siguientes ejemplos se pueden ejecutar en línea usando los cuadernos de Google Colab:
| Nombre | Refactorizado (1) | Recurrente | Box | Discrete | MultiDiscrete | MultiBinary | Procesamiento múltiple |
|---|---|---|---|---|---|---|---|
| A2C | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Acer | ✔️ | ✔️ | (5) | ✔️ | ✔️ | ||
| Acktr | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ||
| Ddpg | ✔️ | ✔️ | ✔️ (4) | ||||
| Dqn | ✔️ | ✔️ | |||||
| Gail (2) | ✔️ | ✔️ | ✔️ | ✔️ (4) | |||
| Ella (3) | ✔️ | ✔️ | ✔️ | ✔️ | |||
| PPO1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ (4) | |
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| SACO | ✔️ | ✔️ | |||||
| TD3 | ✔️ | ✔️ | |||||
| Trpo | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ (4) |
(1): si el algoritmo se ha refactorizado o no para adaptarse a la clase BaseRLModel .
(2): Solo implementado para TRPO.
(3): Reimplementado desde cero, ahora admite DQN, DDPG, SAC y TD3
(4): Procesamiento múltiple con MPI.
(5): TODO, en el alcance del proyecto.
Nota: el actor suave-crítico (SAC) y el DDPG retrasado gemelo (TD3) no formaron parte de las líneas de base originales y ella fue reimplentada desde cero.
Acciones gym.spaces :
Box : una caja n-dimensional que contiene cada punto del espacio de acción.Discrete : una lista de posibles acciones, donde se puede utilizar cada tiempo de tiempo solo una de las acciones.MultiDiscrete : una lista de posibles acciones, donde se puede utilizar cada acción de tiempo solo una acción de cada conjunto discreto.MultiBinary : una lista de posibles acciones, donde cada tiempo de tiempo cualquiera de las acciones puede usarse en cualquier combinación. Algunos de los ejemplos de líneas de base usan el simulador de física Mujoco (dinámica múltiple en contacto), que es propietario y requiere binarios y una licencia (licencia temporal de 30 días se puede obtener de www.mujoco.org). Las instrucciones sobre la configuración de Mujoco se pueden encontrar aquí
Todas las pruebas unitarias en líneas de base se pueden ejecutar usando Pytest Runner:
pip install pytest pytest-cov
make pytest
Intentamos mantener una lista de proyectos utilizando tareas estables en la documentación, dígales cuándo si desea que su proyecto aparezca en esta página;)
Para citar este repositorio en publicaciones:
@misc{stable-baselines,
author = {Hill, Ashley and Raffin, Antonin and Ernestus, Maximilian and Gleave, Adam and Kanervisto, Anssi and Traore, Rene and Dhariwal, Prafulla and Hesse, Christopher and Klimov, Oleg and Nichol, Alex and Plappert, Matthias and Radford, Alec and Schulman, John and Sidor, Szymon and Wu, Yuhuai},
title = {Stable Baselines},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/hill-a/stable-baselines}},
}
Stable-Baselines es actualmente mantenido por Ashley Hill (también conocido como @Hill-A), Antonin Raffin (también conocido como @araffin), Maximilian Ernestus (también conocido como @ernestum), Adam Gleave (@adambleaave) y Anssi Kanervisto (@miffyli).
Nota importante: no hacemos soporte técnico, ni consultas y no respondemos preguntas personales por correo electrónico.
Para cualquier interesado en mejorar las líneas de base, todavía hay alguna documentación que debe hacerse. Si desea contribuir, lea primero la guía de contribuyentes .
Las líneas de base estables se crearon en el laboratorio de robótica U2IS (equipo de Flowers de Inria) en Ensta Paristech.
Créditos del logotipo: LM Tenkes