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édente | ||
apprentissage_par_renforcement [2021/02/11 10:12] – [Gym de OpenAI] serge | apprentissage_par_renforcement [2022/02/10 07:52] (Version actuelle) – [Apprentissage Par Renforcement] serge | ||
---|---|---|---|
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:// | ||
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 84: | Ligne 83: | ||
===Stable-baselines3=== | ===Stable-baselines3=== | ||
- | **[[https:// | + | **[[https:// |
sudo pip3 install stable-baselines3 stable-baselines3[extra] | sudo pip3 install stable-baselines3 stable-baselines3[extra] | ||
Ligne 97: | 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 partir 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(). | 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(). | ||
- | ===Modification de my_gym=== | + | ====Lancement du jeu==== |
- | Définition de mon environnement dans: **[[https:// | + | |
- | Un fichier obtenu avec un apprentissage est à: [[https:// | + | |
- | + | ||
- | ===Lancement du jeu=== | + | |
Lancer blender comme ci-dessus et le script **[[https:// | Lancer blender comme ci-dessus et le script **[[https:// | ||
Ligne 172: | Ligne 165: | ||
===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 198: | 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 230: | 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 260: | 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==== | ||
Ligne 273: | 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.1613038351.txt.gz · Dernière modification : 2021/02/11 10:12 de serge