Wie erstelle ich eine neue Fitnessumgebung in OpenAI?

82

Ich habe die Aufgabe, einen AI-Agenten zu erstellen, der lernt, ein Videospiel mit ML zu spielen. Ich möchte mit OpenAI Gym eine neue Umgebung erstellen, da ich keine vorhandene Umgebung verwenden möchte. Wie kann ich eine neue, benutzerdefinierte Umgebung erstellen?

Gibt es auch eine andere Möglichkeit, AI Agent zum Spielen eines bestimmten Videospiels ohne die Hilfe von OpenAI Gym zu entwickeln?

Rifat Bin Reza
quelle

Antworten:

121

Sehen Sie meine banana-gymfür eine extrem kleine Umgebung.

Erstellen Sie neue Umgebungen

Siehe die Hauptseite des Repositorys:

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

Die Schritte sind:

  1. Erstellen Sie ein neues Repository mit einer PIP-Paketstruktur

Es sollte so aussehen

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

Für den Inhalt folgen Sie dem Link oben. Details, die dort nicht erwähnt werden, sind insbesondere, wie einige Funktionen in foo_env.pyaussehen sollten. Das Betrachten von Beispielen und von gym.openai.com/docs/ hilft. Hier ist ein Beispiel:

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

Nutze deine Umgebung

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

Beispiele

  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
Martin Thoma
quelle
1
Ich bekomme ein hässliches " gym_fooimportiert aber unbenutzt". Wie kann ich es loswerden?
Hipoglucido
@hipoglucido Um "gym_foo importiert, aber nicht verwendet" loszuwerden, müssen Sie Ihren Editor anweisen, diesen Import zu ignorieren. Dies wird üblicherweise mitimport gym_foo # noqa
Martin Thoma
5
Ich denke, es sollte laut gesagt werden, dass Sie nichts davon brauchen, nur die abgeleitete Klasse, oder? Es gibt wirklich keinen Grund, ein Paket zu erstellen, wenn Sie nicht über das Fitnessstudio-Ökosystem distanzieren?
Mathtick
Für den Importfehler "gym_foo" nach dem Ausführen der obigen Schritte pip install -e . half das Ausführen des Befehls @hipoglucido
praneeth
17

Es ist definitiv möglich. Sie sagen dies auf der Dokumentationsseite kurz vor dem Ende.

https://gym.openai.com/docs

Informationen dazu finden Sie im Quellcode der vorhandenen Umgebungen. Es ist in Github erhältlich:

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

Die meisten ihrer Umgebungen wurden nicht von Grund auf neu implementiert, sondern es wurde ein Wrapper um vorhandene Umgebungen erstellt und allen eine Schnittstelle zur Verfügung gestellt, die für das verstärkte Lernen praktisch ist.

Wenn Sie Ihre eigenen erstellen möchten, sollten Sie wahrscheinlich in diese Richtung gehen und versuchen, etwas, das bereits vorhanden ist, an die Benutzeroberfläche des Fitnessstudios anzupassen. Obwohl es eine gute Chance gibt, dass dies sehr zeitaufwändig ist.

Es gibt eine andere Option, die für Ihren Zweck interessant sein kann. Es ist das OpenAI-Universum

https://universe.openai.com/

Es kann in Websites integriert werden, sodass Sie Ihre Modelle beispielsweise in Kongregate-Spielen trainieren können. Das Universum ist jedoch nicht so einfach zu bedienen wie das Fitnessstudio.

Wenn Sie ein Anfänger sind, empfehle ich Ihnen, mit einer Vanille-Implementierung in einer Standardumgebung zu beginnen. Nachdem Sie die Probleme mit den Grundlagen überwunden haben, fahren Sie mit dem Inkrementieren fort ...

Guilherme de Lazari
quelle
Was ist, wenn Sie eine Umgebung für nicht digitale Aktivitäten wie Tic-Tac-Toe oder Rubik's Cube schaffen möchten, in der die möglichen Zustände endlich sind und genau definiert werden könnten? Soll ich nur eine Liste mit allen möglichen Zuständen erstellen? Wie kann eine Simulation aus einem bestimmten Status herausfinden, welche Zielstatus gültig sind?
Hendrik