88 votes

Comment créer un nouvel environnement de gymnastique dans OpenAI ?

J'ai pour mission de créer un agent d'intelligence artificielle qui apprendra à jouer à un jeu vidéo à l'aide de ML. Je veux créer un nouvel environnement à l'aide d'OpenAI Gym car je ne veux pas utiliser un environnement existant. Comment puis-je créer un nouvel environnement personnalisé ?

Par ailleurs, y a-t-il un autre moyen de commencer à développer un agent d'intelligence artificielle pour jouer à un jeu vidéo spécifique sans l'aide d'OpenAI Gym ?

133voto

moose Points 4945

Voir mon banana-gym pour un environnement extrêmement réduit.

Créer de nouveaux environnements

Voir la page principale du référentiel :

https://github.com/openai/gym/blob/master/docs/creating-environments.md

Les étapes sont les suivantes :

  1. Créer un nouveau référentiel avec une structure de paquets PIP

Cela devrait ressembler à ceci

gym-foo/
  README.md
  setup.py
  gym_foo/
    __init__.py
    envs/
      __init__.py
      foo_env.py
      foo_extrahard_env.py

Pour en connaître le contenu, suivez le lien ci-dessus. Les détails qui n'y sont pas mentionnés sont notamment la façon dont certaines fonctions de l'application foo_env.py devrait ressembler. En regardant des exemples et en gym.openai.com/docs/ aide. Voici un exemple :

class FooEnv(gym.Env):
    metadata = {'render.modes': ['human']}

    def __init__(self):
        pass

    def _step(self, action):
        """

        Parameters
        ----------
        action :

        Returns
        -------
        ob, reward, episode_over, info : tuple
            ob (object) :
                an environment-specific object representing your observation of
                the environment.
            reward (float) :
                amount of reward achieved by the previous action. The scale
                varies between environments, but the goal is always to increase
                your total reward.
            episode_over (bool) :
                whether it's time to reset the environment again. Most (but not
                all) tasks are divided up into well-defined episodes, and done
                being True indicates the episode has terminated. (For example,
                perhaps the pole tipped too far, or you lost your last life.)
            info (dict) :
                 diagnostic information useful for debugging. It can sometimes
                 be useful for learning (for example, it might contain the raw
                 probabilities behind the environment's last state change).
                 However, official evaluations of your agent are not allowed to
                 use this for learning.
        """
        self._take_action(action)
        self.status = self.env.step()
        reward = self._get_reward()
        ob = self.env.getState()
        episode_over = self.status != hfo_py.IN_GAME
        return ob, reward, episode_over, {}

    def _reset(self):
        pass

    def _render(self, mode='human', close=False):
        pass

    def _take_action(self, action):
        pass

    def _get_reward(self):
        """ Reward is given for XY. """
        if self.status == FOOBAR:
            return 1
        elif self.status == ABC:
            return self.somestate ** 2
        else:
            return 0

Utilisez votre environnement

import gym
import gym_foo
env = gym.make('MyEnv-v0')

Exemples

  1. https://github.com/openai/gym-soccer
  2. https://github.com/openai/gym-wikinav
  3. https://github.com/alibaba/gym-starcraft
  4. https://github.com/endgameinc/gym-malware
  5. https://github.com/hackthemarket/gym-trading
  6. https://github.com/tambetm/gym-minecraft
  7. https://github.com/ppaquette/gym-doom
  8. https://github.com/ppaquette/gym-super-mario
  9. https://github.com/tuzzer/gym-maze

1 votes

Je reçois un vilain " gym_foo importé mais inutilisé". Comment puis-je m'en débarrasser ?

0 votes

@hipoglucido Pour vous débarrasser de "gym_foo importé mais inutilisé", vous devez indiquer à votre éditeur d'ignorer cette importation. Cela se fait généralement avec import gym_foo # noqa

8 votes

Je pense qu'il faut affirmer haut et fort que vous n'avez pas besoin de tout cela, seulement de la classe dérivée, n'est-ce pas ? Il n'y a vraiment aucune raison de créer un package si vous ne vous distinguez pas via l'écosystème de la gym ?

17voto

C'est tout à fait possible. Ils le disent dans la page de documentation, vers la fin.

https://gym.openai.com/docs

Pour ce qui est de la manière de procéder, vous devriez examiner le code source des environnements existants pour vous en inspirer. Il est disponible sur github :

https://github.com/openai/gym#installation

La plupart de leurs environnements n'ont pas été implémentés à partir de zéro, mais ont plutôt créé une enveloppe autour d'environnements existants et leur ont donné une interface qui convient à l'apprentissage par renforcement.

Si vous voulez faire le vôtre, vous devriez probablement aller dans cette direction et essayer d'adapter quelque chose qui existe déjà à l'interface du gymnase. Bien qu'il y ait de fortes chances que cela prenne beaucoup de temps.

Il existe une autre option qui peut être intéressante pour votre objectif. Il s'agit de l'Univers d'OpenAI

https://universe.openai.com/

Il peut s'intégrer à des sites web pour que vous entraîniez vos modèles sur des jeux kongregate, par exemple. Mais Universe n'est pas aussi facile à utiliser que Gym.

Si vous êtes un débutant, je vous recommande de commencer par une implémentation " vanille " sur un environnement standard. Une fois que vous aurez passé les problèmes avec les bases, passez à l'incrémentation...

0 votes

Que faire si l'on veut créer un environnement pour des activités non numériques comme le morpion ou le Rubik's cube, où les états possibles sont finis et peuvent être bien définis ? Dois-je simplement produire une liste de tous les états possibles ? Comment une simulation pourrait-elle déterminer quels sont les états de destination valables à partir d'un état donné ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X