分层环境#

您可以将分层训练实现为多智能体 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"],
    )
)

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

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