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:15]
mgp3212019
software:simulatorgym [2019/02/12 15:20]
mgp3212019
Line 59: Line 59:
 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+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 
 + 
 +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. 
 + 
 +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 
 + 
 +**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 
 + 
 +**def startSimulation()**:​ lance une simulation avec 100 timesteps par défaut 
 + 
 +**def resetSimulation()**:​ termine la simulation prématurément 
 + 
 +**def getListObject()**:​ affiche la liste des propriétés de l'​entité 
 + 
 +**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 getFormat():​** affiche les formats de données des actions et des observations 
 + 
 +**class BipedalWalker():​** classe fille de GymSimulator() pour l'​environnement BidepalWalker 
 + 
 +**class CarRacing()**:​ classe fille de GymSimulator() pour l'​environnement CarRacing 
 + 
 +**def move()**: envoie une action au simulateur et retourne les résultats de cette action 
 + 
 +**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 action, passer 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é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