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 Both sides next revision
software:simulatorgym [2019/02/12 15:20]
mgp3212019
software:simulatorgym [2019/02/12 15:25]
mgp3212019
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 cest une boite à outil qui propose plusieurs environnements de simulation pour des algorithmes de renforcement et dapprentissage.
  
-Gym propose plusieurs types d'environnement qui sont les suivants :+Gym propose plusieurs types denvironnement qui sont les suivants : 
 +Algorithms 
 +Atari 
 +Box2D 
 +Classic control 
 +MuJoCo 
 +Robotics 
 +Toy text
  
-  * Algorithms +Pour des raisons de compatibilités avec lalgorithme dapprentissage que nous avions, notre intérêt cest porté sur les environnements Box2D et MuJoCo.
-  * Atari +
-  * Box2D +
-  * Classic control +
-  * MuJoCo +
-  * Robotics +
-  * Toy text +
- +
-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
Line 21: Line 20:
 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//+pip install gym
  
 Une seconde méthode existe en installant directement le package via git Une seconde méthode existe en installant directement le package via git
  
-//git clone [[https://​github.com/​openai/​gym|https:​%%//​%%github.com/​openai/​gym]] ​cd gym pip install -e .//+git clone https://​github.com/​openai/​gym 
 +cd gym 
 +pip install -e .
  
 +
 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 linstallation est fait, on peut commencer à samuser avec des fonctionnalités de base : 
- +gym.make(environment name) : retourne lenvironnement dont le nom a été passé en paramètre 
-  * **gym.make("environment name")** : retourne l'environnement dont le nom a été passé en paramètre +env.reset() : reset lenvironnement,​ retourne lobservation initiale 
-  * **env.reset()** : reset l'environnement,​ retourne l'observation initiale +env.render() : permet dafficher la fenêtre de simulation. 
-  * **env.render()** : permet d'afficher la fenêtre de simulation. +env.step() : exécute une action et retourne 4 paramètres (observation,​ reward, done, info)
-  * **env.step()** : exécute une action et retourne 4 paramètres (observation,​ reward, done, info)+
  
 La fonction env.step() prend en paramètre une action et retourne les 4 paramètres suivants : La fonction env.step() prend en paramètre une action et retourne les 4 paramètres suivants :
 +observation : un objet spécifique à l’environnement représentant une observation
 +reward : un nombre de récompense obtenu par l’action précédente
 +done : une valeur booléenne qui indique si il faut reset l’environnement ou non
 +info : des informations de diagnostic utile pour le débuggage
  
-  * **observation** : un objet spécifique à l'​environnement représentant une observation +Il est important de noter que ces informations dépendent ​de lenvironnement ​dans lequel elles sont définies.
-  * **reward** : un nombre ​de récompense obtenu par l'​action précédente +
-  * **done** : une valeur booléenne qui indique si il faut reset l'environnement ​ou non +
-  * **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.+Les actions ​sont effectuées par un agent, et la suite des évènements peut être représenté à l’aide du schéma suivant :
  
-Les actions sont effectuées par un agent, et la suite des évènements peut être représenté à l'aide du schéma suivant : 
  
 +
 Les environnements de Gym Les environnements de Gym
 +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
  
-Gym propose plusieurs type d'​environnement ​et plusieurs environnements par type.+Une autre solution était l’installation de MuJoCo, mais cette dernière à posé des soucis ​et n’as pas pu être faite sur les machines de l’école.
  
-Au débutnotre choix était ​porté vers l'​environnement ​CarRacing-v0avec 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+Donc au finall’environnement le plus adapté suivant toutes nos contraintes ​était l'​environnement ​BipedalWalker-v2malgré le fait que la vue soit de côté, ​les observations ​conviennent bien à l’algorithme d’apprentissage.
  
-Une autre solution était l'​installation de MuJoComais cette dernière à posé des soucis ​et n'as pas pu être faite sur les machines de l'​école.+Notre développement 
 +Pour le codenous 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éthodesDe ce fait, nous utilisons les mêmes noms de méthodes pour chaque simulateur mais leur implémentations est différentes
  
-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.+La difficulté a été de trouver ​les points qu’on pouvait mettre en commun entre les différents simulateurs,​ au niveau des fonctionnalités disponibles des simulateurs et des valeurs ​d’entrées et de sorties des méthodes.
  
-Notre développement+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.
  
-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+Utilisation du simulateur ​Gym 
 +class Environment() : Cette classe hérite de notre interface commune et implémente ses méthodes
  
-La difficulté ​a été de trouver les points qu'on pouvait mettre en commun entre les différents simulateurs,​ au niveau des fonctionnalités disponibles des simulateurs et des valeurs d'​entrées ​et de sorties des méthodes.+def loadEnvironment() : Cette méthode charge l’environnement dont le nom a été spécifié dans le constructeur ​de la classe ​et retourne un objet de type environment correspondant
  
-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.+def startSimulation():​ lance une simulation avec 100 timesteps par défaut
  
-Utilisation du simulateur Gym+def resetSimulation():​ termine la simulation prématurément ​
  
-**class Environment()** Cette classe hérite ​de notre interface commune et implémente ses méthodes+def getListObject(): affiche la liste des propriétés ​de l’entité
  
-**def loadEnvironment()** Cette méthode charge l'​environnement dont le nom a été spécifié dans le constructeur ​de la classe et retourne un objet de type environment correspondant+def getSimulationTime() : Affiche ​le temps passer depuis ​le lancement du script 
 +class GymSimulator():​ classe héritant ​de la classe ​Entity ​et par conséquent,​ implémente ses méthodes
  
-**def startSimulation()**lance une simulation avec 100 timesteps par défaut+def getFormat(): affiche les formats de données des actions et des observations
  
-**def resetSimulation()**termine la simulation prématurément+class BipedalWalker(): classe fille de GymSimulator() pour l’environnement BidepalWalker
  
-**def getListObject()**affiche la liste des propriétés ​de l'​entité+class CarRacing(): classe fille de GymSimulator() pour l’environnement CarRacing
  
-**def getSimulationTime()** Affiche le temps passer depuis le lancement du script+def move(): envoie une action au simulateur et retourne les résultats de cette action
  
-**class GymSimulator():** classe héritant ​de la classe Entity ​et par conséquentimplémente ses méthodes+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.  
 +Pour avoir un mode interactif action ​par actionpasser le paramètre self.interactiveMode à True ligne 16 
 +Pour avoir un mode sans l’affichage de la fenêtre, passer le paramètre self.displayMode à False ligne 75 
 +Pour changer le nombre de Timesteps changer la valeur de n, ligne 28. 
 +Exemple de code 
 +#​!/​usr/​bin/​env python 
 +# coding: utf-8
  
-**def getFormat():​** affiche les formats de données ​des actions et des observations+#​import ​des librairies nécessaires 
 +import gym 
 +import re 
 +from gym import envs 
 +from random import randint
  
-**class BipedalWalker():​** classe fille de GymSimulator() pour l'​environnement ​BidepalWalker+#​Récupération ​de l'​environnement 
 +#Ici on récupère l’environnement CarRacing-v0 
 +env = gym.make('​CarRacing-v0'​)
  
-**class CarRacing()**classe fille de GymSimulator() pour l'​environnement CarRacing+#Liste les environnements disponibles 
 +for i in envs.registry.all(): 
 +           print(i)
  
-**def move()**envoie une action au simulateur et retourne les résultats de cette action+#​Récupération des formats de données de action et observation 
 +print("​Actions : "​+str(self.env.action_space)
 +print("​Observations ​"​+str(self.env.observation_space))
  
-**if %%__%%main%%__%%=="​%%__%%main%%__%%"​** :+#Remise à zéro de l'​environnement 
 +env.reset()
  
-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.+#Pour 1000 timesteps 
 +for t in range(1000):​ 
 +            #on affiche ​la fenêtre ​de simulation 
 +       ​env.render() 
 +            #on récupère une action aléatoire possible pour lenvironnement 
 +       ​action = env.action_space.sample() ​       
 +       #on exécute l’action ​et on récupère ​les informations 
 +       ​observation,​ reward, done, info = env.step(action) 
 +             #on affiche les informations 
 +       ​print("​action : "​+str(action)) 
 +       ​print("​reward : "​+str(reward)) 
 +       ​print("​done : "​+str(done)) 
 +       ​print("​info : "​+str(info)) 
 +             #si il y a une réussite ou une erreur, on arrête la simulation 
 +       if (done == 1): 
 +                    break
  
-Pour avoir un mode interactif action par actionpasser le paramètre **self.interactiveMode** à True ligne 16+Ci-dessous notre classe abstraite : 
 +<​code>​ 
 +class scene: 
 +    #Gasebo param is null 
 +    #Vrep param is the port connection 
 +    #Gym  param is the name of the environment loaded 
 +    def __init__(self,​ param = None): 
 +        pass 
 +    def startSimulation(self):​ 
 +        pass 
 +    def pauseSimulation(self):​ 
 +        pass 
 +    def resetSimulation(self,​ onlyWorld = None): 
 +        pass 
 +    def getListObject(self):​ 
 +        pass 
 +    #Vrep param is the path to find the scene 
 +    #Gym  param is null 
 +    def loadEnvironment(selfparam = None): 
 +        pass 
 +    def getSimulationTime(self): 
 +        pass 
 +</​code>​
  
-Pour avoir un mode sans l'affichage de la fenêtre, passer le paramètre **self.displayMode** à False ligne 75+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
  
-Pour changer le nombre ​de **Timesteps** changer la valeur ​de n, ligne 28+Documentation ​de gym : https://​gym.openai.com/​docs/​ 
- +Code de car_racing.py : https://​github.com/​openai/​gym/​blob/​master/​gym/​envs/​box2d/​car_racing.py 
-Exemple ​de code+Git de gym : https://​github.com/​openai/​gym
  
-| #​!/​usr/​bin/​env python# coding: utf-8 #import des librairies nécessairesimport gymimport refrom gym import envsfrom random import randint #​Récupération de l'​environnement#​Ici on récupère l'​environnement CarRacing-v0env = gym.make('​CarRacing-v0'​) #Liste les environnements disponiblesfor i in envs.registry.all():​ print(i) #​Récupération des formats de données de action et observationprint("​Actions : "​+str(self.env.action_space))print("​Observations : "​+str(self.env.observation_space)) #Remise à zéro de l'​environnementenv.reset() #Pour 1000 timestepsfor t in range(1000):​ #on affiche la fenêtre de simulation env.render() #on récupère une action aléatoire possible pour l'​environnement action = env.action_space.sample() #on exécute l'​action et on récupère les information 
  
  
  
  
  • software/simulatorgym.txt
  • Last modified: 2020/07/03 17:18
  • by mai