Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
software:simulatorgym [2019/02/12 15:06]
mgp3212019
software:simulatorgym [2020/07/03 17:18] (current)
mai ↷ Page moved from simulatorgym to software:simulatorgym
Line 1: Line 1:
-**LE SIMULATEUR GYM**+ ​======Le simulateur Gym=======
  
-**Présentation de Gym**+=====Présentation de Gym=====
  
 Gym c’est une boite à outil qui propose plusieurs environnements de simulation pour des algorithmes de renforcement et d’apprentissage. Gym c’est une boite à outil qui propose plusieurs environnements de simulation pour des algorithmes de renforcement et d’apprentissage.
Line 16: Line 16:
 Pour des raisons de compatibilités avec l’algorithme d’apprentissage que nous avions, notre intérêt c’est porté sur les environnements Box2D et MuJoCo. Pour des raisons de compatibilités avec l’algorithme d’apprentissage que nous avions, notre intérêt c’est porté sur les environnements Box2D et MuJoCo.
  
-**Installation de Gym**+=====Installation de Gym=====
  
 Gym est simplement une librairie python qui offre des fonctionnalités. Ainsi, sont installations est simple : Gym est simplement une librairie python qui offre des fonctionnalités. Ainsi, sont installations est simple :
  
-pip install gym+<​code>​pip install gym</​code>​
  
 Une seconde méthode existe en installant directement le package via git Une seconde méthode existe en installant directement le package via git
 +<​code>​
 git clone https://​github.com/​openai/​gym git clone https://​github.com/​openai/​gym
 cd gym cd gym
 pip install -e . pip install -e .
 +</​code>​
  
-**Les fonctionnalités de Gym**+=====Les fonctionnalités de Gym=====
  
 Une fois que l’installation est fait, on peut commencer à s’amuser avec des fonctionnalités de base : Une fois que l’installation est fait, on peut commencer à s’amuser avec des fonctionnalités de base :
Line 50: Line 51:
  
 **info** : des informations de diagnostic utile pour le débuggage **info** : des informations de diagnostic utile pour le débuggage
 +
  
 Il est important de noter que ces informations dépendent de l’environnement dans lequel elles sont définies. Il est important de noter que ces informations dépendent de l’environnement dans lequel elles sont définies.
  
  
-**Les environnements de Gym**+=====Les environnements de Gym===== 
 Gym propose plusieurs type d’environnement et plusieurs environnements par type. Gym propose plusieurs type d’environnement et plusieurs environnements par type.
 Au début, notre choix était porté vers l’environnement CarRacing-v0,​ avec la vue de dessus mais il c’est avéré que les observations retournés étaient au format image avec un tableau 96x96x3 de nombre correspondant à des couleurs Au début, notre choix était porté vers l’environnement CarRacing-v0,​ avec la vue de dessus mais il c’est avéré que les observations retournés étaient au format image avec un tableau 96x96x3 de nombre correspondant à des couleurs
Line 62: Line 65:
 Donc au final, l’environnement le plus adapté suivant toutes nos contraintes était l'​environnement BipedalWalker-v2,​ malgré le fait que la vue soit de côté, les observations conviennent bien à l’algorithme d’apprentissage. Donc au final, l’environnement le plus adapté suivant toutes nos contraintes était l'​environnement BipedalWalker-v2,​ malgré le fait que la vue soit de côté, les observations conviennent bien à l’algorithme d’apprentissage.
  
-**Notre développement**+=====Notre développement===== 
 Pour le code, nous avons chacun développez un code qui fait l’interface entre l’algorithme d’apprentissage et le simulateur. Pour avoir une interface commune nous avons créez une classe abstraite dont nous héritons et implémentons les méthodes. De ce fait, nous utilisons les mêmes noms de méthodes pour chaque simulateur mais leur implémentations est différentes Pour le code, nous avons chacun développez un code qui fait l’interface entre l’algorithme d’apprentissage et le simulateur. Pour avoir une interface commune nous avons créez une classe abstraite dont nous héritons et implémentons les méthodes. De ce fait, nous utilisons les mêmes noms de méthodes pour chaque simulateur mais leur implémentations est différentes
  
Line 69: Line 73:
 Au final, concernant Gym, j’ai réussi à convertir l’environnement et ses données, en type Entity et ses Property, comme voulu à la base. Au final, concernant Gym, j’ai réussi à convertir l’environnement et ses données, en type Entity et ses Property, comme voulu à la base.
  
-**Utilisation du simulateur Gym**+=====Utilisation du simulateur Gym=====
 **class Environment()** : Cette classe hérite de notre interface commune et implémente ses méthodes **class Environment()** : Cette classe hérite de notre interface commune et implémente ses méthodes
  
