RobotMem + Gymnasium-Robotics
为 Fetch、Shadow Hand 和 MaMuJoCo 环境提供持久化目标条件记忆 —— 检索过去达成的目标以加速学习。
快速开始
import gymnasium as gym
from robotmem import RobotMemory
mem = RobotMemory(db="gym_robotics.db")
env = gym.make("FetchPickAndPlace-v3")
obs, info = env.reset()
for step in range(1000):
# 检索过去达成类似目标的轨迹
prior = mem.recall(obs["desired_goal"], top_k=5)
action = policy.predict(obs, prior_goals=prior)
obs, reward, terminated, truncated, info = env.step(action)
# 保存每个已达成的目标及完整的观测上下文
mem.save_perception(
observation=obs["observation"],
action=action,
reward=reward,
metadata={
"achieved_goal": obs["achieved_goal"].tolist(),
"desired_goal": obs["desired_goal"].tolist(),
"is_success": info["is_success"],
"env": "FetchPickAndPlace-v3"
}
)
集成功能
Gymnasium-Robotics 由 Farama Foundation 维护,是强化学习研究中目标条件机器人环境的标准套件。它包含 Fetch 机械臂任务(到达、推动、滑动、抓取放置)、Shadow 灵巧手操作任务以及多智能体 MaMuJoCo 环境。所有这些任务都使用 GoalEnv 接口,其中每个观测包含三个组成部分:机器人的状态、已达成的目标和期望达成的目标。
RobotMem 自然地融入这一 GoalEnv 结构。每次智能体与环境交互时,RobotMem 都可以存储观测、已达成的目标以及该回合是否成功。在后续回合 —— 甚至是数天后的后续训练中 —— 智能体可以查询记忆来检索过去成功达成类似目标的状态。这是一种持久化的事后经验回放形式,其作用范围超越了单次训练会话。
关键洞察在于,目标条件任务之间共享大量结构。在 FetchReach 中到达某个位置所需的运动技能是 FetchPickAndPlace 的基础构件。在 HandManipulateBlock 中学到的手指协调能力可以迁移到 HandManipulateEgg。通过将已达成的目标及其完整观测上下文存储在 RobotMem 中,你的智能体构建了一个不断增长的"我以前到过这里,我知道什么方法有效"的知识库,并且可以无限期地持久保存。
- 目标空间检索 —— 使用期望目标向量查询记忆,找到过去成功达成类似目标的回合,为当前任务提供具体的示范数据。
- 持久化事后回放 —— 传统 HER 在训练后丢弃重标记的经验。RobotMem 永久保存它们,使事后经验能够跨训练轮次不断积累。
- 跨环境迁移 —— 通过环境元数据标记记忆,你可以过滤和检索相关任务的经验(例如,在 FetchPush 训练期间使用 FetchReach 的经验)。
- 成功过滤检索 —— 通过
is_success标志过滤查询,只检索成功的轨迹,为你的策略提供正向示范数据。 - 兼容任何算法 —— 与 SAC、TD3、PPO 或任何其他算法配合使用。RobotMem 是观测级别的附加组件,而非训练循环的替代品。
GoalEnv 记忆架构
Gymnasium-Robotics 的 GoalEnv 观测是包含 observation、achieved_goal 和 desired_goal 键的字典。RobotMem 将这三者与动作和奖励一起存储,并在目标向量上建立索引以实现高效的相似度搜索。当你使用期望目标调用 recall 时,RobotMem 返回数据库中最接近的已达成目标 —— 以及达成这些目标时的完整观测和动作上下文。
这种架构意味着你的智能体始终可以访问一组不断增长的正向示范,即使在新训练轮次的最开始也是如此。智能体不再需要从零开始随机探索,而是可以在早期阶段将动作偏向过去训练中找到成功的状态。对于像 FetchSlide 这样的稀疏奖励环境 —— 随机探索几乎永远无法到达目标 —— 这种先验知识可以大幅减少学习所需的回合数。