Machine learning 如何在OpenAI中创建一个新的健身房环境?

Machine learning 如何在OpenAI中创建一个新的健身房环境?,machine-learning,artificial-intelligence,openai-gym,Machine Learning,Artificial Intelligence,Openai Gym,我有一个任务,让一个AI代理学习使用ML玩视频游戏。我想使用OpenAI Gym创建一个新的环境,因为我不想使用现有的环境。如何创建新的自定义环境 另外,有没有其他方法可以让我开始开发制作AI代理,在没有OpenAI Gym帮助的情况下玩特定的视频游戏?这绝对是可能的。他们在文档页面的末尾这样说 至于如何做到这一点,您应该查看现有环境的源代码以获得灵感。其可在github中获得: 他们的大多数环境不是从头开始实现的,而是围绕现有环境创建了一个包装器,并为其提供了一个便于强化学习的接口 如果你

我有一个任务,让一个AI代理学习使用ML玩视频游戏。我想使用OpenAI Gym创建一个新的环境,因为我不想使用现有的环境。如何创建新的自定义环境


另外,有没有其他方法可以让我开始开发制作AI代理,在没有OpenAI Gym帮助的情况下玩特定的视频游戏?

这绝对是可能的。他们在文档页面的末尾这样说

至于如何做到这一点,您应该查看现有环境的源代码以获得灵感。其可在github中获得:

他们的大多数环境不是从头开始实现的,而是围绕现有环境创建了一个包装器,并为其提供了一个便于强化学习的接口

如果你想做你自己的,你可能应该朝着这个方向努力,尝试将一些已经存在的东西应用到健身房的界面上。虽然这很可能非常耗时

对于您的目的,还有另一个可能很有趣的选项。这是OpenAI的世界

例如,它可以与网站集成,以便您在kongregate游戏中训练您的模型。但宇宙并不像健身房那么容易使用

如果您是初学者,我建议您从标准环境上的普通实现开始。在基本问题解决之后,继续增量…

查看my以了解非常小的环境

创造新环境 请参见存储库的主页:

这些步骤是:

  • 创建具有PIP包结构的新存储库
  • 应该是这样的

    gym-foo/
      README.md
      setup.py
      gym_foo/
        __init__.py
        envs/
          __init__.py
          foo_env.py
          foo_extrahard_env.py
    
    有关它的内容,请点击上面的链接。这里没有提到的细节,特别是
    foo_env.py
    中的一些函数应该是什么样子的。查看示例和帮助。以下是一个例子:

    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
    
    使用您的环境 例子

  • 如果一个用户想要为非数字活动创建一个环境,比如Tic-Tac-Toe或Rubik's-cube,其中可能的状态是有限的,并且可以很好地定义,该怎么办?我能列出所有可能的州吗?模拟如何从给定的状态中找出有效的目的地状态?我得到一个丑陋的“
    gym\u foo
    导入但未使用”。我怎样才能摆脱它?@hipoglicdo要摆脱“gym_foo已导入但未使用”,您需要告诉您的编辑器忽略此导入。这通常是通过导入gym_foo#noqa来完成的,我认为应该大声声明,您不需要这些,只需要派生类,对吗?如果您没有通过gym生态系统进行disting,那么在执行上述步骤后,对于“gym_foo”导入错误,执行
    pip安装-e,就没有理由创建包命令帮助@hipoglicdo
    
    import gym
    import gym_foo
    env = gym.make('MyEnv-v0')