Line 93: Line 97:
  
 **if __main__==”__main__”**:​ **if __main__==”__main__”**:​
 +
 Fonction d’exemple d’utilisation avec l’environnement BipedalWalker,​ 100 timesteps, une affiche de l’environnement dans une fenêtre et toutes les actions effectués d’un coup.  Fonction d’exemple d’utilisation avec l’environnement BipedalWalker,​ 100 timesteps, une affiche de l’environnement dans une fenêtre et toutes les actions effectués d’un coup. 
  
Line 101: Line 106:
 Pour changer le nombre de Timesteps changer la valeur de n, ligne 28. Pour changer le nombre de Timesteps changer la valeur de n, ligne 28.
  
->Exemple de code +Exemple de code 
->#​!/​usr/​bin/​env python +<code> 
-># coding: utf-8 +#​!/​usr/​bin/​env python 
-> +# coding: utf-8 
->#import des librairies nécessaires + 
->import gym +#import des librairies nécessaires 
->import re +import gym 
->from gym import envs +import re 
->from random import randint +from gym import envs 
-> +from random import randint 
->#​Récupération de l'​environnement + 
->#Ici on récupère l’environnement CarRacing-v0 +#​Récupération de l'​environnement 
->env = gym.make('​CarRacing-v0'​) +#Ici on récupère l’environnement CarRacing-v0 
-> +env = gym.make('​CarRacing-v0'​) 
->#Liste les environnements disponibles + 
->for i in envs.registry.all():​ +#Liste les environnements disponibles 
-          print(i) +for i in envs.registry.all():​ 
-> +           ​print(i) 
->#​Récupération des formats de données de action et observation + 
->print("​Actions : "​+str(self.env.action_space)) +#​Récupération des formats de données de action et observation 
->print("​Observations : "​+str(self.env.observation_space)) +print("​Actions : "​+str(self.env.action_space)) 
-> +print("​Observations : "​+str(self.env.observation_space)) 
->#Remise à zéro de l'​environnement + 
->env.reset() +#Remise à zéro de l'​environnement 
-> +env.reset() 
->#Pour 1000 timesteps + 
->for t in range(1000):​ +#Pour 1000 timesteps 
->       #on affiche la fenêtre de simulation +for t in range(1000):​ 
-      env.render() +            #on affiche la fenêtre de simulation 
->       #on récupère une action aléatoire possible pour l’environnement +       ​env.render() 
-      action = env.action_space.sample() ​       +            #on récupère une action aléatoire possible pour l’environnement 
-      #on exécute l’action et on récupère les informations +       ​action = env.action_space.sample() ​       
-      observation,​ reward, done, info = env.step(action) +       #on exécute l’action et on récupère les informations 
->       #on affiche les informations +       ​observation,​ reward, done, info = env.step(action) 
-      print("​action : "​+str(action)) +             ​#on affiche les informations 
-      print("​reward : "​+str(reward)) +       ​print("​action : "​+str(action)) 
-      print("​done : "​+str(done)) +       ​print("​reward : "​+str(reward)) 
-      print("​info : "​+str(info)) +       ​print("​done : "​+str(done)) 
-            #si il y a une réussite ou une erreur, on arrête la simulation +       ​print("​info : "​+str(info)) 
-      if (done == 1): +             #si il y a une réussite ou une erreur, on arrête la simulation 
-                   break+       if (done == 1): 
 +                    break 
 +</​code>​
  
 Ci-dessous notre classe abstraite : Ci-dessous notre classe abstraite :
 +<​code>​
 class scene: class scene:
     #Gasebo param is null     #Gasebo param is null
Line 164: Line 172:
     def getSimulationTime(self):​     def getSimulationTime(self):​
         pass         pass
 +</​code>​
  
- +=====Documentation=====
-Documentation+
 Le simulateur Gym est dépendant des environnements qui existent, si vous ne trouvez pas d’environnements qui vous conviennent,​ il est possible de créer son propre environnement. Je n’ai pas eu l’occasion d'​approfondir cette partie donc voici la documentation associé : https://​github.com/​openai/​gym/​tree/​master/​gym/​envs#​how-to-create-new-environments-for-gym Le simulateur Gym est dépendant des environnements qui existent, si vous ne trouvez pas d’environnements qui vous conviennent,​ il est possible de créer son propre environnement. Je n’ai pas eu l’occasion d'​approfondir cette partie donc voici la documentation associé : https://​github.com/​openai/​gym/​tree/​master/​gym/​envs#​how-to-create-new-environments-for-gym
  
  • software/simulatorgym.1549983997.txt.gz
  • Last modified: 2019/04/25 14:08
  • (external edit)