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

基于RL Zoo为Stable Baselines3自定义Gym环境调优超参数

自定义Gym环境PPO超参数调优指南

问题背景

我开发了一个自定义Gym环境,使用Stable Baselines3的PPO算法训练,但智能体始终陷在局部最优,训练资源消耗大,参数设置合理性存疑。参考官方超参数调优文档后操作遇阻,具体问题如下:

核心疑问

  • 文档提到用Optuna做优化,但未说明是否需要提前安装?
  • 我参照示例执行了训练命令,但感觉只是在常规训练,没有触发超参数调优。怀疑是未注册自定义环境、未安装Optuna导致,但程序仍能运行。

我使用的训练命令

python mobile_robot_scripts/train_youbot_camera.py --algo ppo --env youbotCamGymEnv -n 10000 --n-trials 1000 --n-jobs 2 --sampler tpe --pruner median

我的基础训练代码

#add parent dir to find package. Only needed for source code build, pip install doesn't need it.
import os, inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(os.path.dirname(currentdir))
os.sys.path.insert(0, parentdir)

from youbotCamGymEnv import youbotCamGymEnv
import datetime
from stable_baselines3 import ppo
from stable_baselines3.common.env_checker import check_env 

def main():  

  env = youbotCamGymEnv(renders=False, isDiscrete=False)
# It will check your custom environment and output additional warnings if needed
  check_env(env)

  model = ppo.PPO("CnnPolicy", env, verbose=1)
  model.learn(total_timesteps = 50000)
  print("############Training completed################")
  model.save(os.path.join(currentdir,"youbot_camera_trajectory"))
  
  # del model

  # env = youbotCamGymEnv(renders=True, isDiscrete=False)
  model = ppo.PPO.load(os.path.join(currentdir,"youbot_camera_trajectory"))
  # obs = env.reset()

  # for i in range(1000):
  #     action, _states = model.predict(obs, deterministic=True)
  #     obs, reward, done, info = env.step(action)
  #     # print("reward is ", reward)
  #     env.render(mode='human')
  #     if done:
  #       obs = env.reset()

  # env.close()

if __name__ == '__main__':
  main()

解决方案

1. 必须安装Optuna

Stable Baselines3 Zoo的超参数调优功能完全依赖Optuna,未安装时调参逻辑不会触发,程序只会执行常规训练。安装命令:

pip install optuna

2. 注册自定义Gym环境

注册环境是调参脚本识别环境的必要条件(仅实例化环境无法让调参流程读取到环境),注册方法如下:
在你的环境模块youbotCamGymEnv.py中添加注册代码:

from gymnasium import register

register(
    id='youbotCamGymEnv-v0',  # 自定义环境ID,建议添加版本号便于管理
    entry_point='youbotCamGymEnv:youbotCamGymEnv',  # 格式为「模块名:环境类名」
    # 可选:设置环境默认参数,比如默认render_mode等
)

确保环境模块能被Python识别,可通过PYTHONPATH指定路径:

PYTHONPATH=/path/to/your/environment/directory python mobile_robot_scripts/train_youbot_camera.py [其他参数]

3. 修正调参命令

你的命令缺少核心触发参数--optimize,这是启动超参数搜索的关键开关。正确命令如下:

PYTHONPATH=/path/to/your/env/dir python mobile_robot_scripts/train_youbot_camera.py --algo ppo --env youbotCamGymEnv-v0 -n 10000 --optimize --n-trials 1000 --n-jobs 2 --sampler tpe --pruner median

注意:命令中需使用注册好的环境ID(如youbotCamGymEnv-v0),而非直接使用类名。

4. 自定义超参数搜索空间(可选)

如果默认PPO参数范围不匹配你的环境需求,可自定义搜索空间。示例代码如下:

from stable_baselines3_zoo.utils import hyperparams_opt

def sample_ppo_custom_params(trial):
    return {
        "learning_rate": trial.suggest_float("learning_rate", 1e-5, 1e-3, log=True),
        "n_steps": trial.suggest_categorical("n_steps", [128, 256, 512, 1024]),
        "batch_size": trial.suggest_categorical("batch_size", [32, 64, 128]),
        "gamma": trial.suggest_float("gamma", 0.9, 0.9999, log=True),
        "gae_lambda": trial.suggest_float("gae_lambda", 0.9, 0.99),
        # 根据你的环境需求添加更多参数
    }

# 启动自定义搜索
hyperparams_opt.optimize_agent(
    algo="ppo",
    env_id="youbotCamGymEnv-v0",
    n_trials=1000,
    n_jobs=2,
    sampler="tpe",
    pruner="median",
    sample_kwargs=sample_ppo_custom_params,
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:02:52