备注

Ray 2.10.0 引入了 RLlib 的“新 API 栈”的 alpha 阶段。Ray 团队计划将算法、示例脚本和文档迁移到新的代码库中,从而在 Ray 3.0 之前的后续小版本中逐步替换“旧 API 栈”(例如,ModelV2、Policy、RolloutWorker)。

然而,请注意,到目前为止,只有 PPO(单代理和多代理)和 SAC(仅单代理)支持“新 API 堆栈”,并且默认情况下继续使用旧 API 运行。您可以继续使用现有的自定义(旧堆栈)类。

请参阅此处 以获取有关如何使用新API堆栈的更多详细信息。

策略 API#

The Policy 类包含用于在环境中进行决策计算动作的功能,以及计算损失和梯度、更新神经网络模型以及后处理收集的环境轨迹。一个或多个 Policy 对象位于 RolloutWorkerPolicyMap 中,并且如果超过一个,则根据多智能体的 policy_mapping_fn 选择,该函数将代理ID映射到策略ID。

../../_images/policy_classes_overview.svg

RLlib 的策略类层次结构: 策略是深度学习框架特定的,因为它们持有处理计算图(例如,会话中的 TensorFlow 1.x 图)的功能。你可以通过子类化任何可用的内置类来定义自定义策略行为,具体取决于你的需求。#

备注

Ray 2.10.0 引入了 RLlib 的“新 API 栈”的 alpha 阶段。Ray 团队计划将算法、示例脚本和文档迁移到新的代码库中,从而在 Ray 3.0 之前的后续小版本中逐步替换“旧 API 栈”(例如,ModelV2、Policy、RolloutWorker)。

然而,请注意,到目前为止,只有 PPO(单代理和多代理)和 SAC(仅单代理)支持“新 API 堆栈”,并且默认情况下继续使用旧 API 运行。您可以继续使用现有的自定义(旧堆栈)类。

请参阅此处 以获取有关如何使用新API堆栈的更多详细信息。

构建自定义策略类#

警告

从 Ray >= 1.9 开始,不再推荐使用 build_policy_class()build_tf_policy() 实用函数来创建自定义策略子类。相反,请遵循这里的简单指南,直接从以下内置类型之一进行子类化:EagerTFPolicyV2TorchPolicyV2

为了创建一个自定义策略,子类化 Policy (对于一个通用的、与框架无关的策略),TorchPolicyV2 (对于一个特定于PyTorch的策略),或 EagerTFPolicyV2 (对于一个特定于TensorFlow的策略)并覆盖它们的一个或多个方法。特别是这些方法:

关于如何覆盖 TorchPolicy 的示例,请参见此处

基本策略类#

Policy

RLlib 所有策略实现的基类。

EagerTFPolicyV2

基于 TF-eager / TF2 的 TensorFlow 策略。

TorchPolicyV2

与 RLlib 一起使用的 PyTorch 特定策略类。

制作模型#

基本策略#

make_rl_module

返回 RL 模块(仅在启用 RLModule API 时)。

Torch 策略#

make_model

创建模型。

make_model_and_action_dist

创建模型和动作分布函数。

Tensorflow 策略#

make_model

构建此策略的基础模型。

推理#

基本策略#

compute_actions

计算当前策略的动作。

compute_actions_from_input_dict

计算从收集的样本(跨多个代理)中得出的动作。

compute_single_action

计算并返回一个单一(B=1)的动作值。

Torch 策略#

action_sampler_fn

给定策略,用于采样新动作的自定义函数。

action_distribution_fn

此策略的动作分布函数。

extra_action_out

返回包含在经验批次中的额外信息的字典。

Tensorflow 策略#

action_sampler_fn

给定策略,用于采样新动作的自定义函数。

action_distribution_fn

此策略的动作分布函数。

extra_action_out_fn

从 compute_actions() 中获取并返回的额外值。

计算、处理和应用梯度#

基本策略#

compute_gradients

在给定一批经验的情况下计算梯度。

apply_gradients

应用(之前)计算的梯度。

Torch 策略#

extra_compute_grad_fetches

从 compute_gradients() 中获取并返回的额外值。

extra_grad_process

在每次 optimizer.zero_grad() + loss.backward() 调用后被调用。

Tensorflow 策略#

grad_stats_fn

梯度统计函数。

compute_gradients_fn

梯度计算函数(从损失张量,使用本地优化器)。

apply_gradients_fn

梯度计算函数(从损失张量,使用本地优化器)。

extra_learn_fetches_fn

在梯度计算后要报告的额外统计数据。

更新策略的模型#

基本策略#

learn_on_batch

执行一次学习更新,基于 samples

load_batch_into_buffer

将给定的 SampleBatch 批量加载到设备的内存中。

learn_on_loaded_batch

在已经加载到缓冲区中的数据上运行一次SGD的单步操作。

learn_on_batch_from_replay_buffer

从给定的回放缓存中采样一批数据并执行更新。

get_num_samples_loaded_into_buffer

返回给定缓冲区中当前加载的样本数量。

损失, 日志记录, 优化器, 和轨迹处理#

基本策略#

loss

此策略的损失函数。

compute_log_likelihoods

计算给定动作和观察的对数概率/似然。

on_global_var_update

在全局变量更新时调用。

postprocess_trajectory

实现特定算法的轨迹后处理。

Torch 策略#

optimizer

自定义要使用的本地 PyTorch 优化器。

get_tower_stats

返回每个塔的统计列表,复制到此策略的设备中。

Tensorflow 策略#

optimizer

用于策略优化的TF优化器。

stats_fn

统计函数。

保存和恢复#

基本策略#

from_checkpoint

从给定的策略或算法检查点创建新的策略实例。

export_checkpoint

将导出策略检查点保存到本地目录并返回一个 AIR 检查点。

export_model

将策略的模型导出到本地目录以供服务。

from_state

从状态对象中恢复策略。

get_weights

返回模型权重。

set_weights

设置此策略模型的权重。

get_state

返回此策略的当前整个状态。

set_state

state 恢复此策略的当前整个状态。

import_model_from_h5

从本地文件导入策略。

连接器#

基本策略#

reset_connectors

重置此策略的操作连接器和代理连接器。

restore_connectors

如果配置可用,则恢复代理和操作连接器。

get_connector_metrics

从连接器获取时间指标。

循环策略#

基本策略#

Policy.get_initial_state

返回当前策略的初始RNN状态。

Policy.num_state_tensors

策略的RNN模型所需的内部状态数量。

Policy.is_recurrent

此策略是否持有循环模型。

杂项#

基本策略#

apply

使用此 Policy 实例调用给定的函数。

get_session

返回用于计算动作的 tf.Session 对象,或返回 None。

init_view_requirements

learn_on_batch()compute_actions 调用的最大视图需求字典。

get_host

返回计算机的网络名称。

get_exploration_state

返回此策略的探索组件的状态。

Torch 策略#

get_batch_divisibility_req

获取批处理可分性请求。

Tensorflow 策略#

variables

返回此策略中所有可保存变量的列表。

get_batch_divisibility_req

获取批处理可分性请求。