Ismail Ben Alla

Pendulum RL

Swing-up et Acrobot avec toutes les méthodes classiques de RL

Apprentissage par renforcement · oct. 2026 · Terminé

Douze méthodes d’apprentissage par renforcement redressent un pendule et un acrobot, avec le même budget, pour que leurs différences deviennent visibles.

Construit avecPyTorchGymnasiumNumPyMatplotlibpytest

Pendulum RL — vue d’ensemble

Présentation

Pendulum-v1 est le plus petit problème de contrôle continu : un moteur trop faible pour soulever la tige directement, donc l’agent doit la balancer pour gagner de l’énergie, puis freiner et la maintenir à la verticale. Acrobot-v1 en est le cousin discret : deux segments avec un moteur au coude et une récompense de -1 à chaque pas jusqu’à ce que l’extrémité dépasse une ligne. Je voulais voir comment chaque méthode classique les aborde, pas seulement son score.

J’ai écrit une seule base de code PyTorch avec un fichier par famille : DDPG, TD3 et SAC avec réglage automatique de l’entropie pour le couple continu ; PPO avec GAE et clipping, A2C et REINFORCE sur les deux tâches ; la méthode de l’entropie croisée comme baseline sans gradient ; DQN, double et dueling DQN sur Acrobot et un DQN discrétisé sur le pendule ; et SARSA(lambda) avec tile coding et traces d’éligibilité, sans réseau de neurones. Chaque méthode passe par le même Monitor, qui compte les pas d’environnement et évalue la politique déterministe sur les mêmes états de départ.

Sur Pendulum, les trois acteurs-critiques off-policy résolvent la tâche en 5-6k pas parce qu’ils rejouent chaque transition ; PPO a besoin d’environ quatre fois plus de pas, REINFORCE de 320k et CEM de 1.4M. Sur Acrobot, SARSA(lambda) avec tile coding est le plus rapide à atteindre le seuil de -100, en 12,500 pas et 12 secondes, et A2C obtient le meilleur retour final. Les heatmaps de valeur montrent que chaque critique trouve la même bande diagonale d’états qui mènent en roue libre jusqu’en haut, et que chaque politique est proche du bang-bang.

La question

Comment se comparent les acteurs-critiques off-policy, les gradients de politique on-policy, la recherche en boîte noire et les méthodes fondées sur la valeur sur deux mêmes tâches de contrôle classique, lorsqu’ils partagent un environnement, une unité de budget (les pas d’environnement) et une évaluation ?

Fonctionnalités clés

Comment ça marche

  1. Construire l’environnement

    make_env renvoie Pendulum-v1 (observation cos theta, sin theta, theta_dot ; couple dans [-2, 2]) ou Acrobot-v1 (six nombres, trois couples au coude). Un wrapper DiscretizedAction découpe le couple du pendule en 5 valeurs pour DQN.

  2. Choisir la forme de boucle

    Les agents off-policy agissent, stockent la transition et font un pas de gradient sur un batch aléatoire. Les agents on-policy collectent un rollout, calculent les avantages GAE, se mettent à jour puis jettent les données. CEM exécute des épisodes complets pour chaque vecteur de poids candidat ; SARSA se met à jour à chaque pas via les traces d’éligibilité.

  3. Apprendre

    DDPG fait monter Q(s, mu(s)) ; TD3 ajoute deux critiques jumeaux, des mises à jour retardées de l’acteur et un lissage de la cible ; SAC maximise la récompense plus alpha fois l’entropie, avec alpha réglé sur une entropie cible de -1 ; PPO clippe le ratio de probabilités à 0.8-1.2 sur 10 époques ; les variantes de DQN régressent vers un réseau cible avec les corrections double et dueling.

  4. Suivre sur le même axe

    Le Monitor compte les pas d’environnement, enregistre chaque retour d’entraînement et lance 5 épisodes d’évaluation tous les eval_every pas avec la politique déterministe sur les graines 10000 et suivantes, soit les mêmes états de départ pour chaque méthode.

  5. Comparer et inspecter

    pendulum-compare entraîne chaque méthode et écrit le tableau de résultats (pas jusqu’au seuil, retour final sur 20 épisodes, temps réel), les courbes et les heatmaps de valeur / de couple évaluées sur une grille d’états 61x61.

Exemples

Pendulum, SAC, même départ en position pendante : l’acteur non entraîné (à gauche) ne redresse jamais la tige (retour -1846) ; après 15,000 pas d’entraînement (à droite), il se balance pour gagner de l’énergie, puis freine et la maintient à la verticale (-244).
Acrobot, A2C : la politique non entraînée (à gauche) n’atteint jamais la ligne en 500 pas ; la politique entraînée (à droite) fait passer l’extrémité au-dessus en 88 pas.
Toutes les méthodes Pendulum depuis le même départ pendant, le plus difficile, où environ -250 est le meilleur score possible : SAC atteint -244, DDPG et TD3 environ -340, CEM -530.
Toutes les méthodes Acrobot depuis le même départ : les huit font passer l’extrémité au-dessus de la ligne, en 64 (REINFORCE) à 96 (CEM) pas.
Ce que chaque agent Pendulum a appris : V(s) sur (theta, theta_dot) avec theta = 0 à la verticale (en haut) et le couple (en bas). Chaque critique trouve la même bande diagonale d’états qui mènent en roue libre jusqu’en haut ; chaque politique est presque bang-bang.
Ce que chaque agent Pendulum a appris : V(s) sur (theta, theta_dot) avec theta = 0 à la verticale (en haut) et le couple (en bas). Chaque critique trouve la même bande diagonale d’états qui mènent en roue libre jusqu’en haut ; chaque politique est presque bang-bang.
Retour d’évaluation sur Pendulum en fonction des pas d’environnement : SAC, DDPG et TD3 franchissent -200 vers 5-6k pas, PPO vers 20k, REINFORCE vers 320k et CEM vers 1.4M.
Retour d’évaluation sur Pendulum en fonction des pas d’environnement : SAC, DDPG et TD3 franchissent -200 vers 5-6k pas, PPO vers 20k, REINFORCE vers 320k et CEM vers 1.4M.
Retour d’évaluation sur Acrobot : SARSA(lambda) avec tile coding atteint -100 en premier, à 12,500 pas ; les huit méthodes atteignent le seuil pendant l’entraînement.
Retour d’évaluation sur Acrobot : SARSA(lambda) avec tile coding atteint -100 en premier, à 12,500 pas ; les huit méthodes atteignent le seuil pendant l’entraînement.

Entrée

pendulum-train --env pendulum --algo sac && pendulum-eval runs/pendulum/sac/model.pt --episodes 20

Sortie

final return -119.0 ± 82.5 over 20 episodes (15,000 steps, 1.8 min on one CPU thread)

Le run SAC à l’origine du tableau de résultats. Le ± 82 vient des états de départ, pas de la politique : un départ près du sommet donne environ 0, un départ pendant environ -250.

Stack technique

Ce que j’ai appris

Limites

Mots-clés

apprentissage par renforcement · contrôle continu · swing-up du pendule · Acrobot · DDPG · TD3 · SAC · PPO · GAE · méthode de l’entropie croisée · DQN · SARSA(lambda) · tile coding · Gymnasium · PyTorch