标签: openai-gym

python OpenAI健身房监视器在录制目录中创建json文件

我正在健身房CartPole-v0环境中实现价值迭代,并希望将代理动作的视频记录在视频文件中。我一直在尝试使用 Monitor 包装器来实现这一点,但它会在录制目录中生成 json 文件而不是视频文件。这是我的代码:

env = gym.make('FrozenLake-v0')
env = gym.wrappers.Monitor(env, 'recording', force=True)
env.seed(0)
optimalValue = valueIteration(env)
st = time.time()
policy = cal_policy(optimalValue)
policy_score = evaluate_policy(env, policy)
et = time.time()
env.close()
print('Best score: %.2f  Time: %4.4f sec' % (policy_score, et-st))
Run Code Online (Sandbox Code Playgroud)

监控json文件

我遵循了教程,但不确定出了什么问题。我在谷歌上搜索了很多,但没有遇到任何有用的东西。

python machine-learning reinforcement-learning python-3.x openai-gym

7
推荐指数
1
解决办法
5486
查看次数

如何使用nvidia-docker正确运行OpenAI健身房并查看环境

所以我正在尝试在docker容器中运行OpenAI健身房,但它看起来像这样: 在此输入图像描述

注意pong窗口有一个奇怪的渲染问题,它重复的东西和颜色都关闭.这是太空入侵者:

在此输入图像描述

注意"不是编程问题"人们:解决方案涉及正确的bash脚本代码,以调用正确的API方法来正确渲染像素数组.此外,只有图形编程人员可能"识别渲染故障".

我的设置非常简单. - 我正在使用Nvidia gtx1060和corei7进行本地ubuntu 16.04安装 - 我使用--no-opengl-files安装了nvida runfile驱动程序(根据Nvidia和许多地方的说明). - 具体来说,我正在运行floydhub/pytorch docker image.

有没有人认识到特定的渲染故障及其意义?它几乎看起来像帧缓冲区的StackOverflow!我该怎么做才能找到错误?

编辑:我已经消除了我一直在安装的所有额外的依赖项,我只是根据ROS GUI指南进行简单的x-forwarding.

您可以按如下方式轻松复制:

docker run -it --user=$(id -u) --env="DISPLAY" --workdir="/home/$USER" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" floydhub/pytorch:0.1.11-gpu-py3.6 bash
Run Code Online (Sandbox Code Playgroud)

现在在图像中,键入python然后输入以下内容:

import gym
gym.make('Pong-v0').render()
Run Code Online (Sandbox Code Playgroud)

这应该打开你机器上的x转发窗口,但显示器已损坏(至少对我而言)

图片

上面我实际使用了SpaceInvaders-v0

vnc docker ubuntu-16.04 openai-gym nvidia-docker

6
推荐指数
0
解决办法
556
查看次数

开放式 AI 健身房实时运行,而不是尽可能快地运行

好吧,那么 OpenAI Gym 中一定有一些选项可以让它运行得尽可能快吗?我有一个 Linux 环境可以做到这一点(尽可能快地运行),但是当我在 Windows 上运行精确的设置时,它只是实时运行。

我正在研究的具体环境是 Montezuma 的 Revenge Atari 游戏。我运行完全相同的代码,但在我的 Linux 设置上,它能够更快地运行游戏。只是想让你知道我的 Linux 计算机的规格比我的 Windows 计算机差。

这里有一些代码供那些想要它的人使用:

for i in range(episode_count):
    ob = env.reset()
    ob = np.expand_dims(ob, axis=0)
    time = 0
    while True:
        time += 1
        action = agent.act(ob, reward, done)
        new_ob, reward, done, _ = env.step(action)
        new_ob = np.expand_dims(new_ob, axis=0)
        agent.remember(ob, action, reward, new_ob, done)

        ob = new_ob
        env.render()
        if done or time >= 1000:
            print("episode: {}/{}, time: {}, e: {:.3}"
                  .format(i, episode_count, time, agent.epsilon)) …
Run Code Online (Sandbox Code Playgroud)

