2017-06-10 1 views
2

Je suis un débutant complet à l'apprentissage par renforcement et j'ai été à la recherche d'un cadre/module pour naviguer facilement sur ce terrain dangereux. Dans ma recherche, je suis tombé sur deux modules keras-rl & OpenAI GYM. Je peux obtenir les deux d'entre eux deux travailler sur les exemples qu'ils ont partagé sur leurs WIKI mais ils viennent avec des environnements prédéfinis et ont peu ou pas d'informations sur la façon de configurer mon propre environnement personnalisé.Comment implémenter un environnement personnalisé dans keras-rl/OpenAI GYM?

Je serais vraiment reconnaissant si quelqu'un pouvait me diriger vers un tutoriel ou simplement m'expliquer comment puis-je configurer un environnement non-jeu?

Répondre

7

Je travaille sur ces bibliothèques depuis un certain temps et je peux partager certaines de mes expériences.

Considérons d'abord comme un exemple d'environnement personnalisé un environnement texte, https://github.com/openai/gym/blob/master/gym/envs/toy_text/hotter_colder.py

Pour un environnement personnalisé, devrait définir un certain nombre de choses.

  1. méthode Constructor__init__
  2. espace d'action
  3. espace d'observation (voir https://github.com/openai/gym/tree/master/gym/spaces pour tous les espaces de sport disponibles (il est une sorte de structure de données))
  4. méthode _seed (pas sûr qu'il est obligatoire)
  5. Méthode _step acceptant l'action comme une observation de param et de retour (état après action), récompense (pour la transition vers un nouvel état d'observation), done (indicateur booléen), et quelques informations supplémentaires facultatives.
  6. Méthode _reset qui implémente la logique du nouveau départ de l'épisode.

En option, vous pouvez créer une méthode de _render avec quelque chose comme

def _render(self, mode='human', **kwargs): 
     outfile = StringIO() if mode == 'ansi' else sys.stdout 
     outfile.write('State: ' + repr(self.state) + ' Action: ' + repr(self.action_taken) + '\n') 
     return outfile 

Et aussi, pour une meilleure flexibilité du code, vous pouvez définir la logique de votre récompense dans la méthode _get_reward et des changements dans l'espace d'observation de prendre des mesures dans la méthode _take_action.

+2

La méthode _seed n'est pas obligatoire. S'il n'est pas implémenté, un environnement personnalisé héritera de _seed de gym.Env. De même, _render semble également facultatif à implémenter, bien qu'un (ou au moins I) semble toujours avoir besoin d'inclure une variable de classe, 'metadata', qui est un dictionnaire dont la clé unique -' render.modes' a une valeur qui est une liste des modes de rendu autorisés. Si vous n'implémentez pas _render, la valeur correcte semble être ['humaine'] – user1245262