Outils pour utilisateurs

Outils du site


apprentissage_par_renforcement

Apprentissage Par Renforcement

Le Hello World de l'Apprentissage Par Renforcement

Linéaire:

Rotatif:

Flying:

Double pendule:

Documenté mais sans RL

Apprentissage par renforcement

  • Apprentissage par renforcement @ fr.wikipedia.org. En intelligence artificielle, plus précisément en apprentissage automatique, l'apprentissage par renforcement consiste, pour un agent autonome (robot, etc.), à apprendre à partir d'expériences, de façon à optimiser une récompense quantitative au cours du temps, positive ou négative. En répétant les expériences, le robot progresse.

Directeur Semour Skinner

Le directeur de l'école des enfants Simpson s'appelle Seymour Skinner, inspiré de Burrhus Frederic Skinner, inventeur de la Boîte de Skinner

Q-learning

Ressources

Frameworks possibles

Gym de OpenAI

OpenAI

fr.wikipedia.org OpenAI est une entreprise à « but lucratif plafonné » en intelligence artificielle, basée à San Francisco. En 2019, OpenAI a reçu a 1 000 000 000 $ de Microsoft. OpenAi utilise le super Calculateur de Micro$ pour ses apprentissages.
Avant mars 2019, elle était reconnue association à but non lucratif. L'objectif de cette société était de promouvoir et développer une intelligence artificielle à visage humain qui bénéficierait à toute l'humanité. L'objectif actuel est de se faire des $.

Gym

Gym is a toolkit for developing and comparing reinforcement learning algorithms.

  • Gym @ en.wikipedia.org
  • Gym @ github.com/openai
  • Gym @ gym.openai.com/docs

Baselines vs Stable-baselines vs Stable-baselines3

OpenAI Baselines is a set of high-quality implementations of reinforcement learning algorithms. “Chef, Le meilleur des meilleurs, chef”

Baselines

Baselines est un projet OpenAI. Les dépendances sont anciennes, l'installation est quasi impossible et Stable-baselines est mieux!

Stable-baselines

Main differences with OpenAI Baselines. This toolset is a fork of OpenAI Baselines, with a major structural refactoring, and code cleanups:

  • Unified structure for all algorithms
  • PEP8 compliant (unified code style)
  • Documented functions and classes
  • More tests & more code coverage
  • Additional algorithms: SAC and TD3 (+ HER support for DQN, DDPG, SAC and TD3)
git clone https://github.com/hill-a/stable-baselines && cd stable-baselines
pip install -e .[docs,tests,mpi]
sudo pip3 install -e .[docs,tests,mpi]
sudo pip3 install tensorflow==1.15

Stable-baselines3

Stable Baselines3 (SB3) is a set of reliable implementations of reinforcement learning algorithms in PyTorch. It is the next major version of Stable Baselines.

sudo pip3 install stable-baselines3
sudo pip3 install stable-baselines3[extra]

Le jeu du pendule dans Blender

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

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'infini de l'espace.

Constraint Rigid Body Joint

Axe

Rigid Body Joint

Pendule

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

Source sur Github

Soft utilisé

gym

gym n'est pas installé dans le système. Ce projet est construit en modifiant des fichiers sources de gym, dans une copie nommée my_gym, importée dans les fichiers avec:

import sys
sys.path.append('my_gym')
import gym

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. Exemple d'un reset position et orientation sur 100 frames:

def reset():
 
    gl.num_reset += 1
    x, x_dot, teta, teta_dot = gl.reset
 
    if 1 < gl.num_reset < 100:
        gl.cube.worldPosition = [x, 0.738772, 0]
        gl.cube.worldLinearVelocity[0] = x_dot
 
        xyz = gl.pendulum.worldOrientation.to_euler()
        xyz[1] = teta
        gl.pendulum.worldOrientation = xyz.to_matrix()
        gl.pendulum.worldAngularVelocity[1] = teta_dot
 
    if gl.num_reset == 100:
        gl.num_reset = 0
        gl.reset = 0

Visualisation dans blender

Dans le dossier du projet

blenderplayer ./balance/balance.blend

Le fps est défini à 120 dans le panneau de rendu, le script once.py défini bge.logicsetLogicTicRate(120)
Cela devrait faire tourner le rendu et le moteur physique à 120 !

Lancement de l'apprentissage

Définition de mon environnement dans:

python3 ./balance/my_gym/gym/envs/classic_control/my_cartpole.py

Le fichier d'apprentissage est à: acktr_blender_250000_1.zip

Utilisation

Lancer blender comme ci-dessus et le script blender_baselines_acktr.py

python3 blender_baselines_acktr.py

Résultat du 1er essai

Relévement du pendule appelé Swing-up

Question: Comment est défini l'ojectif du jeu, le goal ?

Ressources

Gym CartPole Ressources

Définition des Observations = Liste de 4 items:

Num Observation Min Max
0 Cart Position -2.4 2.4
1 Cart Velocity -Inf Inf
2 Pole Angle ~ -41.8° ~ 41.8°
3 Pole Velocity At Tip -Inf Inf

pybullet

Bullet est le moteur physique de Blender

Création de votre propre environnement

L'étape suivante de la visualisation dans blender serait de créer un environnement spécifique pour ce my_cartpole et l'installer en dur. Puis d'utiliser gym en l'installant et supprimant les imports locaux de gym.

,
apprentissage_par_renforcement.txt · Dernière modification: 2021/01/23 18:37 de serge