apprentissage_par_renforcement
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
apprentissage_par_renforcement [2021/02/10 17:43] – [Source sur Github] serge | apprentissage_par_renforcement [2022/02/10 07:52] – [Apprentissage Par Renforcement] serge | ||
---|---|---|---|
Ligne 6: | Ligne 6: | ||
**[[les_pages_intelligence_artificielle_en_details|Les Pages Intelligence Artificielle en détails]]** | **[[les_pages_intelligence_artificielle_en_details|Les Pages Intelligence Artificielle en détails]]** | ||
</ | </ | ||
- | {{ : | + | {{ : |
===== Le Hello World de l' | ===== Le Hello World de l' | ||
Ligne 23: | Ligne 23: | ||
</ | </ | ||
</ | </ | ||
+ | * Rotary Inverted Pendulum: Swing Up and Stabilization https:// | ||
+ | * Double Inverted Furuta Pendulum https:// | ||
+ | * Furuta Pendulum avec une belle finition https:// | ||
=====Apprentissage par renforcement===== | =====Apprentissage par renforcement===== | ||
* **[[https:// | * **[[https:// | ||
- | ====Directeur | + | ====Directeur |
{{ youtube> | {{ youtube> | ||
Le directeur de l' | Le directeur de l' | ||
Ligne 42: | Ligne 44: | ||
* [[https:// | * [[https:// | ||
- | ====Principe vulgarisé==== | + | ====Principe vulgarisé |
- | ===Boucle | + | |
* [[https:// | * [[https:// | ||
Ligne 51: | Ligne 52: | ||
{{ : | {{ : | ||
- | ===Apprentissage par renforcement=== | + | ====Principe vulgarisé de l'Apprentissage par Renforcement==== |
+ | **RL = Reinforcement Learning = Apprentissage par Renforcement** | ||
{{ : | {{ : | ||
- | + | L'IA (Intelligence Artificielle) dont nous parlons ici n'est pas intelligente, | |
- | L'IA (Intelligence Artificielle) dont nous parlons ici n'est pas intelligente, | + | |
Dans l' | Dans l' | ||
L' | L' | ||
Ligne 61: | Ligne 61: | ||
L’**environnement** est l' | L’**environnement** est l' | ||
La **récompense** est calculée en fonction de l' | La **récompense** est calculée en fonction de l' | ||
- | Une nouvelle action est calculée par l' | + | Une nouvelle |
[[https:// | [[https:// | ||
- | |||
Dans [[https:// | Dans [[https:// | ||
Ligne 72: | Ligne 71: | ||
===Gym=== | ===Gym=== | ||
- | Gym is a toolkit for developing and comparing reinforcement learning algorithms. | + | Gym is a toolkit for developing and comparing reinforcement learning algorithms: [[https:// |
- | * [[https:// | + | |
- | * [[https:// | + | |
- | * [[http:// | + | |
====Baselines vs Stable-baselines vs Stable-baselines3==== | ====Baselines vs Stable-baselines vs Stable-baselines3==== | ||
Ligne 82: | Ligne 78: | ||
===Stable-baselines=== | ===Stable-baselines=== | ||
- | Le code de Stable-baselines est nettoyé, amélioré, documenté. **[[https:// | + | Le code de Stable-baselines est le code de Baselines |
sudo pip3 install stable-baselines | sudo pip3 install stable-baselines | ||
===Stable-baselines3=== | ===Stable-baselines3=== | ||
- | **[[https:// | + | **[[https:// |
sudo pip3 install stable-baselines3 stable-baselines3[extra] | sudo pip3 install stable-baselines3 stable-baselines3[extra] | ||
Ligne 100: | Ligne 96: | ||
=====Le jeu du pendule dans Blender===== | =====Le jeu du pendule dans Blender===== | ||
+ | * **[[https:// | ||
+ | ====Installation==== | ||
+ | * Debian 10 Buster | ||
+ | * python 3.7 | ||
+ | * blender game engine 2.79 | ||
+ | * stable-baselines [[apprentissage_par_renforcement# | ||
+ | * [[https:// | ||
+ | * CUDA: Pour une carte graphique, [[https:// | ||
+ | |||
+ | ===gym=== | ||
+ | gym est installé dans le système avec l' | ||
+ | |||
+ | import sys | ||
+ | sys.path.append(' | ||
+ | import gym | ||
+ | |||
+ | Il faut désinstaller gym | ||
+ | sudo pip3 uninstall gym | ||
+ | |||
+ | ===Modification de my_gym=== | ||
+ | Définition de mon environnement dans: **[[https:// | ||
+ | Un fichier obtenu avec un apprentissage est à: [[https:// | ||
+ | |||
+ | ====Modélisation==== | ||
La modélisation d'un pendule dans Blender avec le moteur physique intégré (Bullet) est délicate. | 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=== | |
- | ====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 partir dans l' | ||
- | 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' | + | ===Constraint Rigid Body Joint=== |
- | + | ||
- | ====Constraint Rigid Body Joint==== | + | |
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 | 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 | ||
- | |||
<WRAP group> | <WRAP group> | ||
<WRAP third column> | <WRAP third column> | ||
**Axe** | **Axe** | ||
- | {{: | + | {{ : |
- | {{: | + | {{ : |
</ | </ | ||
<WRAP third column> | <WRAP third column> | ||
**Rigid Body Joint** | **Rigid Body Joint** | ||
- | {{: | + | {{ : |
</ | </ | ||
<WRAP third column> | <WRAP third column> | ||
**Pendule** | **Pendule** | ||
- | {{: | + | {{ : |
</ | </ | ||
</ | </ | ||
- | |||
- | ==== Source sur Github ==== | ||
- | * **[[https:// | ||
- | |||
- | ===Installation=== | ||
- | * Debian 10 Buster | ||
- | * python 3.7 | ||
- | * blender game engine 2.79 | ||
- | * gym modifié dans my_gym | ||
- | * stable-baselines | ||
- | * [[https:// | ||
- | |||
- | ===CUDA=== | ||
- | Pour une carte graphique, [[https:// | ||
- | |||
- | ===gym=== | ||
- | gym est installé dans le système avec l' | ||
- | |||
- | import sys | ||
- | sys.path.append(' | ||
- | import gym | ||
- | |||
- | Il faut désinstaller gym | ||
- | sudo pip3 uninstall gym | ||
| | ||
===Bullet dans blender=== | ===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. \\ | 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. \\ | ||
- | |||
Il est important d' | Il est important d' | ||
- | {{ : | + | {{ : |
- | Exemple d'un reset position et orientation sur 25 frames: [[https:// | + | Exemple d'un reset position et orientation sur 25 frames: [[https:// |
+ | Le fps est défini à 120 dans le panneau de rendu, le script once.py défini bge.logicsetLogicTicRate(120). Le FPS affiché est calculé avec time(). | ||
- | ===Apprentissage=== | + | ====Lancement du jeu==== |
- | Définition de mon environnement dans: **[[https:// | + | |
- | Le rendu et le script, dans le dossier des sources, | + | |
- | blenderplayer ./ | + | |
- | et dans un autre terminal: | + | |
- | python3 my_cartpole_ppo2_train.py | + | |
- | Le fichier d' | + | |
- | + | ||
- | ===Utilisation=== | + | |
Lancer blender comme ci-dessus et le script **[[https:// | Lancer blender comme ci-dessus et le script **[[https:// | ||
blenderplayer ./ | blenderplayer ./ | ||
+ | et dans un autre terminal, pour l' | ||
+ | python3 my_cartpole_ppo2_train.py | ||
+ | ou pour le rendu | ||
python3 my_cartpole_ppo2_rendu.py | python3 my_cartpole_ppo2_rendu.py | ||
===Remarque=== | ===Remarque=== | ||
Le jeu (avec blenderplayer ...) ne doit être lancé qu'une seule fois! On peut lancer ou stopper le script python ou Blender, à son bon vouloir, la reconnexion est automatique. Çà c'est trop fort et super génial! | Le jeu (avec blenderplayer ...) ne doit être lancé qu'une seule fois! On peut lancer ou stopper le script python ou Blender, à son bon vouloir, la reconnexion est automatique. Çà c'est trop fort et super génial! | ||
+ | |||
====Résultat du 1er essai==== | ====Résultat du 1er essai==== | ||
- | Avec un apprentissage de quelques heures .... | ||
- | {{ vimeo> | + | {{ : |
+ | |||
+ | Avec un apprentissage de quelques heures .... | ||
=====Comment est définit l' | =====Comment est définit l' | ||
Ligne 203: | Ligne 193: | ||
Ici, il y a une récompense si le pendule est au-dessus du diamètre horizontal. Plus il est près de la position verticale, plus la récompense est grande. Sinon la récompense est nulle. | Ici, il y a une récompense si le pendule est au-dessus du diamètre horizontal. Plus il est près de la position verticale, plus la récompense est grande. Sinon la récompense est nulle. | ||
===== Relèvement du pendule appelé Swing-up===== | ===== Relèvement du pendule appelé Swing-up===== | ||
- | |||
Les [[https:// | Les [[https:// | ||
- | Les sources sont dans le dossier **[[https:// | + | Les sources sont dans le dossier **[[https:// |
Ce pendule a été construit dans l' | Ce pendule a été construit dans l' | ||
- | {{ vimeo> | + | |
- | L' | + | {{ : |
- | Le fichier de poids fonctionne sur Xubuntu 18.4 mais pas sur Debian 10: il doit y avoir une version d'une des librairies qui diffèrent. | + | |
+ | L' | ||
=====Quelques explications===== | =====Quelques explications===== | ||
Ligne 235: | Ligne 225: | ||
===Algorithme d' | ===Algorithme d' | ||
- | L' | + | L' |
===Récompense revue pour les débuts des calculs==== | ===Récompense revue pour les débuts des calculs==== | ||
Ligne 265: | Ligne 255: | ||
=====Ressources complémentaires===== | =====Ressources complémentaires===== | ||
+ | ====Quels sonts les défauts de Gym ?==== | ||
+ | Gym impose un cadre pour tous les chercheurs de RL, ce qui permet de faire des comparaisons entre les solutions.\\ | ||
+ | Mais cela empêche de trouver des solutions originales. En Intelligence Artificielle, | ||
+ | |||
====Réflexions philosophiques==== | ====Réflexions philosophiques==== | ||
* Ce type d' | * Ce type d' | ||
* Encore pratiqué dans l' | * Encore pratiqué dans l' | ||
- | * ... | ||
====Gym CartPole Ressources==== | ====Gym CartPole Ressources==== | ||
- | * [[https:// | + | * [[https:// |
- | + | ||
- | Définition des Observations = Liste de 4 items:\\ | + | |
- | ^ Num ^ Observation | + | |
- | | 0 | Cart Position | + | |
- | | 1 | Cart Velocity | + | |
- | | 2 | Pole Angle | ~ -41.8° | ~ 41.8°| | + | |
- | | 3 | Pole Velocity At Tip | -Inf | + | |
====pybullet===== | ====pybullet===== | ||
Ligne 285: | Ligne 271: | ||
Bullet est le moteur physique de Blender | Bullet est le moteur physique de Blender | ||
- | ==== Création de votre propre environnement ==== | ||
- | * [[https:// | ||
- | L' | ||
====Un cartpole réel documenté mais sans RL==== | ====Un cartpole réel documenté mais sans RL==== |
apprentissage_par_renforcement.txt · Dernière modification : 2022/02/10 07:52 de serge