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

在RLlib中注册Gym环境时如何传入可选参数

解决方法

RLlib 提供了官方的自定义环境传参通道,按以下步骤操作即可:

1. 正确注册环境

注册时直接将回调接收的config参数透传给你的自定义环境即可,不需要在注册环节硬编码参数:

# start Ray -- add `local_mode=True` here for debugging
ray.init(ignore_reinit_error=True)

# register the custom environment
select_env = "example-v0"
register_env(select_env, lambda config: Example_v0(**config))

这里回调函数接收的config参数,就是你后续在训练配置中定义的env_config字典,直接解包传入环境构造函数即可。

2. 训练配置中传入自定义参数

在构造训练配置时,通过env_config字段传入所有你需要的环境参数即可,不需要重复注册环境:

RLlib 2.x 版本写法(推荐)

from ray.rllib.algorithms.ppo import PPOConfig

config = (
    PPOConfig()
    .environment(
        env=select_env,
        # 此处传入所有自定义环境参数
        env_config={
            "optional_arg": 10,
            "another_param": "custom_value",
            "max_episode_steps": 500
        }
    )
    # 其他训练配置省略,例如资源、算法超参等
    .resources(num_gpus=0)
    .rollouts(num_rollout_workers=2)
)

# 初始化算法开始训练
algo = config.build()
for _ in range(10):
    train_result = algo.train()
    print(f"episode reward mean: {train_result['episode_reward_mean']}")

旧版字典配置写法

config = {
    "env": select_env,
    "env_config": {
        "optional_arg": 10,
        "another_param": "custom_value"
    },
    # 其他训练参数
    "num_workers": 2,
    "framework": "torch",
    "lr": 5e-4
}

# 初始化算法
agent = ppo.PPO(config=config)

原写法失效的常见原因

如果你是在循环中动态修改n的值来生成不同参数的环境,Python的lambda闭包存在延迟绑定特性,所有lambda实例都会捕获最后一次迭代的n值,导致参数不生效,用官方提供的env_config传参方案可以完全规避这个问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 00:45:00