分层环境#

注意

Ray 2.40 默认使用 RLlib 的新 API 栈。Ray 团队已基本完成将算法、示例脚本和文档迁移到新的代码库。

如果你仍在使用旧 API 栈,请参阅新 API 栈迁移指南了解如何迁移的详细信息。

你可以将分层训练实现为多智能体 RL 的一个特例。例如,考虑一个两层策略层次结构,其中顶层策略发出高级任务,这些任务由一个或多个低层策略以更精细的时间尺度执行。以下时间线显示了顶层策略的一个步骤,它对应于四个低层动作

top-level: action_0 -------------------------------------> action_1 ->
low-level: action_0 -> action_1 -> action_2 -> action_3 -> action_4 ->

或者,你可以实现一个环境,其中两种类型的智能体不是同时行动(重叠),而是低层智能体等待高层智能体发出一个动作,然后行动 n 次,之后再将控制权交还给高层智能体

top-level: action_0 -----------------------------------> action_1 ->
low-level: ---------> action_0 -> action_1 -> action_2 ------------>

你可以将这些分层动作模式中的任何一种实现为一个包含各种类型智能体(例如高层智能体和低层智能体)的多智能体环境。当使用正确的智能体到模块映射函数进行设置时,从 RLlib 的角度来看,该问题就变成了一个简单的、具有不同类型策略的独立多智能体问题。

你的配置可能如下所示

from ray.rllib.algorithms.ppo import PPOConfig

config = (
    PPOConfig()
    .multi_agent(
        policies={"top_level", "low_level"},
        policy_mapping_fn=(
            lambda aid, eps, **kw: "low_level" if aid.startswith("low_level") else "top_level"
        ),
        policies_to_train=["top_level"],
    )
)

在此设置中,任何层次级别的适当奖励应由多智能体环境实现提供。环境类还负责智能体之间的路由,例如将高层智能体的 目标 作为低层智能体观察的一部分传达给低层智能体。

请参阅 这个可运行的分层环境示例