openai-gym

6
推荐指数
1
解决办法
5457
查看次数

gym.make('CartPole-v0') 返回什么以及它是如何工作的?

我知道env=gym.make('CartPole-v0')是类型gym.wrappers.time_limit.TimeLimit

我还知道 env 是 cartpole.py 类的“实例”。我的问题是,如何通过仅提供名称“CartPole-v0”来访问 cartpole.py 类。该流程在哪里实施?我试图在 site-package 文件夹中的gym 文件夹中查找它,但我无法找到/理解该过程发生的位置。我不确定我上面的陈述是否准确,我问这个问题是为了了解gym.make('CartPole-v0') 执行背后的过程以及与之相关的任何主题,以便了解有关编码的更多信息一般来说。我的猜测是我误解了一些东西

python openai-gym

6
推荐指数
1
解决办法
1万
查看次数

如何从 Mountain Car 的自定义初始状态启动环境?

我想从自定义初始点启动 OpenAI Gym 的连续山地车环境。OpenAI Gym 没有提供任何方法来做到这一点。我查看了环境的代码,发现有一个属性state保存状态信息。我尝试手动更改该属性。然而,它不起作用。

您可以看到附加的代码,从状态函数返回的观察结果与变量不匹配env.state

我认为这是一些基本的 Python 问题,不允许我访问该属性。有没有办法访问该属性或其他方式从自定义初始状态开始?我知道我可以从现有代码创建一个自定义环境(像这样)并添加功能。我在 Github 存储库中发现了一个问题,我认为他们也提出了这一点。

import gym
env = gym.make("MountainCarContinuous-v0")

env.reset()
print(env.state)
env.state = np.array([-0.4, 0])
print(env.state)

for i in range(50):
    obs, _, _, _ = env.step([1]) # Just taking right in every step   
    print(obs, env.state) #the observation and env.state is different
    env.render()
Run Code Online (Sandbox Code Playgroud)

代码的输出:

