You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Gym强化学习:如何实现每100次游戏回合渲染一次?

问题根源

你创建环境时设置了render_mode="human",这个参数会让FrozenLake-v1在每次执行step()或reset()时自动弹出渲染窗口,和你手动调用env.render()与否无关。另外代码缩进存在错误,渲染判断逻辑被放在了每一步的循环内,会导致符合条件的回合里每一步都重复触发渲染。

修复方案
  1. 关闭自动渲染:初始化环境时不指定render_mode="human",让环境默认不自动弹出渲染窗口。
  2. 修正缩进逻辑:将“是否渲染”的判断放在外层回合循环中,确保只有第100、200...次回合才触发渲染流程。
  3. 按需手动渲染:在需要渲染的回合里,每执行一步就手动调用渲染方法。
修正后的代码示例
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:17:38