ray.rllib.utils.replay_buffers.replay_buffer.ReplayBuffer#

class ray.rllib.utils.replay_buffers.replay_buffer.ReplayBuffer(capacity: int = 10000, storage_unit: str | StorageUnit = 'timesteps', **kwargs)[源代码]#

基类:ReplayBufferInterface, FaultAwareApply

RLlib 使用的最低级别重放缓冲区接口。

此类实现了一个具有随机采样的基本环形缓冲区。ReplayBuffer 是高级类型的基类,这些高级类型通过继承添加功能,同时保持兼容性。

以下示例展示了缓冲区在不同存储单元和容量下的行为。尽管其他缓冲区可能没有实现所有存储单元,但它们的行为通常与此类似。

示例:

from ray.rllib.utils.replay_buffers.replay_buffer import ReplayBuffer
from ray.rllib.utils.replay_buffers.replay_buffer import StorageUnit
from ray.rllib.policy.sample_batch import SampleBatch

# Store any batch as a whole
buffer = ReplayBuffer(capacity=10, storage_unit=StorageUnit.FRAGMENTS)
buffer.add(SampleBatch({"a": [1], "b": [2, 3, 4]}))
buffer.sample(1)

# Store only complete episodes
buffer = ReplayBuffer(capacity=10,
                        storage_unit=StorageUnit.EPISODES)
buffer.add(SampleBatch({"c": [1, 2, 3, 4],
                        SampleBatch.T: [0, 1, 0, 1],
                        SampleBatch.TERMINATEDS: [False, True, False, True],
                        SampleBatch.EPS_ID: [0, 0, 1, 1]}))
buffer.sample(1)

# Store single timesteps
buffer = ReplayBuffer(capacity=2, storage_unit=StorageUnit.TIMESTEPS)
buffer.add(SampleBatch({"a": [1, 2], SampleBatch.T: [0, 1]}))
buffer.sample(1)

buffer.add(SampleBatch({"a": [3], SampleBatch.T: [2]}))
print(buffer._eviction_started)
buffer.sample(1)

buffer = ReplayBuffer(capacity=10, storage_unit=StorageUnit.SEQUENCES)
buffer.add(SampleBatch({"c": [1, 2, 3], SampleBatch.SEQ_LENS: [1, 2]}))
buffer.sample(1)
True

True 不是上述测试代码的输出,而是 sphinx doctests 意外行为的产物。(参见 ray-project/ray#32477

开发者API: 此API可能会在Ray的次要版本之间发生变化。

方法

__init__

初始化一个(FIFO)ReplayBuffer 实例。

add

将一批经验或其他数据添加到此缓冲区。

apply

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

get_host

返回计算机的网络名称。

ping

Ping 操作者。

sample

从该缓冲区中采样 num_items 个项目。

stats

返回此缓冲区的统计信息。