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的次要版本之间发生变化。
方法
初始化一个(FIFO)ReplayBuffer 实例。
将一批经验或其他数据添加到此缓冲区。
使用此 Actor 实例调用给定的函数。
返回计算机的网络名称。
Ping 操作者。
从该缓冲区中采样
num_items
个项目。返回此缓冲区的统计信息。