Ceci est une ancienne révision du document !
Table des matières
Apprentissage Par Renforcement
Le Hello World de l'Apprentissage Par Renforcement
Linéaire:
Rotatif:
Flying:
Double pendule:
Documenté mais sans RL
- Sergey Royz: Stabilizing pendulum on a cart with full state feedback control
- Articles: habr.com en russe
- Hardware used in the project:
- DC motor, 12V, gearbox 5:1 Modelcraft IG320005-3AC21R motor s převodem 12 V 5:1 @ conrad.cz et Modelcraft IG320005-3AC21R Moteur à entraînement 12 V 5:1 @ conrad.fr
- Incremental rotary encoder LPD3806-600BM-G5-24C 600 PPR (motor) Recherche sur alibaba.com
- Incremental rotary encoder OMRON E6B2-CWZ6C 2500 PPR (pendulum)
- Power supply 12V, 4A Spínaný zdroj MEAN WELL RD-85A. Une alimentation de PC peut convenir !
- 10Amp 5V-30V DC Motor Driver 10Amp 5V-30V DC Motor Driver
- Arduino Mega 2560 @ gotronic.fr
- Source code: https://github.com/zjor/inverted-pendulum
Apprentissage par renforcement
- Apprentissage par renforcement @ fr.wikipedia.org. En intelligence artificielle, plus précisément en apprentissage automatique, l'apprentissage par renforcement consiste, pour un agent autonome (robot, etc.), à apprendre à partir d'expériences, de façon à optimiser une récompense quantitative au cours du temps, positive ou négative. En répétant les expériences, le robot progresse.
Directeur Semour Skinner
Le directeur de l'école des enfants Simpson s'appelle Seymour Skinner, inspiré de Burrhus Frederic Skinner, inventeur de la Boîte de Skinner
Q-learning
Ressources
- Le Q-learning est une technique d'apprentissage par renforcement. La lettre 'Q' désigne la fonction qui mesure la qualité d'une action exécutée dans un état donné du système.
- Dopamine, RLLib, Keras-RL, Coach, TRFL, Tensorforce, Coach and more @ winderresearch.com/
- Apprentissage par renforcement @ larevueia.fr Article général.
- The Best Tools for Reinforcement Learning in Python You Actually Want to Try Posted November 17, 2020, parle de:
- KerasRL
- Tensorforce
- Pyqlearning
- RL_Coach
- TFAgents
- MAME RL
- MushroomRL
Frameworks possibles
Gym de OpenAI
OpenAI
fr.wikipedia.org OpenAI est une entreprise à « but lucratif plafonné » en intelligence artificielle, basée à San Francisco. En 2019, OpenAI a reçu a 1 000 000 000 $ de Microsoft. OpenAi utilise le super Calculateur de Micro$ pour ses apprentissages.
Avant mars 2019, elle était reconnue association à but non lucratif. L'objectif de cette société était de promouvoir et développer une intelligence artificielle à visage humain qui bénéficierait à toute l'humanité. L'objectif actuel est de se faire des $.
Gym
Gym is a toolkit for developing and comparing reinforcement learning algorithms.
Baselines vs Stable-baselines vs Stable-baselines3
OpenAI Baselines is a set of high-quality implementations of reinforcement learning algorithms. “Chef, Le meilleur des meilleurs, chef”
Baselines
Baselines est un projet OpenAI. Les dépendances sont anciennes, l'installation est quasi impossible et Stable-baselines est mieux!
Stable-baselines
Main differences with OpenAI Baselines. This toolset is a fork of OpenAI Baselines, with a major structural refactoring, and code cleanups:
- Unified structure for all algorithms
- PEP8 compliant (unified code style)
- Documented functions and classes
- More tests & more code coverage
- Additional algorithms: SAC and TD3 (+ HER support for DQN, DDPG, SAC and TD3)
git clone https://github.com/hill-a/stable-baselines && cd stable-baselines pip install -e .[docs,tests,mpi] sudo pip3 install -e .[docs,tests,mpi] sudo pip3 install tensorflow==1.15
- Documentation de stable-baselines @ stable-baselines.readthedocs.io
Stable-baselines3
Stable Baselines3 (SB3) is a set of reliable implementations of reinforcement learning algorithms in PyTorch. It is the next major version of Stable Baselines.
sudo pip3 install stable-baselines3 sudo pip3 install stable-baselines3[extra]
- Documentation de stable-baselines3 @ stable-baselines3.readthedocs.io
Le jeu du pendule dans Blender
La modélisation d'un pendule dans Blender avec le moteur physique intégré (Bullet) est délicate.
Un axe static et un cube Rigid Body avec un trou
Le pendule fini rapidement par se décrocher de l'axe, si un vertex du trou est dans l'axe sur une frame, la physics va le faire tomber dans l'infini de l'espace.
Constraint Rigid Body Joint
Axe
Rigid Body Joint
Pendule
Cette 2ème solution permet de bien faire tourner le pendule, par contre le stabiliser verticalement est corriace.
Le Empty a été remplacer par un Cube en Dynamic avec une masse de 1 et le pendule une masse de 0.1
Source sur Github
- Balance sur Github
Soft utilisé
- Debian 10 Buster
- python 3.7
- blender game engine 2.79
- gym modifié dans my_gym
- stable-baselines
gym
gym n'est pas installé dans le système. Ce projet est construit en modifiant des fichiers sources de gym, dans une copie nommée my_gym, importée dans les fichiers avec:
import sys sys.path.append('my_gym') import gym
Bullet dans blender
Le moteur physique de Blender est Bullet. Il vit sa vie en parallèle du moteur de jeu, une commande demandée dans un script python sur une frame agit dans le moteur physique lors des frames suivantes mais en interaction avec la physique en cours. Le script python n'est pas un dictateur qui donne des ordres strictes à Bullet. Exemple d'un reset position et orientation sur 100 frames:
def reset(): gl.num_reset += 1 x, x_dot, teta, teta_dot = gl.reset if 1 < gl.num_reset < 100: gl.cube.worldPosition = [x, 0.738772, 0] gl.cube.worldLinearVelocity[0] = x_dot xyz = gl.pendulum.worldOrientation.to_euler() xyz[1] = teta gl.pendulum.worldOrientation = xyz.to_matrix() gl.pendulum.worldAngularVelocity[1] = teta_dot if gl.num_reset == 100: gl.num_reset = 0 gl.reset = 0
Visualisation dans blender
Dans le dossier du projet
blenderplayer ./balance/balance.blend
Le fps est défini à 120 dans le panneau de rendu, le script once.py défini bge.logicsetLogicTicRate(120)
Cela devrait faire tourner le rendu et le moteur physique à 120 !
Lancement de l'apprentissage
Définition de mon environnement dans:
python3 ./balance/my_gym/gym/envs/classic_control/my_cartpole.py
Le fichier d'apprentissage est à: acktr_blender_250000_1.zip
Utilisation
Lancer blender comme ci-dessus et le script blender_baselines_acktr.py
python3 blender_baselines_acktr.py
Résultat du 1er essai
Gym CartPole Ressources
- CartPole-v0 wiki @ github.com
Définition des Observations = Liste de 4 items:
Num | Observation | Min | Max |
---|---|---|---|
0 | Cart Position | -2.4 | 2.4 |
1 | Cart Velocity | -Inf | Inf |
2 | Pole Angle | ~ -41.8° | ~ 41.8° |
3 | Pole Velocity At Tip | -Inf | Inf |
pybullet
Bullet est le moteur physique de Blender
Création de votre propre environnement
- How to create new environments for Gym @ openai / gym
L'étape suivante de la visualisation dans blender serait de créer un environnement spécifique pour ce my_cartpole et l'installer en dur. Puis d'utiliser gym en l'installant et supprimant les imports locaux de gym.