将 Mujoco 环境重置为给定状态

问题描述 投票:0回答:1

目标: 例如,对于 mujoco 环境(我正在使用 Metaworld)-“扫入”,我想这样做:

重置环境: 采取一些行动... sim_state = 保存当前状态 采取一些行动......

    env.seed(0)
    env.reset()
    env.step() ... several times
    sim_state = env.sim.get_state()
    img = env.render('rgb_array')
    env.step() ... several actions

然后: 重置环境

    env.seed(0)
    env.reset()
    env.sim.set_state(sim_state)
    img_loaded = env.render('rgb_array') 
    sim_state_loaded = env.sim.get_state()

我发现 sim_state_loaded 与

 env.sim.get_state()
相同,但图像 (img != img_loaded) 不一样。 我只关心设置状态后获取图像。

我已经尝试通过预先设置种子来玩耍。

有些领域使用

env.set_state(qpos, qvel)
[不是 env.sim.set_state] 将返回相同的图像观察,但使用相同的 env 对象不会呈现有效的图像/状态等。

reinforcement-learning openai-gym mujoco
1个回答
0
投票

我不熟悉元世界,但原则上在将新值写入状态向量和调用渲染函数之间需要进行一些计算(例如,运动学)。如果

set_state
render
都没有调用这些函数,这将解释您遇到的故障模式。

尝试在调用

env.step
之前先调用
render
,如果这解决了问题,您就会知道缺少什么。如果调用
step
是不可接受的(例如,因为您不想推进模拟),请寻找一种方法来调用
mj_forward
与底层
mjModel
mjData
结构。

© www.soinside.com 2019 - 2024. All rights reserved.