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
Next revision Both sides next revision
software:simulatorgym [2019/02/12 13:12]
mgp3212019
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 d'​environnement qui sont les suivants :
  
-Gym propose plusieurs types d’environnement qui sont les suivants : 
   * Algorithms   * Algorithms
   * Atari   * Atari
Line 14: Line 15:
   * Toy text   * 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.+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+//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