Assurez vous d'avoir installé les dépendances suivantes :
pip install gymnasium[toy-text,classic-control] matplotlib torch
Les algorithmes que nous allons implémenter (DQN et DDPG) reposent sur le choix de certains hyperparamètres. Voici une liste de valeurs indicatives que vous pouvez utiliser:
Paramètre | Description | Valeur |
---|---|---|
max_buffer_size | Taille maximale du replay buffer. (les données les plus anciennes sont supprimées) | 1000000 |
learning_starts | Taille du buffer à atteindre pour que l'entraînement ne commence | 1000 |
batch_size | Taille des batchs d'entraînement | 512 |
gamma | Facteur d'escompte \(\gamma\) | 0.99 |
update_frequency | Fréquence de mise à jour de l'agent (en nombre d'actions) | 256 |
gradient_steps | Nombre de pas de gradient (learn ) effectués à chaque mise à jour de l'agent | 128 |
train_steps | Nombre d'étapes d'entraînement | 100000 |
epsilon | Facteur d'exploration \(\epsilon\) | 0.03 |
Afin d'encourager l'exploration au début de l'entraînement, il est courant de commencer avec une valeur plus élevée du paramètre \(\epsilon\), et de la diminier progressivement. On appel cela un programme (en anglais schedule) d'exploration. Voici un exemple:
def exploration_schedule(step):
"""
L'exploration commence à 1 et diminue linéairement jusqu'à 0.03
"""
return max(0.03, 1 - step / 10_000)
Dans cette partie, nous allons faire fonctionner l'algorithme DQN. Ce dernier est adapté aux problèmes où l'espace d'état est continu et l'espace d'action discret. Nous testerons donc cet algorithme sur l'environnement CartPole-v1.
L'agent DQN est déjà implémenté dans dqn.py
, parcourez son code. Vous aurez essentiellement besoin
des fonctions:
load
, save
: pour charger et sauvegarder le modèle,learn
, pour entraîner le modèle. Cette fonction prend en paramètre une liste de transitions qui
sont des tuples de la forme (state, action, reward, next_state, done)
.,state
et next_state
sont des états de l'environnement (avant et après la transition),action
est l'action effectuée,reward
est la récompense reçue,done
est un booléen indiquant si l'épisode est terminé.step
.predict
, pour sélectionner une action à effectuer.En vous inspirant de la structure du TD2, écrivez un fichier learn.py
qui:
Dans la boucle d'entraînement, qui se déroulera sur train_steps
étapes (appel à step
):
agent.predict
, ou en sélectionnant une action aléatoire
avec une probabilité \(\epsilon\),learning_starts
transitions, entraîne l'agent sur un batch de transitions
tirées aléatoirement du replay buffer.Vous pourrez alors tester votre entraînement avec DQN.
Écrivez désormais view.py
, qui:
render_mode="human"
),Dans une boucle infinie, on réalisera des épisodes de la manière suivante:
agent.predict
sont exécutées,returns
(la reward cumulée) de l'épisode.À l'aide de live_plot.py
, affichez la courbe d'apprentissage de votre agent DQN. Voici un exemple de
courbe d'apprentissage:
Dans cette partie, nous allons faire fonctionner l'algorithme DDPG. Ce dernier supporte les espaces d'états et d'actions continus. Nous testerons donc cet algorithme sur l'environnement Pendulum-v1.
Mettez à jour learn.py
et view.py
pour pouvoir utiliser l'algorithme DDPG. Vous pourrez par exemple
utiliser argparse
pour permettre à l'utilisateur de sélectionner l'environnement et l'algorithme à utiliser.