Python Gym强化学习:如何实现每100次游戏回合渲染一次?
问题根源
你创建环境时设置了render_mode="human",这个参数会让FrozenLake-v1在每次执行step()或reset()时自动弹出渲染窗口,和你手动调用env.render()与否无关。另外代码缩进存在错误,渲染判断逻辑被放在了每一步的循环内,会导致符合条件的回合里每一步都重复触发渲染。
修复方案
- 关闭自动渲染:初始化环境时不指定
render_mode="human",让环境默认不自动弹出渲染窗口。 - 修正缩进逻辑:将“是否渲染”的判断放在外层回合循环中,确保只有第100、200...次回合才触发渲染流程。
- 按需手动渲染:在需要渲染的回合里,每执行一步就手动调用渲染方法。
修正后的代码示例
import gym EPISODES = 1000 # 初始化环境,默认关闭自动渲染 env = gym.make('FrozenLake-v1') for episode in range(EPISODES): state = env.reset() # 标记当前回合是否需要渲染(每100回合一次) render_this_episode = (episode % 100 == 0) for _ in range(100): action = env.action_space.sample() next_state, reward, done, info, _ = env.step(action) # 仅在目标回合执行渲染 if render_this_episode: env.render(mode="human") if done: break # 结束训练后关闭环境窗口,释放资源 env.close()
额外提示
- 如果你使用的是新版本Gymnasium,
step()的返回值会包含truncated参数,需调整变量接收为next_state, reward, terminated, truncated, info。 - 训练结束后务必调用
env.close(),避免残留未关闭的窗口进程。
内容的提问来源于stack exchange,提问作者Tom02
相关产品推荐
相关产品推荐

