AVERTISSEMENT: Ce référentiel n'est plus maintenu, veuillez utiliser le zoo RL-Basélines3 pour une version à jour, alimentée par des bases stables3

Une collection d'agents d'apprentissage en renforcement formé (RL), avec des hyperparamètres réglés, en utilisant des lignes de base stables.
Nous recherchons des contributeurs pour compléter la collection!
Objectifs de ce référentiel:
Si l'agent formé existe, vous pouvez le voir en action en utilisant:
python enjoy.py --algo algo_name --env env_id
Par exemple, profitez de l'A2C sur une cassure pendant 5000 horodatages:
python enjoy.py --algo a2c --env BreakoutNoFrameskip-v4 --folder trained_agents/ -n 5000
Si vous avez formé un agent vous-même, vous devez faire:
# 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
Pour charger le meilleur modèle (lors de l'utilisation de l'environnement d'évaluation):
python enjoy.py --algo algo_name --env env_id -f logs/ --exp-id 1 --load-best
Les hyperparamètres pour chaque environnement sont définis dans hyperparameters/algo_name.yml .
Si l'environnement existe dans ce fichier, vous pouvez former un agent en utilisant:
python train.py --algo algo_name --env env_id
Par exemple (avec support Tensorboard):
python train.py --algo ppo2 --env CartPole-v1 --tensorboard-log /tmp/stable-baselines/
Évaluer l'agent toutes les 10000 étapes en utilisant 10 épisodes pour l'évaluation:
python train.py --algo sac --env HalfCheetahBulletEnv-v0 --eval-freq 10000 --eval-episodes 10
Enregistrez un point de contrôle de l'agent toutes les 100 000 étapes:
python train.py --algo td3 --env HalfCheetahBulletEnv-v0 --save-freq 100000
Continuez à la formation (ici, chargez l'agent pré-entraîné pour une échange et continuez une formation pour 5000 étapes):
python train.py --algo a2c --env BreakoutNoFrameskip-v4 -i trained_agents/a2c/BreakoutNoFrameskip-v4.pkl -n 5000
Remarque: Lors de la formation TRPO, vous devez utiliser mpirun pour permettre le multiprocessement:
mpirun -n 16 python train.py --algo trpo --env BreakoutNoFrameskip-v4
Nous utilisons Optuna pour optimiser les hyperparamètres.
Remarque: La recherche d'hyperparamètres n'est pas implémentée pour ACER et DQN pour l'instant. Lorsque vous utilisez successiveHalvingPruner ("divulgation"), vous devez spécifier --n-jobs > 1
Budget de 1000 essais avec un maximum de 50000 étapes:
python train.py --algo ppo2 --env MountainCar-v0 -n 50000 -optimize --n-trials 1000 --n-jobs 2
--sampler tpe --pruner median
Vous pouvez spécifier dans la configuration hyperparamètre un ou plusieurs wrapper à utiliser dans l'environnement:
Pour un wrapper:
env_wrapper: gym_minigrid.wrappers.FlatObsWrapper
Pour plusieurs, spécifiez une liste:
env_wrapper:
- utils.wrappers.DoneOnSuccessWrapper:
reward_offset: 1.0
- utils.wrappers.TimeFeatureWrapper
Notez que vous pouvez également spécifier des paramètres.
Vous pouvez spécifier des arguments de mots clés pour passer au constructeur Env dans la ligne de commande, en utilisant --env-kwargs :
python enjoy.py --algo ppo2 --env MountainCar-v0 --env-kwargs goal_velocity:10
Vous pouvez facilement écraser les hyperparamètres dans la ligne de commande, en utilisant --hyperparams :
python train.py --algo a2c --env MountainCarContinuous-v0 --hyperparams learning_rate:0.001 policy_kwargs:"dict(net_arch=[64, 64])"
Enregistrer 1000 étapes:
python -m utils.record_video --algo ppo2 --env BipedalWalkerHardcore-v2 -n 1000
Les scores peuvent être trouvés dans benchmark.md . Pour les calculer, exécutez simplement python -m utils.benchmark .
7 Jeux Atari d'Openai Benchmark (versions Noframeskip-V4).
| Algo RL | Amorce | Éclater | Enduro | Pong | Qbert | Plage | Spaceinvaders |
|---|---|---|---|---|---|---|---|
| A2C | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Acer | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| Acktr | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Dqn | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Trpo |
Jeux ATARI supplémentaires (à terminer):
| Algo RL | Mspacman |
|---|---|
| A2C | ✔️ |
| Acer | ✔️ |
| Acktr | ✔️ |
| PPO2 | ✔️ |
| Dqn | ✔️ |
| Algo RL | Cartpole-V1 | Mountaincar-V0 | Acrobot-V1 | Pendule-v0 | Montagnecarcontinu-v0 |
|---|---|---|---|---|---|
| A2C | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Acer | ✔️ | ✔️ | ✔️ | N / A | N / A |
| Acktr | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Dqn | ✔️ | ✔️ | ✔️ | N / A | N / A |
| Ddpg | N / A | N / A | N / A | ✔️ | ✔️ |
| SAC | N / A | N / A | N / A | ✔️ | ✔️ |
| Td3 | N / A | N / A | N / A | ✔️ | ✔️ |
| Trpo | ✔️ | ✔️ | ✔️ | ✔️ |
| Algo RL | Bipedalwalker-V2 | Lunarlander-V2 | Lunarlandercontinu-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 | ✔️ | ||
| SAC | ✔️ | N / A | ✔️ | ✔️ | |
| Td3 | ✔️ | N / A | ✔️ | ||
| Trpo | ✔️ | ✔️ | ✔️ |
Voir https://github.com/bulletphysics/bullet3/tree/master/examples/pybullet/gym/pybullet_envs. Semblable à Mujoco envs mais avec un simulateur gratuit: pybullet. Nous utilisons la version BulletEnv-v0 .
Remarque: ces environnements sont dérivés de Roboschool et sont beaucoup plus difficiles que la version Mujoco (voir le problème de Pybullet)
| Algo RL | Walker2d | Halfcheetah | Fourmi | Réalisatrice | Trémie | Humanoïde |
|---|---|---|---|---|---|---|
| A2C | ✔️ | ✔️ | ✔️ | ✔️ | ||
| Acktr | ✔️ | |||||
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Ddpg | ✔️ | ✔️ | ✔️ | |||
| SAC | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Td3 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| Trpo | ✔️ | ✔️ | ✔️ | ✔️ |
Pybullet envers (suite)
| Algo RL | Minitaure | Minitaurduck | Inversé | Inversépendululumswingup |
|---|---|---|---|---|
| A2C | ||||
| Acktr | ||||
| PPO2 | ✔️ | ✔️ | ✔️ | ✔️ |
| Ddpg | ||||
| SAC | ✔️ | ✔️ | ||
| Td3 | ✔️ | ✔️ | ||
| Trpo |
Voir https://github.com/maximecb/gym-minigrid Une mise en œuvre de gymnase simple, légère et rapide du célèbre Gridworld.
| Algo RL | Vide | Quatre chambres | Clé de porte | Multiromer | Aller chercher |
|---|---|---|---|---|---|
| A2C | |||||
| PPO2 | ✔️ | ✔️ | |||
| Ddpg | |||||
| SAC | |||||
| Trpo |
Il y a 19 groupes d'environnement (variations pour chacun) au total.
Notez que vous devez spécifier - Gym-packages gym_minigrid avec appréciation.py et train.py car ce n'est pas un environnement de gym standard, ainsi que l'installation du module de package de gym personnalisé ou le mettant sur Python Path.
pip install gym-minigrid
python train.py --algo ppo2 --env MiniGrid-DoorKey-5x5-v0 --gym-packages gym_minigrid
Cela fait la même chose que:
import gym_minigridEn outre, vous devrez peut-être spécifier un emballage de l'environnement de gym dans les hyperparamètres, car les environnements minigrides ont un espace d'observation dicté, qui n'est pas soutenu par des basélines stables pour l'instant.
MiniGrid-DoorKey-5x5-v0:
env_wrapper: gym_minigrid.wrappers.FlatObsWrapper
Vous pouvez former des agents en ligne à l'aide de Colab Notebook.
Version min: Basélines stables [MPI]> = 2.10.0
apt-get install swig cmake libopenmpi-dev zlib1g-dev ffmpeg
pip install -r requirements.txt
Veuillez consulter les rédactions de référence stables pour des alternatives.
Build Docker Image (CPU):
./scripts/build_docker.sh
GPU:
USE_GPU=True ./scripts/build_docker.sh
Image Docker Built (CPU):
docker pull stablebaselines/rl-baselines-zoo-cpu
Image du GPU:
docker pull stablebaselines/rl-baselines-zoo
Exécuter le script dans l'image docker:
./scripts/run_docker_cpu.sh python train.py --algo ppo2 --env CartPole-v1
Pour exécuter des tests, installez d'abord Pytest, puis:
python -m pytest -v tests/
Pour citer ce référentiel dans les publications:
@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 vous avez formé un agent qui n'est pas présent dans le zoo RL, veuillez soumettre une demande de traction (contenant les hyperparamètres et le score également).
Nous tenons à remercier nos contributeurs: @iandanforth, @tatsubori @ shade5