ray.rllib.core.models.catalog.Catalog#

class ray.rllib.core.models.catalog.Catalog(observation_space: gymnasium.Space, action_space: gymnasium.Space, model_config_dict: dict, view_requirements: dict = None)[源代码]#

基类:object

描述了在 RLModules 中使用的子模块架构。

RLlib 的原生 RLModules 从 Catalog 对象获取其模型。默认情况下,该 Catalog 将其作为属性构建配置。此组件旨在可被破解和扩展。您可以通过重写此类中的 build_xxx 方法将自定义组件注入 RL Modules。请注意,建议为单一用例编写自定义 RL Module。如果您想为不同的 RL Modules 重用相同的 Catalog,修改 Catalog 大多是有意义的。例如,如果您编写了一个自定义编码器并希望将其注入不同的 RL Modules(例如 PPO、DQN 等)。您可以通过修改 Catalog._determine_components_hook 来影响确定子组件的决策树。

使用示例:

# 定义一个自定义目录

import torch
import gymnasium as gym
from ray.rllib.core.models.configs import MLPHeadConfig
from ray.rllib.core.models.catalog import Catalog

class MyCatalog(Catalog):
    def __init__(
        self,
        observation_space: gym.Space,
        action_space: gym.Space,
        model_config_dict: dict,
    ):
        super().__init__(observation_space, action_space, model_config_dict)
        self.my_model_config = MLPHeadConfig(
            hidden_layer_dims=[64, 32],
            input_dims=[self.observation_space.shape[0]],
        )

    def build_my_head(self, framework: str):
        return self.my_model_config.build(framework=framework)

# With that, RLlib can build and use models from this catalog like this:
catalog = MyCatalog(gym.spaces.Box(0, 1), gym.spaces.Box(0, 1), {})
my_head = catalog.build_my_head(framework="torch")

# Make a call to the built model.
out = my_head(torch.Tensor([[1]]))

方法

__init__

使用默认编码器配置初始化一个目录。

build_encoder

构建编码器。

get_action_dist_cls

获取动作分布类。

get_preprocessor

返回适用于给定观测空间的合适预处理器。

get_tokenizer_config

返回给定空间的标记器配置。

属性

latent_dims

返回编码器的潜在维度。