6

私は非常に単純な OpenAI ジム ( banana-gym) を作成しましたが、実装する必要があるかどうか、またはどのように実装する必要があるかを考えていますenv.seed(0)

たとえば、https://github.com/openai/gym/issues/250#issuecomment-234126816を参照してください。

4

2 に答える 2

2

関数の docstring (このファイルenv.seed()で見つけることができます) は、関数が何をするために実装されるべきかについての次のドキュメントを提供します:

Sets the seed for this env's random number generator(s).

    Note:
        Some environments use multiple pseudorandom number generators.
        We want to capture all such seeds used in order to ensure that
        there aren't accidental correlations between multiple generators.
    Returns:
        list<bigint>: Returns the list of seeds used in this env's random
          number generators. The first value in the list should be the
          "main" seed, or the value which a reproducer should pass to
          'seed'. Often, the main seed equals the provided 'seed', but
          this won't be true if seed=None, for example.

env.seed()リンクした問題のドキュメントとコメントが暗示しているように見えるものとは異なり、カスタム環境によってオーバーライドされることになっているようには見えないことに注意してください。env.seed()の戻り値を呼び出して返すだけの非常に単純な実装があり、カスタム環境によってオーバーライドされるべき関数であるようenv._seed()に私には思えます。

たとえば、OpenAI ジムのアタリ環境には、(ベースの) Arcade Learning Environment_seed()によって内部的に使用されるシードを設定するカスタム実装があります。C++

カスタム環境random.random()に呼び出しがあるので、おそらくcall を実装する必要があります。このようにして、環境のユーザーは、同じ引数で環境を呼び出すようにすることで、実験を再現できます。_seed()random.seed()seed()

注:このようにグローバル ランダム シードをいじるのは予想外かもしれませんが、環境が初期化されたときに専用のランダム オブジェクトを作成し、そのオブジェクトをシードし、乱数が必要な場合は常に乱数を取得するようにすることをお勧めします。そのオブジェクトからの環境。

于 2018-01-17T13:30:46.300 に答える