1. ホーム
  2. machine-learning

[解決済み] OpenAIで新しいジム環境を作るには?

2023-02-15 23:44:13

質問

MLを使ってゲームのプレイを学習するAIエージェントを作るという課題があります。既存の環境は使いたくないので、OpenAI Gymを使って新しい環境を作りたいと思っています。どのようにすれば、新しいカスタム環境を作ることができるのでしょうか?

また、OpenAI Gymを使わずに、特定のビデオゲームをプレイするAIエージェントを作る開発に着手する方法は他にありますか?

どのように解決するのですか?

私の banana-gym をご覧ください。

新しい環境の作成

リポジトリのメインページを参照してください。

https://github.com/openai/gym/blob/master/docs/creating_environments.md

手順としては

  1. PIP-package構造を持つ新しいリポジトリを作成します。

以下のようになるはずです。

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