[英]Wrapping custom gym with PyEnvironment TF-Agents
I've got a custom gym environment which has a render method I can call with go_env.render(mode="human")
(which draws a pyglet canvas).我有一个自定义健身房环境,它有一个渲染方法,我可以用
go_env.render(mode="human")
(它绘制一个 pyglet 画布)调用。 The gym I've got works with go_env = gym.make('gym_go:go-v0', size=args.boardsize, komi=args.komi)
.我的健身房适用于
go_env = gym.make('gym_go:go-v0', size=args.boardsize, komi=args.komi)
。 How would I write the corresponding environment wrapper in TF-Agents?我将如何在 TF-Agents 中编写相应的环境包装器? Currently I have:
env = suite_gym.load('gym_go:go-v0', gym_kwargs={'size':3,'komi':0}, render_kwargs={'mode':'terminal'})
.目前我有:
env = suite_gym.load('gym_go:go-v0', gym_kwargs={'size':3,'komi':0}, render_kwargs={'mode':'terminal'})
。 But this throws a TypeError as render() on PyEnvironment has its own mode:但这会抛出 TypeError,因为 PyEnvironment 上的 render() 有它自己的模式:
render(
mode: Text = 'rgb_array'
) -> Optional[types.NestedArray]
How do I wrap the gym environment correctly with my parameters, and make sure it renders properly?如何使用我的参数正确包装健身房环境,并确保它正确呈现?
Turns out you don't need to pass it in renderkwargs
, you can pass the rendering mode directly into the wrapped class like so:原来你不需要在
renderkwargs
中传递它,你可以像这样将渲染模式直接传递到包装的 class 中:
env = suite_gym.load('gym_go:go-v0', gym_kwargs={'size':3,'komi':0})
env.render('terminal')
This works with custom modes too, as long as you override the render method in your custom gym implementation.这也适用于自定义模式,只要您在自定义健身房实现中重写渲染方法即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.