The ReplayBuffer is a highly modularized interface used to represent experience replay buffers. Instead of a monolithic class, it is composed of several sub-components that you can swap out to customize your experiments:
Buffer: A list-like component (e.g., FIFOBuffer, InfiniteBuffer) that stores and drops transitions.TransitionPicker: Defines how to pick transition data, typically used for Q-learning-based algorithms.TrajectorySlicer: Defines how to slice trajectory data, typically used for Decision Transformer-based algorithms.WriterPreprocess: Defines how experiences are processed before being written to the buffer.
You can initialize a ReplayBuffer using a Gym environment, a pre-collected dataset, or by manually specifying Signature objects for observations, actions, and rewards.
import d3rlpy
import numpy as np
import gym
# Component setup
buffer = d3rlpy.dataset.FIFOBuffer(limit=100000)
transition_picker = d3rlpy.dataset.BasicTransitionPicker()
trajectory_slicer = d3rlpy.dataset.BasicTrajectorySlicer()
writer_preprocessor = d3rlpy.dataset.BasicWriterPreprocess()
# Option 1: Initialize with Gym environment
env = gym.make("Pendulum-v1")
replay_buffer = d3rlpy.dataset.ReplayBuffer(
buffer=buffer,
transition_picker=transition_picker,
trajectory_slicer=trajectory_slicer,
writer_preprocessor=writer_preprocessor,
env=env,
)
# Option 2: Initialize with pre-collected dataset
dataset, _ = d3rlpy.datasets.get_pendulum()
replay_buffer = d3rlpy.dataset.ReplayBuffer(
buffer=buffer,
transition_picker=transition_picker,
trajectory_slicer=trajectory_slicer,
writer_preprocessor=writer_preprocessor,
episodes=dataset.episodes,
)
# Option 3: Initialize with manually specified signatures
observation_signature = d3rlpy.dataset.Signature(shape=[(3,)], dtype=[np.float32])
action_signature = d3rlpy.dataset.Signature(shape=[(1,)], dtype=[np.float32])
reward_signature = d3rlpy.dataset.Signature(shape=[(1,)], dtype=[np.float32])
replay_buffer = d3rlpy.dataset.ReplayBuffer(
buffer=buffer,
transition_picker=transition_picker,
trajectory_slicer=trajectory_slicer,
writer_preprocessor=writer_preprocessor,
observation_signature=observation_signature,
action_signature=action_signature,
reward_signature=reward_signature,
)
# Shortcut for FIFO buffer
replay_buffer = d3rlpy.dataset.create_fifo_replay_buffer(limit=100000, env=env)