OpenAIで新しいジム環境を作成するにはどうすればよいですか?


83

MLを使用してビデオゲームをプレイする方法を学習するAIエージェントを作成する割り当てがあります。既存の環境を使いたくないので、OpenAIGymを使って新しい環境を作りたいです。新しいカスタム環境を作成するにはどうすればよいですか?

また、OpenAIジムの助けを借りずに特定のビデオゲームをプレイするためのAIエージェントの開発を開始できる他の方法はありますか?

回答:


124

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 2018年

@hipoglucido「gym_fooはインポートされましたが未使用」を取り除くには、このインポートを無視するようにエディターに指示する必要があります。これは一般的に行われていますimport gym_foo # noqa
Martin Thoma 2018

7
これは必要なく、派生クラスだけが必要だと大声で言うべきだと思いますよね?ジムのエコシステムを介して区別しない場合、パッケージを作成する理由は本当にありませんか?
mathtick 2018

上記の手順を以下の後に「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/

Webサイトと統合して、たとえばkongregateゲームでモデルをトレーニングできます。しかし、ユニバースはジムほど使いやすいものではありません。

初心者の場合は、標準環境でのバニラ実装から始めることをお勧めします。基本の問題に合格したら、インクリメントに進みます...


Tic-Tac-ToeやRubikのキューブのように、可能な状態が有限であり、明確に定義できる非デジタルアクティビティ用の環境を作成したい場合はどうでしょうか。考えられるすべての状態のリストを作成しますか?シミュレーションは、特定のステータスから有効な宛先ステータスをどのように把握できますか?
ヘンドリック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.