====== Intelligence du Pendule de Furuta ======
**[[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]]**
**{{tagpage>bestiaire_ia|Toutes les pages sur le Bestiaire Intelligence Artificielle}}**
{{ :media_14:cartpole.gif |}}
=====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=====
{{ :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#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]]**
* **[[https://stable-baselines3.readthedocs.io/en/master/guide/custom_env.html|Création d'un Environment particulier dans Gym de OpenAI]]**
=====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.
=====Installation de l'intelligence artificielle=====
Nous utilisons Gym de OpenAI et Stable-Baselines3.\\
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
# Installation et Mise à jour du module pip
sudo apt install python3-pip
python3 -m pip install --upgrade pip
# Installation de venv
sudo apt install python3-venv
Dans votre dossier "projets", par exemple /home/machin/projets
git clone https://github.com/sergeLabo/furuta
# Allez dans le dossier des sources
cd ./furuta
python3 -m venv mon_env
source mon_env/bin/activate
python3 -m pip install -r requirements.txt
=====Petit Pendule de Furuta=====
====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.
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)
=====Suivi de l'efficacité de l'apprentissage avec tensorboard=====
====Installation, utilisation====
tensorboard est dans les requirements.\\
Dans le dossier du projet, qui 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 petit_pendule_furuta pytorch tensorboard }}