在使用 stable_baselines3 训练强化学习模型时,默认情况下,CartPole 环境(或其他 Gym 环境)不会显示图形界面。如果你希望在训练过程中可视化环境,可以通过以下方法实现。


方法 1:使用 render_mode 参数(Gymnasium 环境)

如果你使用的是 Gymnasium(OpenAI Gym 的维护分支),可以通过 render_mode 参数直接启用渲染:

from stable_baselines3.common.env_util import make_vec_env
import gymnasium as gym # 创建环境并启用渲染
env = make_vec_env("CartPole-v1", n_envs=1, env_kwargs={"render_mode": "human"}) # 初始化环境
obs = env.reset() # 运行一个简单的随机动作循环
for _ in range(100):
action = env.action_space.sample() # 随机选择动作
obs, reward, done, info = env.step(action) # 执行动作
env.render() # 渲染环境
if done:
obs = env.reset() # 关闭环境
env.close()

方法 2:手动调用 render() 函数

如果你使用的是标准的 Gym 环境(非 Gymnasium),可以通过手动调用 env.render() 来显示环境:

from stable_baselines3.common.env_util import make_vec_env
import gym # 创建环境
env = make_vec_env("CartPole-v1", n_envs=1) # 初始化环境
obs = env.reset() # 运行一个简单的随机动作循环
for _ in range(100):
action = env.action_space.sample() # 随机选择动作
obs, reward, done, info = env.step(action) # 执行动作
env.render() # 渲染环境
if done:
obs = env.reset() # 关闭环境
env.close()

方法 3:使用 evaluate_policy 可视化训练结果

如果你已经训练了一个模型,可以使用 stable_baselines3evaluate_policy 函数来可视化模型的表现:

