Làm thế nào để tạo một môi trường phòng tập mới trong OpenAI?


82

Tôi được giao nhiệm vụ làm một Nhân viên AI sẽ học cách chơi trò chơi điện tử bằng ML. Tôi muốn tạo một môi trường mới bằng OpenAI Gym vì tôi không muốn sử dụng một môi trường hiện có. Làm cách nào để tạo một Môi trường mới, tùy chỉnh?

Ngoài ra, có cách nào khác để tôi có thể bắt đầu phát triển việc tạo AI Agent để chơi một trò chơi điện tử cụ thể mà không cần đến sự trợ giúp của OpenAI Gym không?

Câu trả lời:


121

Xem của tôi banana-gymcho một môi trường cực kỳ nhỏ.

Tạo môi trường mới

Xem trang chính của kho:

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

Các bước là:

  1. Tạo một kho lưu trữ mới với cấu trúc gói PIP

Nó sẽ giống như thế này

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

Để biết nội dung của nó, hãy theo liên kết ở trên. Các chi tiết không được đề cập ở đó, đặc biệt là một số hàm trong foo_env.pysẽ trông như thế nào. Xem các ví dụ và tại gym.openai.com/docs/ sẽ giúp bạn. Đây là một ví dụ:

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

Sử dụng môi trường của bạn

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

Ví dụ

  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
Tôi nhận được một xấu xí " gym_foonhập khẩu nhưng chưa sử dụng". Làm sao để tôi thoát khỏi nó?
hipoglucido

@hipoglucido Để loại bỏ "gym_foo đã nhập nhưng chưa sử dụng", bạn cần yêu cầu người biên tập bỏ qua quá trình nhập này. Điều này thường được thực hiện vớiimport gym_foo # noqa
Martin Thoma

5
Tôi nghĩ rằng cần phải nói rõ rằng bạn không cần bất kỳ cái nào trong số này, chỉ có lớp dẫn xuất phải không? Thực sự không có lý do gì để tạo một gói nếu bạn không bỏ qua hệ sinh thái phòng tập?
mathtick

đối với lỗi nhập "gym_foo" sau khi làm theo các bước trên, thực hiện pip install -e . lệnh đã giúp @hipoglucido
praneeth

17

Nó chắc chắn có thể. Họ nói như vậy trong trang Tài liệu, gần cuối.

https://gym.openai.com/docs

Về cách thực hiện, bạn nên xem mã nguồn của các môi trường hiện có để tìm cảm hứng. Nó có sẵn trong github:

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

Hầu hết các môi trường của họ, họ không thực hiện từ đầu, mà tạo ra một lớp bao bọc xung quanh các môi trường hiện có và tạo cho nó một giao diện thuận tiện cho việc học củng cố.

Nếu bạn muốn tự làm, có lẽ bạn nên đi theo hướng này và cố gắng điều chỉnh thứ gì đó đã tồn tại với giao diện phòng tập thể dục. Mặc dù có một cơ hội tốt là việc này rất tốn thời gian.

Có một tùy chọn khác có thể thú vị cho mục đích của bạn. Đó là vũ trụ của OpenAI

https://universe.openai.com/

Nó có thể tích hợp với các trang web để bạn đào tạo người mẫu của mình trên các trò chơi kongregate chẳng hạn. Nhưng Universe không dễ sử dụng như Gym.

Nếu bạn là người mới bắt đầu, khuyến nghị của tôi là bạn nên bắt đầu với việc triển khai vani trên môi trường tiêu chuẩn. Sau khi bạn vượt qua các vấn đề cơ bản, hãy chuyển sang bước tăng dần ...


Điều gì sẽ xảy ra nếu một người muốn tạo ra một môi trường cho các hoạt động phi kỹ thuật số như Tic-Tac-Toe hoặc khối Rubik trong đó các trạng thái có thể là hữu hạn và có thể được xác định rõ? Tôi sẽ tạo một danh sách với tất cả các trạng thái có thể có? Làm thế nào một mô phỏng có thể tìm ra các trạng thái đích hợp lệ từ một trạng thái nhất định?
Hendrik
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.