[-0.52196493  0.        ]
[-0.4  0. ]
[-0.52047719  0.00148775] [-0.4  0. ]
[-0.51751285  0.00296433] [-0.4  0. ]
[-0.51309416  0.00441869] [-0.4  0. …
Run Code Online (Sandbox Code Playgroud)

python openai-gym

6
推荐指数
1
解决办法
2252
查看次数

Python强化学习-元组观察空间

我创建了一个自定义的 openai 健身房环境,其中包含离散的动作空间和稍微复杂的状态空间。状态空间被定义为元组,因为它结合了一些连续的维度和其他离散的维度:

import gym
from gym import spaces

class CustomEnv(gym.Env):
    def __init__(self):
        self.action_space = spaces.Discrete(3)
        self.observation_space = spaces.Tuple((spaces.Discrete(16),
                                               spaces.Discrete(2),
                                               spaces.Box(0,20000,shape=(1,)),
                                               spaces.Box(0,1000,shape=(1,)))
    ...
Run Code Online (Sandbox Code Playgroud)

我很幸运地使用 keras-rl(特别是 DQNAgent)训练​​了一个代理,但是 keras-rl 的支持不足且文档很少。对于可以处理此类观察空间的强化学习包有什么建议吗?目前看来 openai 基线和 stable-baselines 都无法处理它。

或者,是否有一种不同的方式可以定义我的状态空间,以便将我的环境适应这些定义更好的包之一?

python machine-learning reinforcement-learning openai-gym keras-rl

6
推荐指数
1
解决办法
3064
查看次数

rllib 使用自定义注册环境

Rllib 文档提供了一些有关如何创建和训练自定义环境的信息。有一些关于注册该环境的信息,但我想它的工作方式需要与健身房注册不同。

我正在使用SimpleCorridor环境对此进行测试。如果我将注册码添加到文件中,如下所示:

from ray.tune.registry import register_env

class SimpleCorridor(gym.Env):
   ...


def env_creator(env_config):
    return SimpleCorridor(env_config)

register_env("corridor", env_creator)
Run Code Online (Sandbox Code Playgroud)

然后我可以使用字符串名称训练算法没问题:

if __name__ == "__main__":
    ray.init()
    tune.run(
        "PPO",
        stop={
            "timesteps_total": 10000,
        },
        config={
            "env": "corridor", # <--- This works fine!
            "env_config": {
                "corridor_length": 5,
            },
        },
    )
Run Code Online (Sandbox Code Playgroud)

然而

在定义环境的同一个文件中注册环境是没有意义的,因为您可以只使用该类。OpenAI 健身房注册很好,因为如果您安装环境,那么您只需编写即可在任何地方使用它

include gym_corridor
Run Code Online (Sandbox Code Playgroud)

我不清楚是否有办法为 rllib 注册环境做同样的事情。有没有办法做到这一点?

python ray openai-gym

6
推荐指数
1
解决办法
2348
查看次数

如何复制健身房环境?

信息:我正在使用 OpenAI Gym 创建 RL 环境,但需要环境的多个副本来完成我正在做的事情。我不想做任何事情,比如[gym.make(...) for i in range(2)]创造一个新的环境。

问题:给定一个健身房环境,复制它以便拥有 2 个重复但断开连接的环境的最佳方法是什么?

这是一个例子:

import gym

env = gym.make("CartPole-v0")
new_env = # NEED COPY OF ENV HERE

env.reset() # Should not alter new_env
Run Code Online (Sandbox Code Playgroud)

python copy openai-gym

6
推荐指数
1
解决办法
2131
查看次数

如何利用网格环境创建一个openAI健身房观察空间

我在 Tkinter 中构建了环境,如何使用该环境创建观察空间。我无法理解如何使用数组中的网格坐标来制作观察空间, self.observation_space = space.Box(np.array([]), np.array([]), dtype=np.int),给出了代码。如果有人提供帮助,我将不胜感激。

enter code here

# Setting the sizes for the environment
pixels = 40   # pixels
env_height =9   # grid height
env_width = 9  # grid width

# Global variable for dictionary with coordinates for the final route
a = {}


# Creating class for the environment
class Environment(tk.Tk, object):
def __init__(self):
    super(Environment, self).__init__()
    self.action_space = ['up', 'down', 'left', 'right']
    self.n_actions = len(self.action_space)
    self.title('RL Q-learning. Sichkar Valentyn')
    self.geometry('{0}x{1}'.format(env_height * pixels, env_height * pixels)) …
Run Code Online (Sandbox Code Playgroud)

python artificial-intelligence reinforcement-learning openai-gym

6
推荐指数
0
解决办法
909
查看次数

为什么稳定基线 3 中的多处理速度较慢?

我以 Stable Baselines 3 的多处理示例为例,一切都很好。 https://colab.research.google.com/github/Stable-Baselines-Team/rl-colab-notebooks/blob/sb3/multiprocessing_rl.ipynb#scrollTo=pUWGZp3i9wyf

多处理训练比 num_cpu=4 的单处理训练花费的时间大约少 3.6 倍。

但是,当我尝试使用 PPO 代替 A3C,使用 BipedalWalker-v3 代替 CartPole-v1 时,我发现多处理模式下的性能更差。我的问题是:我做错了什么?为什么速度比较慢?

我的代码是:

import gym
import time

from stable_baselines3 import PPO
from stable_baselines3 import A2C
from stable_baselines3.common.env_util import make_vec_env
from stable_baselines3.common.evaluation import evaluate_policy

env_name = "BipedalWalker-v3"
num_cpu = 4
n_timesteps = 10000

env = make_vec_env(env_name, n_envs=num_cpu)

model = PPO('MlpPolicy', env, verbose=0)

start_time = time.time()
model.learn(n_timesteps)
total_time_multi = time.time() - start_time
print(f"Took {total_time_multi:.2f}s for multiprocessed version - {n_timesteps / total_time_multi:.2f} FPS")


single_process_model = PPO('MlpPolicy', …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing reinforcement-learning openai-gym stable-baselines

6
推荐指数
1
解决办法
2319
查看次数