OpenAI에서 새로운 체육관 환경을 만드는 방법은 무엇입니까?


82

ML을 사용하여 비디오 게임을하는 방법을 배울 AI 에이전트를 만드는 임무가 있습니다. 기존 환경을 사용하고 싶지 않기 때문에 OpenAI Gym을 사용하여 새로운 환경을 만들고 싶습니다. 새로운 사용자 지정 환경을 생성하려면 어떻게해야합니까?

또한 OpenAI Gym의 도움없이 특정 비디오 게임을 할 수있는 AI Agent 제작을 개발할 수있는 다른 방법이 있습니까?

답변:


121

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

@hipoglucido "gym_foo가 가져 왔지만 사용되지 않음"을 제거하려면 편집기에이 가져 오기를 무시하도록 지시해야합니다. 이것은 일반적으로 이루어집니다import gym_foo # noqa
마틴 토마스

5
나는 이것이 필요하지 않고 파생 된 클래스 만 필요하다고 큰 소리로 말해야한다고 생각합니다. 체육관 생태계를 통해 구별하지 않는다면 패키지를 만들 이유가 정말로 없습니까?
mathtick dec

위의 단계를 수행 한 후 "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 또는 Rubik 큐브와 같은 비 디지털 활동을위한 환경을 만들고 싶다면 어떨까요? 가능한 모든 상태로 목록을 생성할까요? 시뮬레이션은 주어진 상태에서 유효한 목적지 상태를 어떻게 파악할 수 있습니까?
Hendrik
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.