Як створити нове середовище в тренажерному залі в OpenAI?


83

Я маю завдання зробити агента ШІ, який навчиться грати у відеоігри за допомогою ML. Я хочу створити нове середовище за допомогою OpenAI Gym, оскільки не хочу використовувати існуюче середовище. Як я можу створити нове, спеціальне середовище?

Крім того, чи є якийсь інший спосіб я можу розпочати розробку AI Agent для відтворення певної відеоігри без допомоги OpenAI Gym?

Відповіді:


125

Подивіться на моє banana-gymнадзвичайно маленьке середовище.

Створюйте нові середовища

Дивіться головну сторінку сховища:

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

Етапи:

  1. Створіть нове сховище зі структурою PIP-пакета

Це повинно виглядати так

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

Для його змісту перейдіть за посиланням вище. Деталі, які там не згадуються, особливо стосуються того, як foo_env.pyповинні виглядати деякі функції в . Дивлячись на приклади та на gym.openai.com/docs/ допомагає. Ось приклад:

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

Використовуйте своє оточення

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

Приклади

  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
Я отримую потворне " gym_fooімпортоване, але невикористане". Як я можу від цього позбутися?
hipoglucido 06.03.18

@hipoglucido Щоб позбутися від "gym_foo імпортованого, але невикористаного", потрібно сказати своєму редактору ігнорувати цей імпорт. Це зазвичай робиться зimport gym_foo # noqa
Мартіном Томою

7
Думаю, слід голосно сказати, що вам нічого з цього не потрібно, лише похідний клас, чи не так? Насправді немає жодної причини створювати пакет, якщо ви не розмовляєте за допомогою екосистеми спортзалу?
mathtick

для помилки імпорту "gym_foo", виконавши наведені вище кроки, виконуючи pip install -e . команду, допомогло @hipoglucido
praneeth

17

Це точно можливо. Так говорять на сторінці Документація, майже до кінця.

https://gym.openai.com/docs

Щодо того, як це зробити, вам слід шукати натхнення у вихідному коді існуючих середовищ. Він доступний у github:

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

Більшість своїх середовищ вони не реалізовували з нуля, а навпаки, створили обгортку навколо існуючих середовищ і надали їй все інтерфейс, зручний для навчання підкріплення.

Якщо ви хочете зробити власну, вам, мабуть, слід піти в цьому напрямку і спробувати пристосувати щось, що вже існує, до інтерфейсу спортзалу. Хоча є велика ймовірність, що це дуже трудомістко.

Є ще один варіант, який може бути цікавим для вашої мети. Це Всесвіт OpenAI

https://universe.openai.com/

Він може інтегруватися з веб-сайтами, щоб ви, наприклад, тренували свої моделі на іграх kongregate. Але користуватися Всесвітом не так просто, як тренажерний зал.

Якщо ви новачок, я рекомендую вам починати з ванільної реалізації в стандартному середовищі. Після того, як ви пройдете проблеми з основами, продовжуйте нарощувати ...


Що робити, якщо хочеться створити середовище для нецифрових дій, таких як Tic-Tac-Toe або куб Рубіка, де можливі стани скінченні і можуть бути чітко визначені? Чи просто скласти список із усіма можливими станами? Як симуляція могла з’ясувати, які дійсні статуси призначення з даного статусу?
Hendrik
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.