Outils pour utilisateurs

Outils du site


intelligence_du_pendule_de_furuta

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
intelligence_du_pendule_de_furuta [2022/02/06 09:59] – [Entrées / Sorties] sergeintelligence_du_pendule_de_furuta [2022/10/07 10:11] (Version actuelle) – [Version avec ESP32] serge
Ligne 2: Ligne 2:
  
 <WRAP center round box 60% centeralign> <WRAP center round box 60% centeralign>
-**{{tagpage>ia|Intelligence Artificielle}}**     **[[http://translate.google.com/translate?hl=&sl=auto&tl=en&u=https%3A%2F%2Fressources.labomedia.org%2Fintelligence_du_pendule_de_furuta|English Version]]**+**[[intelligence_artificielle|Intelligence Artificielle]]**     **[[http://translate.google.com/translate?hl=&sl=auto&tl=en&u=https%3A%2F%2Fressources.labomedia.org%2Fintelligence_artificielle|English Version]]**
 </WRAP> </WRAP>
  
Ligne 9: Ligne 9:
 </WRAP> </WRAP>
  
-=====C'est quoi une Intelligence Artificielle===== +{{ :media_14:cartpole.gif |}} 
-Une Intelligence Artificielle n'est jamais intelligente. C'est un programme informatique qui comprend à un moment donné un Apprentissage Automatique. +=====C'est quoi une Intelligence Artificielle ?===== 
 +Une Intelligence Artificielle n'est jamais intelligente.\\ 
 +**C'est un programme informatique qui comprend à un moment donné un Apprentissage Statistique.**
  
 =====Ressources===== =====Ressources=====
 +{{ :media_14:apprentissage-par-renforcement.png?400 |}}
   * **[[https://ressources.labomedia.org/apprentissage_par_renforcement#principe_vulgarise_de_l_apprentissage_par_renforcement|Principe vulgarisé de l'Apprentissage par Renforcement]]**   * **[[https://ressources.labomedia.org/apprentissage_par_renforcement#principe_vulgarise_de_l_apprentissage_par_renforcement|Principe vulgarisé de l'Apprentissage par Renforcement]]**
   * **[[https://ressources.labomedia.org/apprentissage_par_renforcement#comment_est_definit_l_objectif_a_atteindre|Comment est définit l'objectif à atteindre]]**   * **[[https://ressources.labomedia.org/apprentissage_par_renforcement#comment_est_definit_l_objectif_a_atteindre|Comment est définit l'objectif à atteindre]]**
-  +  * **[[https://pythonprogramming.net/saving-and-loading-reinforcement-learning-stable-baselines-3-tutorial/?completed=/introduction-reinforcement-learning-stable-baselines-3-tutorial/|Reinforcement Learning in Python with Stable Baselines 3 : How to save and load models]]** 
-=====Principes===== +  * **[[https://stable-baselines3.readthedocs.io/en/master/guide/custom_env.html|Création d'un Environment particulier dans Gym de OpenAI]]** 
-===Entrées Sorties sur le pendule=== +
-EntréesVitesse/Position du chariot et du penduleUn point zéro, et le décalage en points par rapport au zéro+
  
-SortieImpulsion moteur dans un sens ou dans l'autre. Cette impulsion sera proportionnelle (coefficient à trouver empiriquement !) à la valeur entre -1 et 1 , résultat du calcul.+=====Principes===== 
 +L'apprentissage se compose de cycles, un cycle comprend des steps.\\ 
 +Un step est: 
 +  * Le pendule envoie 4 items: (position, vitesse) du chariot, (position, vitesse) du pendule. 
 +  * Le serveur répond par une impulsion sur le moteur dans un sens ou dans l'autre, de combien à définir empiriquement
 +Un cycle se termine au bout de 2000 steps.
  
-====Matériels==== +=====Installation de l'intelligence artificielle===== 
-===Choix du PC pour l'IA=== +Nous utilisons Gym de OpenAI et Stable-Baselines3.\\ 
-Le fichier de poids fait ~46 ko. Un Raspi 4 doit suffire. +Le code de Stable-baselines est le code de Baselines nettoyé, amélioré, documenté. Stable-baselines3 est la dernière version, il utilise Torch[[https://stable-baselines3.readthedocs.io/en/master/guide/examples.html|Documentation de stable-baselines3]] @ stable-baselines3.readthedocs.io\\ 
- +Les modules python à installer: stable-baselines3 et pyglet. Pyglet ne sert qu'a tester l'installation. L'installation de stable-baselines3 installe gym et installe tout ce qui est dans requirements.txt
-===Choix du PC pour le pendule=== +
-Un Raspi 3 et du Arduino ? +
- +
- +
-=====Installation===== +
-Nous utilisons Gym de OpenAI et Stable-Baselines3. +
- +
-===Stable-baselines3=== +
-Le code de Stable-baselines est le code de Baselines nettoyé, amélioré, documenté. **[[https://stable-baselines.readthedocs.io/en/master/index.html|Documentation de stable-baselines]]** @ stable-baselines.readthedocs.io +
-Stable-baselines3 est la dernière version, il utilise tensorflow2 et Torch\\ +
-  * **[[https://stable-baselines3.readthedocs.io/en/master/guide/examples.html|Documentation de stable-baselines3]]** @ stable-baselines3.readthedocs.io +
- +
-**Installation:** https://stable-baselines3.readthedocs.io/en/master/guide/install.html\\ +
-Les modules python à installer: stable-baselines3[extra] et pyglet. Pyglet ne sert qu'a tester l'installation. L'installation de stable-baselines3 installe gym et installe tout ce qui est dans requirements.txt+
  
 <code bash> <code bash>
Ligne 50: Ligne 41:
 </code> </code>
  
-Télécharger les sources de **[[https://github.com/sergeLabo/furuta|furuta]]**\\ 
 Dans votre dossier "projets", par exemple /home/machin/projets Dans votre dossier "projets", par exemple /home/machin/projets
 <code bash> <code bash>
 git clone https://github.com/sergeLabo/furuta git clone https://github.com/sergeLabo/furuta
 # Allez dans le dossier des sources # Allez dans le dossier des sources
-cd /home/machin/projets/furuta+cd ./furuta
 python3 -m venv mon_env python3 -m venv mon_env
 source mon_env/bin/activate source mon_env/bin/activate
 python3 -m pip install -r requirements.txt python3 -m pip install -r requirements.txt
 </code> </code>
-=====Création d'un Environment particulier dans Gym de OpenAI===== + 
-====Ressources==== +=====Petit Pendule de Furuta===== 
-**[[https://stable-baselines3.readthedocs.io/en/master/guide/custom_env.html|Using Custom Environments]]** Nous réalisons l'apprentissage dans le monde réelnous n'avons pas besoin de **render**+====Version tout en python==== 
 +Au bout de très longs apprentissages, le maître a fini par comprendre que pigpio empilait les callbacks à traiter ce qui décalait l'apprentissage par rapport au pendule réel.\\ 
 +Le codeur du balancier de 4 000 points crée 16 000 callbacks. En estimant la vitesse de rotation du balancier à 1 tour par seconde, la fréquence d'appel du callback est de 16 000 Hz.\\ 
 +Le moteur a un codeur de 1 000 points: le même calcul ajoute 4 000 Hz.\\ 
 + 
 +Les gpio d'une Pi ne peuvent pas tourner à plus de 20 000 Hz: [[https://atman-iot.com/blog/raspberry-pi-benchmark/|Can the Raspberry pi acquire high frequency signals?]] 
 + 
 +Les vitesses de rotation sont plus rapides que 1 tour/seconde: la Pi prend alors du retard. 
 + 
 +Le codeur de 4 000 points a été remplacé par un codeur de 1 000 points, qui est grandement suffisant: les frottements ne permettent pas d'apprécier la position du points zéro à mieux que +- 1 ou 2 points. 
 + 
 +===Training avec "best"=== 
 +La méthode training_best de train_test.py est étrange: la doc n'est pas claire, ça ne finit jamais, il y a un message d'erreur au lancement assez obscure. 
 +<code python> 
 +eval_callback = EvalCallback(self.env, 
 +                                     best_model_save_path=self.best_model_save_path, 
 +                                     log_path=self.logdir, 
 +                                     eval_freq=500, 
 +                                     deterministic=True, 
 +                                     render=False) 
 +</code> 
 + 
 + 
 +=====Suivi de l'efficacité de l'apprentissage avec tensorboard===== 
 +====Installation, utilisation==== 
 +tensorboard est dans les requirements.\\ 
 +Dans le dossier du projetqui contient le venv=mon_env, lancer en terminal: 
 +  ./mon_env/bin/tensorboard --logdir=logs 
 +   
 +Dans un navigateur: 
 +  http://localhost:6006/ 
 +   
 + 
 + 
 +====Exemples==== 
 +{{:media_15:tb_00.png?200|}} 
 +{{:media_15:tb_03.png?200|}} 
 +{{:media_15:tb_04.png?200|}} 
 +{{:media_15:tb_01.png?200|}} 
 +====Moyenne des récompenses==== 
 +{{:media_15:tb_10.png?300 |}} Permet d'apprécier l'efficacité de l'apprentissage\\ 
 +avec rollout/ep_rew_nean 
  
  
  
-{{tag>bestiaire_ia}}+{{tag> bestiaire_ia petit_pendule_furuta pytorch tensorboard }}
intelligence_du_pendule_de_furuta.1644141581.txt.gz · Dernière modification : 2022/02/06 09:59 de serge