OpenAI-gym 关于render无法弹出游戏窗口以及想要在训练时不渲染然后在测试时再渲染的解决方案

这篇具有很好参考价值的文章主要介绍了OpenAI-gym 关于render无法弹出游戏窗口以及想要在训练时不渲染然后在测试时再渲染的解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.render()无法弹出游戏窗口的原因

你使用的代码可能与你的gym版本不符
在我目前的测试看来,gym 0.23的版本,在初始化env的时候只需要游戏名称这一个实参,然后在需要渲染的时候主动调用render()去渲染游戏窗口,比如:

env = gym.make("CartPole-v1")
obs = env.reset()
for _ in range(1000):
	env.render()
	obs, reward, done, info = env.step(env.action_space.sample())	# 以action随机抽样为例
	if done:
		break
env.close()

而在gym0.26的版本,在初始化env的时候你需要加入另一个实参:render_mode,如:

env = gym.make("CartPole-v1", render_mode="human")

具体参数参考官方文档:https://www.gymlibrary.dev/
并且,你在reset时需要设置seed参数,并且还要用二项元组接收数据,而且step时需要用五项元组接收数据,否则会报错
就模仿官方文档的入门教程这样写:

import gym
env = gym.make("LunarLander-v2", render_mode="human")
observation, info = env.reset(seed=42)
for _ in range(1000):
   action = policy(observation)  # User-defined policy function
   observation, reward, terminated, truncated, info = env.step(action)

   if terminated or truncated:
      observation, info = env.reset()
env.close()

2.在设置好 render_mode 后,调用reset()即会自动开始渲染

看了一下gym0.26的reset方法代码,它会根据你初始化env时传入的render_mode参数去决定它要不要渲染,并且,在gym0.26主动调用render是无效的
CartPole游戏的reset源码如下:

    def reset(
        self,
        *,
        seed: Optional[int] = None,
        options: Optional[dict] = None,
    ):
        super().reset(seed=seed)
        # Note that if you use custom reset bounds, it may lead to out-of-bound
        # state/observations.
        low, high = utils.maybe_parse_reset_bounds(
            options, -0.05, 0.05  # default low
        )  # default high
        self.state = self.np_random.uniform(low=low, high=high, size=(4,))
        self.steps_beyond_terminated = None

        if self.render_mode == "human":
            self.render()
        return np.array(self.state, dtype=np.float32), {}

可以看到,在最后,如果render_mode设置为"human",那么render方法将被调用。

3.在gym 0.26如何实现训练时不渲染,而测试时再渲染

在gym0.23版本,可以主动调用render来决定渲不渲染,而在gym0.26版本,只要reset就渲染,所以如果你刚开始就设定render_mode="human"的话,那么你将会看到整个训练过程,且动画渲染结束之后才会开始下一个episode的训练,所以训练时长会比不渲染时更长。

解决方案:

最初,我以为动态地去修改env.render_mode即可,但我发现env初始化之后这个就是一个无法修改的参数

所以,你可以在初始化训练的env_train时,不添加render_mode参数(或添加除human之外的参数),然后在测试的时候,新创建一个与之前一样的env:env_test

env_test = gym.make("CartPole-v1", render_mode='human')

用新的env_test去测试就好文章来源地址https://www.toymoban.com/news/detail-426188.html

到了这里,关于OpenAI-gym 关于render无法弹出游戏窗口以及想要在训练时不渲染然后在测试时再渲染的解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包