Differences

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

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
software:simulatorgym [2019/02/12 13:11]
mgp3212019 created
software:simulatorgym [2019/02/12 15:20]
mgp3212019
Line 1: Line 1:
-Le simulateur Gym+====== ​Le simulateur Gym ======
  
 Présentation de Gym Présentation de Gym
  
-Gym cest une boite à outil qui propose plusieurs environnements de simulation pour des algorithmes de renforcement et dapprentissage.+Gym c'est une boite à outil qui propose plusieurs environnements de simulation pour des algorithmes de renforcement et d'apprentissage.
  
-Gym propose plusieurs types denvironnement qui sont les suivants : +Gym propose plusieurs types d'environnement qui sont les suivants :
-Algorithms +
-Atari +
-Box2D +
-Classic control +
-MuJoCo +
-Robotics +
-Toy text+
  
-Pour des raisons de compatibilités avec lalgorithme dapprentissage que nous avions, notre intérêt cest porté sur les environnements Box2D et MuJoCo.+  * Algorithms 
 +  * 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 20: Line 21:
 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 +//git clone [[https://​github.com/​openai/​gym|https:​%%//​%%github.com/​openai/​gym]] ​cd gym pip install -e .//
-cd gym +
-pip install -e .+
  
-  
 Les fonctionnalités de Gym Les fonctionnalités de Gym
  
-Une fois que linstallation est fait, on peut commencer à samuser avec des fonctionnalités de base : +Une fois que l'installation est fait, on peut commencer à s'amuser avec des fonctionnalités de base : 
-gym.make(environment name) : retourne lenvironnement dont le nom a été passé en paramètre + 
-env.reset() : reset lenvironnement,​ retourne lobservation initiale +  * **gym.make("environment name")** : retourne l'environnement dont le nom a été passé en paramètre 
-env.render() : permet dafficher la fenêtre de simulation. +  * **env.reset()** : reset l'environnement,​ retourne l'observation initiale 
-env.step() : exécute une action et retourne 4 paramètres (observation,​ reward, done, info)+  * **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)
  
 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 
  
-Il est important de noter que ces informations dépendent ​de lenvironnement ​dans lequel elles sont définies.+  * **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
  
-Les actions sont effectuées par un agent, et la suite des évènements peut être représenté à l’aide du schéma suivant :+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 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 
  
-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.+Gym propose plusieurs type d'​environnement ​et plusieurs environnements par type.
  
-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.+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
  
-Notre développement +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.
-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+
  
-La difficulté a été de trouver les points qu’on pouvait mettre en commun entre les différents simulateursau niveau des fonctionnalités disponibles des simulateurs et des valeurs ​d’entrées et de sorties des méthodes.+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.
  
-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.+Notre développement
  
-Utilisation du simulateur ​Gym +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
-class Environment() : Cette classe hérite de notre interface commune et implémente ses 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+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 startSimulation():​ lance une simulation avec 100 timesteps par défaut+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 resetSimulation():​ termine la simulation prématurément ​+Utilisation du simulateur Gym
  
-def getListObject(): affiche la liste des propriétés ​de l’entité+**class Environment()** Cette classe hérite ​de notre interface commune et implémente ses méthodes
  
-def getSimulationTime() : Affiche ​le temps passer depuis ​le lancement du script +**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
-class GymSimulator():​ classe héritant ​de la classe ​Entity ​et par conséquent,​ implémente ses méthodes+
  
-def getFormat(): affiche les formats de données des actions et des observations+**def startSimulation()**lance une simulation avec 100 timesteps par défaut
  
-class BipedalWalker(): classe fille de GymSimulator() pour l’environnement BidepalWalker+**def resetSimulation()**termine la simulation prématurément
  
-class CarRacing(): classe fille de GymSimulator() pour l’environnement CarRacing+**def getListObject()**affiche la liste des propriétés ​de l'​entité
  
-def move(): envoie une action au simulateur et retourne les résultats de cette action+**def getSimulationTime()** Affiche le temps passer depuis le lancement du script
  
-if __main__==”__main__”: +**class GymSimulator():** classe héritant ​de la classe Entity ​et par conséquentimplémente ses méthodes
-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+
  
-#​import ​des librairies nécessaires +**def getFormat():​** affiche les formats de données ​des actions et des observations
-import gym +
-import re +
-from gym import envs +
-from random import randint+
  
-#​Récupération ​de l'​environnement +**class BipedalWalker():​** classe fille de GymSimulator() pour l'​environnement ​BidepalWalker
-#Ici on récupère l’environnement CarRacing-v0 +
-env = gym.make('​CarRacing-v0'​)+
  
-#Liste les environnements disponibles +**class CarRacing()**classe fille de GymSimulator() pour l'​environnement CarRacing
-for i in envs.registry.all(): +
-           print(i)+
  
-#​Récupération des formats de données de action et observation +**def move()**envoie une action au simulateur et retourne les résultats de cette action
-print("​Actions : "​+str(self.env.action_space)+
-print("​Observations ​"​+str(self.env.observation_space))+
  
-#Remise à zéro de l'​environnement +**if %%__%%main%%__%%=="​%%__%%main%%__%%"​** :
-env.reset()+
  
-#Pour 1000 timesteps +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.
-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+
  
-Ci-dessous notre classe abstraite : +Pour avoir un mode interactif action par actionpasser le paramètre **self.interactiveMode** à True ligne 16
-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+
  
 +Pour avoir un mode sans l'​affichage de la fenêtre, passer le paramètre **self.displayMode** à False ligne 75
  
-Documentation +Pour changer le nombre de **Timesteps** changer la valeur ​de n, ligne 28.
-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+
  
-Documentation ​de gym : https://​gym.openai.com/​docs/​ +Exemple ​de code
-Code de car_racing.py : https://​github.com/​openai/​gym/​blob/​master/​gym/​envs/​box2d/​car_racing.py +
-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