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

如何仅在测试阶段渲染Gym环境而训练阶段不渲染?

解决Gym环境仅测试阶段渲染的问题

有两种可靠的实现方式,推荐第一种:

方式1:创建两个独立环境(推荐)

训练阶段使用无渲染模式的环境,测试阶段单独初始化带render_mode='human'的环境,完全隔离训练和测试的渲染逻辑:

import gymnasium as gym
import numpy as np

# 训练用环境:不指定render_mode,无渲染
train_env = gym.make('FrozenLake-v1')

# 初始化Q表
Q = np.zeros([train_env.observation_space.n, train_env.action_space.n])
print(Q)

# 参数设置
lr = 0.8
gamma = 0.95
num_episodes = 2000

# 训练循环
for i in range(num_episodes):
    state = train_env.reset()[0]
    done = False

    while not done:
        # epsilon-greedy策略
        if np.random.uniform(0, 1) < 0.5:
            action = train_env.action_space.sample()  
        else:
            action = np.argmax(Q[state,:])  

        next_state, reward, done, _, _ = train_env.step(action)

        Q[state, action] = (1 - lr) * Q[state, action] + \
            lr * (reward + gamma * np.max(Q[next_state, :]))

        state = next_state

print(Q)

# 测试用环境:指定render_mode='human',仅测试时渲染
test_env = gym.make('FrozenLake-v1', render_mode='human')
state = test_env.reset()[0]
done = False
while not done:
    action = np.argmax(Q[state, :])
    next_state, reward, done, _, _ = test_env.step(action)
    state = next_state
    test_env.render()

# 关闭测试环境释放资源
test_env.close()

方式2:动态切换渲染模式(进阶)

如果不想创建两个环境,可以通过修改环境的render_mode属性实现,但需注意部分环境可能不支持动态修改:

import gymnasium as gym
import numpy as np

# 初始化环境时先不指定render_mode
env = gym.make('FrozenLake-v1')

# 训练逻辑和原代码一致,此处省略...

# 测试前修改render_mode为'human',并重置环境使修改生效
env.render_mode = 'human'
state = env.reset()[0]
done = False
while not done:
    action = np.argmax(Q[state, :])
    next_state, reward, done, _, _ = env.step(action)
    state = next_state
    env.render()

env.close()

关键说明

  • 方式1的优势是完全分离训练和测试环境,避免潜在的状态干扰,稳定性更高。
  • 测试完成后必须调用close()方法关闭渲染窗口,避免资源占用。

内容的提问来源于stack exchange,提问作者zhixin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:37:16