如何在 Ray Tune (tune.run()) 中使用带火炬的 PPO 模型在 200 个步骤后结束剧集

问题描述 投票:0回答:1

我使用以下代码导入自定义环境,然后对其进行训练:


from ray.tune.registry import register_env
import ray
from ray import air, tune
from ray.rllib.algorithms.ppo import PPO

from gym_env.cube_env import CubeEnv

select_env = "2x2x2_cube-v0"
register_env(select_env, lambda config: CubeEnv())

ray.init()

tune.run(PPO, config={
   "env": "2x2x2_cube-v0",
   "framework": "torch",
   "log_level": "INFO",
   "batch_mode": "truncate_episodes",
   "rollout_fragment_length": 200
})

尽管指定了“batch_mode”:“truncate_episodes”和“rollout_fragment_length”:200,但我的剧集即使在 4000 步后也不会结束。

我还收到一条警告:“您的环境没有 .spec.max_episode_steps 属性。您的地平线将默认为无穷大,并且您的环境不会重置。”

我的随机生成环境的难度可能会有很大差异,因此如果模型在 200 步后卡住,就重新启动会更好。

我是否需要将这个“max_episode_steps”属性添加到我的环境中(如果是的话如何)或者我可以直接在tune.run()配置中设置它吗?

我尝试过使用 Ray 网站,但我找不到任何缩减,并且那里的许多可用教程都使用过时的代码。

我尝试从我能找到的不同 PPO 复制配置,例如“batch_mode”:“truncate_episodes”和“rollout_fragment_length”:200,但它们似乎没有按照我希望的方式进行操作。

reinforcement-learning ray rllib ray-tune
1个回答
0
投票

您可以将您的环境包装在gymnasium 的 TimeLimit 包装器中:参见此处

作为额外参数,您需要提供 max_episode_steps(即 200 步)。当达到该数字时,您的环境会将

truncated
函数中的
step
标志设置为 true。

所以在你的情况下是:

from gymnasium.wrappers.time_limit import TimeLimit

TimeLimit(CubeEnv(), max_episode_steps=200)

© www.soinside.com 2019 - 2024. All rights reserved.