Ismail Ben Alla

LunarLander RL

Onze méthodes de deep RL sur un même benchmark

Apprentissage par renforcement · oct. 2026 · Terminé

De DQN à SAC, chacun dans un fichier lisible, pour poser le même module sous la même évaluation.

Construit avecPyTorchGymnasiumBox2DNumPyMatplotlibpytest

LunarLander RL — vue d’ensemble

Présentation

LunarLander est l’étape d’après CartPole : un état de 8 flottants, un +100 rare pour s’immobiliser, un -100 en cas de crash, un coût en carburant, et un plateau de vol stationnaire qui piège beaucoup d’agents. Je m’en suis servi pour implémenter les méthodes classiques de deep RL, une par fichier, et les comparer honnêtement : DQN avec ses variantes double et dueling, le replay priorisé et les retours à 3 pas, REINFORCE avec baseline, A2C, PPO et SAC discret sur l’atterrisseur à 4 boutons, et DDPG, TD3, SAC et PPO gaussien sur la version continue à 2 gaz.

Chaque algorithme fait 60-120 lignes, avec sa règle de mise à jour écrite sous forme d’équations dans la docstring ; les réseaux sont de petits MLP, et une seule dataclass Config décrit n’importe quel run. Toutes les méthodes partagent l’environnement, les graines, un Tracker qui lance une évaluation gloutonne tous les 10,000 pas sur des épisodes fixes non vus, un score final sur 20 épisodes, les courbes et le tableau comparatif. 49 tests vérifient les buffers, la GAE et les log-probabilités, et que chaque agent apprend un bandit.

Sur un seul thread CPU, PPO est la plus fiable (276.4 +- 18.2 après résolution à 330,000 pas) et sa version gaussienne résout l’atterrisseur continu en 1.5 minute. DQN et dueling DQN résolvent à 50,000 pas, double DQN à 90,000. A2C atteint 200 puis s’effondre, REINFORCE progresse lentement, et les méthodes off-policy continues sont encore en vol stationnaire quand leurs budgets de 120,000 pas s’épuisent.

La question

Lesquels des algorithmes classiques de deep RL posent le module en quelques minutes sur un seul thread CPU, et que montrent leurs courbes sur le compromis entre efficacité en échantillons et stabilité ?

Fonctionnalités clés

Comment ça marche

  1. L’environnement

    LunarLander-v3 fournit un état de 8 flottants (position, vitesse, angle, vitesse angulaire, contacts des pieds). Sa récompense est un terme de shaping fondé sur un potentiel moins le carburant, plus +100 pour l’immobilisation et -100 en cas de crash ; c’est ce shaping dense qui rend la tâche apprenable en 10^5 pas.

  2. Méthodes de valeur avec replay

    DQN régresse Q(s, a) vers r + gamma max Q_target(s') à partir d’un buffer de 50,000 transitions, avec un réseau cible copié toutes les 250 mises à jour. Double DQN laisse le réseau en ligne choisir a' et le réseau cible l’évaluer ; dueling DQN ajoute Q = V + A - mean A, le replay priorisé selon l’erreur TD avec poids d’importance, et les retours à 3 pas.

  3. Gradient de politique et acteur-critique

    REINFORCE augmente log pi(a|s) en proportion du retour restant moins un V(s) appris, sur des épisodes entiers. A2C utilise des avantages GAE issus de rollouts de 16 pas sur 8 environnements, avec un pas de gradient par rollout ; PPO collecte 16 x 1024 pas et effectue 4 époques de mises à jour par minibatch avec ratio clippé.

  4. Acteurs à entropie maximale et déterministes

    Le SAC discret somme exactement sur les 4 actions avec une température apprise. Sur l’atterrisseur continu, DDPG suit le gradient du critique dQ/da avec un bruit d’exploration gaussien, TD3 ajoute des critiques jumeaux, un lissage de la cible et un acteur retardé, et SAC utilise un acteur tanh-gaussien avec la récompense plus alpha fois l’entropie.

  5. Suivre et comparer

    Tous les 10,000 pas, la politique gloutonne joue 10 épisodes fixes ; une moyenne de 200 ou plus compte comme résolu et peut arrêter l’entraînement. Une évaluation finale sur 20 épisodes avec des graines inédites remplit le tableau, à côté des baselines aléatoire (-142.7) et contrôleur PID (265.9 / 288.2).

Exemples

PPO sur l’atterrisseur discret, même graine d’épisode et même réseau des deux côtés. À gauche : le réseau non entraîné descend incliné et s’écrase (retour -531). À droite : le checkpoint entraîné se pose entre les drapeaux (retour 231) ; 200 ou plus compte comme résolu.
PPO gaussien sur l’atterrisseur continu (deux gaz), non entraîné à gauche et entraîné à droite. L’atterrissage sur cette graine obtient 173, sous la barre des 200 ; la moyenne du run sur 20 épisodes est de 262.5 +- 35.9.
Toutes les méthodes qui ont résolu la tâche en local, jouant la même graine d’épisode : DQN, double DQN, dueling DQN, PPO et PPO continu. A2C a atteint 200 avant de retomber à -145, il est donc écarté.
TD3 après son budget CPU de 120,000 pas (retour final 3.0 +- 38.4) : l’atterrisseur ne s’écrase plus mais plane et descend sans jamais s’engager à se poser, l’optimum local classique de cette récompense.
Retour en évaluation gloutonne en fonction des pas d’environnement pour les sept méthodes de l’atterrisseur discret. PPO reste au-dessus de 250 après 330,000 pas, les variantes de DQN résolvent avant 100,000, A2C culmine à 228.9 puis s’effondre.
Retour en évaluation gloutonne en fonction des pas d’environnement pour les sept méthodes de l’atterrisseur discret. PPO reste au-dessus de 250 après 330,000 pas, les variantes de DQN résolvent avant 100,000, A2C culmine à 228.9 puis s’effondre.
L’atterrisseur continu : le PPO gaussien résout à 300,000 pas tandis que DDPG, TD3 et SAC passent d’environ -250 à environ 0 dans leurs budgets de 120,000 pas.
L’atterrisseur continu : le PPO gaussien résout à 300,000 pas tandis que DDPG, TD3 et SAC passent d’environ -250 à environ 0 dans leurs budgets de 120,000 pas.

Entrée

lunarlander-eval --baseline heuristic # and --baseline random

Sortie

heuristic (gymnasium's PID controller): 265.9 +- 35.4 discrete, 288.2 +- 16.9 continuous random actions: -142.7 +- 80.1

Politiques de référence sur les mêmes 20 épisodes d’évaluation que les agents entraînés, ce qui place le 276.4 de PPO à côté du 265.9 du contrôleur écrit à la main.

Stack technique

Ce que j’ai appris

Limites

Mots-clés

apprentissage par renforcement · LunarLander · Gymnasium · Box2D · DQN · double DQN · dueling DQN · replay d’expérience priorisé · REINFORCE · A2C · PPO · SAC · TD3 · DDPG · PyTorch