我正在健身房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)
我遵循了本教程,但不确定出了什么问题。我在谷歌上搜索了很多,但没有遇到任何有用的东西。
python machine-learning reinforcement-learning python-3.x openai-gym
所以我正在尝试在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
好吧,那么 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) 我知道env=gym.make('CartPole-v0')是类型gym.wrappers.time_limit.TimeLimit
我还知道 env 是 cartpole.py 类的“实例”。我的问题是,如何通过仅提供名称“CartPole-v0”来访问 cartpole.py 类。该流程在哪里实施?我试图在 site-package 文件夹中的gym 文件夹中查找它,但我无法找到/理解该过程发生的位置。我不确定我上面的陈述是否准确,我问这个问题是为了了解gym.make('CartPole-v0') 执行背后的过程以及与之相关的任何主题,以便了解有关编码的更多信息一般来说。我的猜测是我误解了一些东西
我想从自定义初始点启动 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) 我创建了一个自定义的 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
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 注册环境做同样的事情。有没有办法做到这一点?
信息:我正在使用 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) 我在 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
我以 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
openai-gym ×10
python ×8
copy ×1
docker ×1
keras-rl ×1
python-3.x ×1
ray ×1
ubuntu-16.04 ×1
vnc ×1