我目前正在实施强化学习算法,并想尝试将数据获取和培训分开。现在,我设置并处理运行代理的过程,收集数据并将其存储到重播缓冲区中。现在,另一个过程需要访问此重播缓冲区以训练样本。那就是我被卡住的地方,因为我不知道如何从第二个进程访问该缓冲对象。
由于我以前从未真正使用过多处理,因此我不确定哪种方法适合我的问题以及如何实现它。我必须使用管理器还是必须使用多处理数组编写另一个ReplayBuffer?
下面是我当前使用的ReplayBuffer类:
class ReplayBuffer:
def __init__(self, capacity):
self.capacity = capacity
self.buffer = []
self.position = 0
def store(self, state, action, reward, next_state, done):
if len(self.buffer) < self.capacity:
self.buffer.append(None)
self.buffer[self.position] = (state, action, reward, next_state, done)
self.position = (self.position + 1) % self.capacity
def sample(self, batch_size):
batch = random.sample(self.buffer, batch_size)
state, action, reward, next_state, done = map(np.stack, zip(*batch))
return state, action, reward, next_state, done
def __len__(self):
return len(self.buffer)
希望任何人都可以给我一些建议。