Apprenez à entraîner un robot 3D avec Python : comparaison des algorithmes Q-Learning, Actor-Critic et Évolutifs
Cet article présente une introduction pratique à l’apprentissage par renforcement (Reinforcement Learning, RL) appliqué à la robotique, en se concentrant sur trois familles d’algorithmes : Q-Learning, Actor-Critic et les algorithmes évolutionnaires. Le tutoriel utilise Python, Gymnasium (fork de Gym), MuJoCo comme moteur physique 3D, et des bibliothèques comme Stable-Baselines3 et EvoTorch pour implémenter et comparer les modèles. Le point de départ est la création d’un environnement personnalisé à partir du robot quadrupède Ant-v4, dont le but est de le transformer en agent capable de sauter. Pour cela, le fichier XML du modèle est modifié pour réduire la densité du corps (le rendre plus léger) et augmenter la force des membres. Ensuite, une nouvelle fonction de récompense est définie : elle pénalise les positions basses du torse et récompense les hautes altitudes (avec un seuil à 0,6 mètre), encourageant ainsi le saut. Cette nouvelle classe CustomAntEnv est enregistrée via Gym pour être utilisée comme un environnement standard. Le premier algorithme exploré est Q-Learning, particulièrement adapté aux espaces d’actions discrets. Comme l’environnement original est continu (avec des actions continues), une enveloppe (DiscreteEnvWrapper) est créée pour transformer les actions continues en 5 actions discrètes : rester immobile, avancer, reculer, déplacer les pattes avant vers l’avant et arrière, etc. Cette version discrète est ensuite utilisée avec un DQN (Deep Q-Network) via Stable-Baselines3. L’entraînement dure 1 million d’étapes, avec des métriques enregistrées dans TensorBoard. Le résultat montre que l’agent apprend à sauter, mais les mouvements sont raides et peu fluides, car le modèle n’est pas conçu pour des actions continues. En revanche, les algorithmes Actor-Critic, comme SAC (Soft Actor-Critic), sont mieux adaptés aux environnements continus. Ils utilisent deux réseaux : un Actor pour choisir les actions, et un Critic pour estimer la valeur de ces actions. SAC, en particulier, utilise deux réseaux Critic pour améliorer la stabilité. L’entraînement dure 100 000 étapes, avec une meilleure convergence. Lors du test, le robot effectue des sauts fluides et coordonnés, démontrant l’efficacité de cette approche pour les tâches robotiques complexes. Enfin, l’article explore une voie plus expérimentale : les algorithmes évolutionnaires, notamment PGPE (Policy Gradients with Parameter Exploration) via EvoTorch. Contrairement aux méthodes classiques, PGPE ne met pas à jour un seul réseau, mais maintient une distribution gaussienne sur les poids du réseau. À chaque génération, plusieurs politiques sont évaluées en parallèle, et les paramètres moyens et écart-type sont ajustés selon les performances. Cette méthode est particulièrement efficace dans des environnements à récompenses rares ou mal définies. L’entraînement est rapide à mettre en œuvre, et la visualisation finale montre un robot qui saute de manière efficace, même sans apprentissage gradient. En conclusion, le choix de l’algorithme dépend fortement du contexte : Q-Learning pour les actions discrètes, Actor-Critic (SAC) pour les actions continues et fluides, et les algorithmes évolutionnaires pour des cas où la récompense est difficile à concevoir. L’article fournit du code complet sur GitHub, permettant aux lecteurs de reproduire les expériences. Les outils comme Gymnasium, MuJoCo, Stable-Baselines3 et EvoTorch rendent l’exploration du RL accessible et puissante pour la robotique 3D.
