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

如何在Google Colab中渲染OpenAI Gym环境?

我之前在Colab里折腾OpenAI Gym环境渲染的时候,也碰到过一模一样的棘手问题!毕竟Colab的Notebook跑在远程服务器上,没法直接弹出本地的图形窗口,普通Jupyter里的渲染方案确实完全不适用。给你几个我亲测有效的解决办法,按需求选就行:

方案1:实时渲染RGB帧(用Matplotlib刷新显示)

这个办法适合需要实时看环境运行状态的场景,核心思路是让Gym输出环境的RGB数组帧,再用Matplotlib不断刷新显示:

  1. 先安装依赖包:
!pip install gym[classic_control] matplotlib
  1. 然后写代码的时候,初始化环境时指定render_mode='rgb_array',每一步获取帧并刷新显示:
import matplotlib.pyplot as plt
import gym
from IPython.display import clear_output
%matplotlib inline

# 初始化环境,指定输出RGB帧
env = gym.make("CartPole-v1", render_mode="rgb_array")
observation, info = env.reset()

for _ in range(100):
    # 随机选动作(你可以替换成自己的策略)
    action = env.action_space.sample()
    observation, reward, terminated, truncated, info = env.step(action)
    
    # 显示当前帧
    clear_output(wait=True)
    plt.imshow(env.render())
    plt.axis('off')
    plt.show()
    
    if terminated or truncated:
        observation, info = env.reset()

env.close()

这里的clear_output(wait=True)是关键,能让Matplotlib在Colab里实时刷新画面,不会堆积显示所有帧。

方案2:录制环境运行视频,事后播放

如果不需要实时看,只是想验证环境运行效果,录制视频是更高效的选择,还能保存下来:

  1. 安装依赖:
!pip install gym[classic_control] moviepy
  1. 用gym.wrappers.RecordVideo包装环境,运行后播放视频:
import gym
from gym.wrappers import RecordVideo
from IPython.display import Video

# 创建环境并包装录制器
env = gym.make("CartPole-v1", render_mode="rgb_array")
env = RecordVideo(env, video_folder="./gym_videos", name_prefix="cartpole_run")

observation, info = env.reset()
for _ in range(100):
    action = env.action_space.sample()
    observation, reward, terminated, truncated, info = env.step(action)
    
    if terminated or truncated:
        break

env.close()

# 在Colab里播放录制好的视频
Video("./gym_videos/cartpole_run.mp4")

运行完后,视频会存在Colab的文件目录里,也可以下载到本地查看。

方案3:用虚拟显示器模拟本地渲染环境

如果有些老版本的Gym环境不支持rgb_array模式,可以用虚拟显示器来模拟本地显示环境:

  1. 安装虚拟显示依赖:
!apt-get install -y xvfb python-opengl
!pip install pyvirtualdisplay
  1. 启动虚拟显示器后再运行环境:
from pyvirtualdisplay import Display
import gym
import matplotlib.pyplot as plt
from IPython.display import clear_output
%matplotlib inline

# 启动虚拟显示器
display = Display(visible=0, size=(1400, 900))
display.start()

# 现在可以用普通的render_mode='human',实际渲染到虚拟显示器
env = gym.make("CartPole-v1", render_mode="human")
observation, info = env.reset()

for _ in range(100):
    action = env.action_space.sample()
    observation, reward, terminated, truncated, info = env.step(action)
    
    # 从虚拟显示器获取帧并显示
    clear_output(wait=True)
    plt.imshow(env.render())
    plt.axis('off')
    plt.show()
    
    if terminated or truncated:
        observation, info = env.reset()

env.close()
display.stop()

这几个方案我都在Colab里试过,基本能覆盖大部分Gym环境的渲染需求,你可以根据自己的场景选最合适的!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:53:00