基于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
相关产品推荐
相关产品推荐