from stable_baselines3 import PPO
from stable_baselines3.common.env_util import make_vec_env
from stable_baselines3.common.evaluation import evaluate_policy # 创建环境
env = make_vec_env("CartPole-v1", n_envs=1) # 加载或训练模型
model = PPO("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=10000) # 评估模型并渲染环境
mean_reward, std_reward = evaluate_policy(model, env, n_eval_episodes=10, render=True) # 关闭环境
env.close()

方法 4:使用 VecVideoRecorder 录制视频

如果你想录制环境的视频而不是实时显示,可以使用 VecVideoRecorder

from stable_baselines3.common.env_util import make_vec_env
from stable_baselines3.common.vec_env import VecVideoRecorder
import gym # 创建环境
env = make_vec_env("CartPole-v1", n_envs=1) # 包装环境以录制视频
env = VecVideoRecorder(env, "videos/", record_video_trigger=lambda x: x == 0, video_length=200) # 初始化环境
obs = env.reset() # 运行一个简单的随机动作循环
for _ in range(200):
action = env.action_space.sample() # 随机选择动作
obs, reward, done, info = env.step(action) # 执行动作
if done:
obs = env.reset() # 关闭环境
env.close()

视频将保存到 videos/ 目录中。


注意事项

  1. Gym 和 Gymnasium 的区别

    • 如果你使用的是 Gymnasium,请确保安装的是最新版本(pip install gymnasium)。
    • 如果你使用的是 Gym,请确保安装的是兼容版本(pip install gym)。
  2. 渲染性能

    • 在训练过程中实时渲染会显著降低训练速度,建议仅在测试或调试时启用渲染。
  3. 环境关闭

    • 使用完环境后,务必调用 env.close() 以释放资源。

stable_baselines3实时显示CartPole环境方法的更多相关文章

  1. Markdown中实时显示数学公式的方法

    Markdown中实时显示数学公式的方法 Markdown非常好用,但是对于数学公式的实时显示有一些缺陷,如何解决这一问题呢? 一.在线LaTex编辑 点击在线LaTeX编辑方式 在对话框中输入数学公 ...

  2. python websocket网页实时显示远程服务器日志信息

    功能:用websocket技术,在运维工具的浏览器上实时显示远程服务器上的日志信息 一般我们在运维工具部署环境的时候,需要实时展现部署过程中的信息,或者在浏览器中实时显示程序日志给开发人员看.你还在用 ...

  3. 运维开发:python websocket网页实时显示远程服务器日志信息

    功能:用websocket技术,在运维工具的浏览器上实时显示远程服务器上的日志信息 一般我们在运维工具部署环境的时候,需要实时展现部署过程中的信息,或者在浏览器中实时显示程序日志给开发人员看.你还在用 ...

  4. [linux]top命令详解-实时显示系统中各个进程的资源占用状况

    简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按 ...

  5. C#调PowerShell在SCVMM中创建虚拟机时,实时显示创建进度

    关于c#调用PowerShell来控制SCVMM,网上有很多例子,也比较简单,但创建虚拟机的过程,是一个很漫长的时间,所以一般来说,创建的时候都希望可以实时的显示当前虚拟机的创建进度.当时这个问题困扰 ...

  6. 实时显示内容(Thread+Handler)

    class LocThread extends Thread{ @Override public void run() { while (true){ try { Thread.sleep(99); ...

  7. 基于MATLAB的GUI(Graphical User Interface)音频实时显示设计

    摘要:本文章的设计主要讲基于matlab的gui音频实时显示设计,此次设计的gui相当于一个简洁的音乐播放器,界面只有”录音“和”播放“两个控件,哈哈,够简洁吧.通过”录音“按钮可以实现声音从电脑的声 ...

  8. 使用Uploadify实现上传图片生成缩略图例子,实时显示进度条

    不了解Uploadify的,先看看前一篇详细说明 http://www.cnblogs.com/XuebinDing/archive/2012/04/26/2470995.html Uploadify ...

  9. jsp实时显示后台批处理进度 - out分块,简单的长连接方式

    这两天在实现一个批处理操作,但是想让前台实时显示后台批处理进度,本想着用复杂一些的框架可以实现异步信息调用 但是鉴于是内部管理系统,且只有一两个人用到这个功能,所以做了一个简单的长连接方式的实时响应 ...

  10. iOS之UISearchBar实时显示结果

    iOS之UISearchBar实时显示结果     UISearchBar 经常是配合UITableView 一起使用的,一般都将UITableView的tableHeaderView属性设置为UIS ...

随机推荐

  1. FFmpeg开发笔记(六十八)Windows给FFmpeg集成AV1解码器libdav1d

    ​AV1是一种新兴的免费视频编码标准,它由开放媒体联盟(Alliance for Open Media,简称AOM)于2018年制定,融合了Google VP10.Mozilla Daala以及Cis ...

  2. Spring Boot 集成 ShardingSphere-JDBC 配置示例

    概述 Apache ShardingSphere‐JDBC 旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库. 关系型数据库当今依然占有巨大市场份额,是 ...

  3. 特殊恢复:oradebug推进Linux平台SCN的值

    我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效 ...

  4. MybatisPlus - CodeGenerator

    保存一下之前做系统的时候用到的生成器 先是导包 import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import ...

  5. listmap根据某字段进行合并

    public List<Map<String, Object>> mergeResult(List<Map<String, Object>> m1, L ...

  6. 多Agent协作入门:群组聊天-AgentGroupChat

    大家好,我是Edison. 近日抽空学习了下Semantic Kernel提供的AgentGroupChat对象写了一个多Agent群组对话的Demo,总结一下分享与你.当然,多Agent协作还有其他 ...

  7. QT 让信号自由飞翔(骚操作)

    简介 可以单独设定一个类目用来发送信号. 参考如下代码 code #ifndef __SINGALFATHER_H__ #define __SINGALFATHER_H__ #include < ...

  8. 如何用Roslyn干掉令人烦躁的硬编码Dbse

    .net中使用efcore作为orm的项目有很多,efcore有很多优点,特别是小型项目里使用linq操作数据库的丝滑.但是有时候我们又不得不面对一些比较恶心的名场面,比如硬编码Dbset<&g ...

  9. English-英语发音舌位唇形图

    英语发音舌位唇形图 图0 梯形图 图1 图2 图3

  10. Docker常用命令大全--九五小庞

    Docker常用命令大全,请看菜鸟教程 Docker 命令大全 | 菜鸟教程 (runoob.com)