#546·cleanrl

SumSegmentTree 使用中的错误

作者: wspurlock创建于 2026年4月15日更新于 2026年6月13日

我正在将您的 RainbowDQN 代理移植到 DeepMind 的 bsuite 仓库中,Codex 在您的 SumSegmentTree 实现/使用中发现了一个微妙的错误。我认为它是正确的! SumSegmentTree 使用具有 2 * 容量 - 1 个节点的堆索引,并将叶子放置在 idx + capacity - 1。只有在叶子个数为二进制整数时,才能保持从左向右的叶子顺序。对于非二进制整数的容量,retrieve() 会遍历一个树,其子树不再对应连续的重放索引范围,因此前缀和采样会返回错误的索引。一个最小的反例是容量为 3: 相同的优先级应将前缀质量 0.5、1.5、2.5 映射到索引 0、1、2,但当前布局无法保持这种顺序。

内容来源: vwxyzjn/cleanrl