AVISO: Este pacote está no modo de manutenção, use o estábulo Baselines3 (SB3) para uma versão atualizada. Você pode encontrar um guia de migração na documentação do SB3.
As linhas de base estáveis são um conjunto de implementações aprimoradas de algoritmos de aprendizado de reforço baseados em linhas de base Openai.
Você pode ler uma apresentação detalhada de linhas de base estáveis no artigo médio.
Esses algoritmos facilitarão a replicar, refinar e identificar novas idéias e criarão boas linhas de base para criar projetos para criar projetos. Esperamos que essas ferramentas sejam usadas como base em que novas idéias podem ser adicionadas e como uma ferramenta para comparar uma nova abordagem contra as existentes. Também esperamos que a simplicidade dessas ferramentas permita que os iniciantes experimentem um conjunto de ferramentas mais avançado, sem serem enterrados nos detalhes da implementação.
Nota: Apesar da simplicidade de uso, as linhas de base estáveis (SB) assumem que você tem algum conhecimento sobre o aprendizado de reforço (RL). Você não deve utilizar esta biblioteca sem alguma prática. Nesse ponto, fornecemos bons recursos na documentação para começar com o RL.
Este conjunto de ferramentas é um garfo de linhas de base Openai, com uma grande refatoração estrutural e limpeza de código:
| Características | Linhas de base estável | Linhas de base Openai |
|---|---|---|
| Métodos de última geração | ✔️ (1) | ✔️ |
| Documentação | ✔️ | |
| Ambientes personalizados | ✔️ | ✔️ |
| Políticas personalizadas | ✔️ | ➖ (2) |
| Interface comum | ✔️ | ➖ (3) |
| Suporte ao Tensorboard | ✔️ | ➖ (4) |
| Ipython / notebook amigável | ✔️ | |
| Estilo de código pep8 | ✔️ | ✔️ (5) |
| Retorno de chamada personalizado | ✔️ | ➖ (6) |
(1): bifurcado da versão anterior do OpenAi Basilines, com agora SAC e TD3 além
(2): Atualmente não está disponível para DDPG e apenas no script de execução.
(3): Somente através do script de execução.
(4): Registro rudimentar de informações de treinamento (sem perda nem gráfico).
(5): Editar: Você fez isso OpenAI! ?
(6): Passar uma função de retorno de chamada está disponível apenas para DQN
A documentação está disponível online: https://stable-baselines.readthedocs.io/
Zoológico de linhas de base rl. é uma coleção de agentes de aprendizado de reforço pré-treinado usando linhas de base estável.
Ele também fornece scripts básicos para treinamento, avaliação de agentes, ajustando hiperparâmetro e gravação de vídeos.
Objetivos deste repositório:
Github Repo: https://github.com/araffin/rl-baselines-zoo
Documentação: https://stable-baselines.readthedocs.io/en/master/guide/rl_zoo.html
Nota: As linhas de base estável suportam versões Tensorflow de 1.8.0 a 1.14.0. O suporte à API do TensorFlow 2 está planejado.
As linhas de base requer Python3 (> = 3,5) com os cabeçalhos de desenvolvimento. Você também precisará de pacotes de sistemas CMake, OpenMPI e Zlib. Aqueles podem ser instalados da seguinte forma
sudo apt-get update && sudo apt-get install cmake libopenmpi-dev python3-dev zlib1g-devA instalação de pacotes do sistema no Mac requer homebrew. Com o homebrew instalado, execute o seguinte:
brew install cmake openmpiPara instalar linhas de base estável no Windows, consulte a documentação.
Instale o pacote estável de linhas de base:
pip install stable-baselines[mpi]
Isso inclui uma dependência opcional do MPI, ativando algoritmos DDPG, GAIL, PPO1 e TRPO. Se você não precisar desses algoritmos, poderá instalar sem MPI:
pip install stable-baselines
Leia a documentação para obter mais detalhes e alternativas (da fonte, usando o Docker).
A maior parte da biblioteca tenta seguir uma sintaxe do tipo Sklearn para os algoritmos de aprendizado de reforço.
Aqui está um exemplo rápido de como treinar e executar o PPO2 em um ambiente de carrinho:
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 ()Ou basta treinar um modelo com um revestimento único se o ambiente estiver registrado na academia e se a política estiver registrada:
from stable_baselines import PPO2
model = PPO2 ( 'MlpPolicy' , 'CartPole-v1' ). learn ( 10000 )Leia a documentação para mais exemplos.
Todos os exemplos a seguir podem ser executados on -line usando notebooks do Google Colab:
| Nome | Refatorado (1) | Recorrente | Box | Discrete | MultiDiscrete | MultiBinary | Multi processamento |
|---|---|---|---|---|---|---|---|
| A2C | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Acer | ✔️ | ✔️ | (5) | ✔️ | ✔️ | ||
| Acktr | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ||
| Ddpg | ✔️ | ✔️ | ✔️ (4) | ||||
| Dqn | ✔️ | ✔️ | |||||
| Gail (2) | ✔️ | ✔️ | ✔️ | ✔️ (4) | |||
| Ela (3) | ✔️ | ✔️ | ✔️ | ✔️ | |||
| PPO1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ (4) | |
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| SACO | ✔️ | ✔️ | |||||
| TD3 | ✔️ | ✔️ | |||||
| TRPO | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ (4) |
(1): Se o algoritmo foi ou não refaturado para se ajustar à classe BaseRLModel .
(2): implementado apenas para TRPO.
(3): Reimplementado do zero, agora suporta DQN, DDPG, SAC e TD3
(4): Multi processamento com MPI.
(5): TODO, no escopo do projeto.
NOTA: O ator-crítico (SAC) suave e o DDPG tardio (TD3) não faziam parte das linhas de base originais e ela foi reimplementada do zero.
Ações gym.spaces :
Box : uma caixa N-dimensional que contém todos os pontos do espaço de ação.Discrete : uma lista de ações possíveis, onde cada tempo de tempo só pode ser usado.MultiDiscrete : uma lista de ações possíveis, em que cada tempo de timestep apenas uma ação de cada conjunto discreto pode ser usado.MultiBinary : uma lista de ações possíveis, onde cada um dos timestep qualquer uma das ações pode ser usado em qualquer combinação. Alguns dos exemplos de linhas de base usam o simulador de física Mujoco (dinâmica de jonto múltiplo em contato), que é proprietário e requer binários e uma licença (a licença temporária de 30 dias pode ser obtida em www.mujoco.org). As instruções sobre a configuração do Mujoco podem ser encontradas aqui
Todos os testes de unidade nas linhas de base podem ser executados usando Pytest Runner:
pip install pytest pytest-cov
make pytest
Tentamos manter uma lista de projeto usando linhas de base estável na documentação, diga-nos quando você deseja que seu projeto apareça nesta página;)
Para citar este repositório em publicações:
@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}},
}
A Stable-Baselines é atualmente mantida por Ashley Hill (também conhecida como @Hill-A), Antonin Raffin (também conhecida como @araffin), Maximilian Ernestus (também conhecido como @ernestum), Adam Gleave (@adamgleave) e Anssi Kanervisto (@miffyli).
NOTA IMPORTANTE: Não fazemos suporte técnico, nem consultando e não respondemos a perguntas pessoais por e -mail.
Para qualquer interesse em melhorar as linhas de base, ainda há alguma documentação que precisa ser feita. Se você deseja contribuir, leia o guia contribuinte.md primeiro.
As linhas de base estáveis foram criadas no Robotics Lab U2IS (equipe de Inria Flowers) na ENSTA Paristech.
Créditos do logotipo: LM Tenkes