Outils pour utilisateurs

Outils du site


intelligence_du_pendule_de_furuta

Intelligence du Pendule de Furuta

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

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. 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: 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)

Version avec ESP32

Suivi de l'efficacité de l'apprentissage avec tensorboard

Installation, utilisation

tensorboard est dans les requirements.
Voir train_test.py pour l'implémentation.
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

Moyenne des récompenses

Permet d'apprécier l'efficacité de l'apprentissage
avec rollout/ep_rew_nean

intelligence_du_pendule_de_furuta.txt · Dernière modification : 2022/06/30 14:13 de serge