简体   繁体   English

使用 PyEnvironment TF-Agents 包装自定义健身房

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM