我想访问OpenAI健身房import argparse
import sys
def showtop20():
print('running showtop20')
def listapps():
print('running listapps')
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
# Create a showtop20 subcommand
parser_showtop20 = subparsers.add_parser('showtop20', help='list top 20 by app')
parser_showtop20.set_defaults(func=showtop20)
# Create a listapps subcommand
parser_listapps = subparsers.add_parser('listapps', help='list all available apps')
parser_listapps.set_defaults(func=listapps)
# Print usage message if no args are supplied.
# NOTE: Python 2 will error 'too few arguments' if no subcommand is supplied.
# No such error occurs in Python 3, which makes it feasible to check
# whether a subcommand was provided (displaying a help message if not).
# argparse internals vary significantly over the major versions, so it's
# much easier to just override the args passed to it.
if len(sys.argv) <= 1:
sys.argv.append('--help')
options = parser.parse_args()
# Run the appropriate function (in this case showtop20 or listapps)
options.func()
# If you add command-line options, consider passing them to the function,
# e.g. `options.func(options)`
环境中的原始像素,而无需打开渲染窗口。我该怎么做?
示例代码:
CartPole-v0
PS。我很难找到OpenAI健身房的好文档。它只是我,还是根本不存在?
修改:我无需打开渲染视频。
答案 0 :(得分:1)
我遇到过类似的问题:
这是修复它的方法,在/ gym / envs / classic_control的rendering.py文件中找到Viewer类中的以下行:
self.window = pyglet.window.Window(width=width, height=height, display=display)
将此行更改为:
self.window = pyglet.window.Window(width=width, height=height, display=display, visible=False)
希望它有所帮助!!
答案 1 :(得分:0)
我很好奇,所以我开始研究源代码,这就是我发现的东西。
Open AI使用pyglet来显示窗口和动画。
为了显示动画,将所有内容绘制到窗口上,然后进行渲染。
然后pyglet将正在显示的内容存储到缓冲区中。
在开放的AI中编写代码的虚拟版本
import pyglet
from pyglet.gl import *
import numpy as np
display = pyglet.canvas.get_display()
screen = display.get_screens()
config = screen[0].get_best_config()
pyglet.window.Window(width=500, height=500, display=display, config=config)
# draw what ever you want
#get image from the buffer
buffer = pyglet.image.get_buffer_manager().get_color_buffer()
image_data=buffer.get_image_data()
arr = np.frombuffer(image_data.get_data(),dtype=np.uint8)
print(arr)
print(arr.shape)
输出:
[0 0 0 ... 0 0 0]
(1000000,)
因此,基本上,我们获得的每个图像都来自窗口显示内容的缓冲区。 因此,如果我们不在窗口上绘制任何东西,那么我们将不会得到图像,因此需要窗口才能获得图像。 因此,您需要找到一种方法,使窗口不显示,但其值存储在缓冲区中。 我知道这不是您想要的,但我希望它可以引导您找到解决方案。
答案 2 :(得分:-1)
有人在这里提供答案:
https://github.com/openai/gym/issues/374
“atari和doom环境在他们的观察中给出了像素(即,从步骤返回的值)。我认为没有其他任何像素。
render在不同的操作系统上产生不同的结果,因此它们不属于任何用于基准测试目的的官方环境。但是如果你想创建一个观察以像素为单位的新环境,你可以通过包装现有环境并调用render来实现它。“
我也在努力获取原始像素,而我正试图找到一种方法来查看返回的内容是否符合预期。
可以找到文档: https://gym.openai.com/docs
讨论OpenAI的论坛: discuss.openai.com
虽然不是很热闹。