如何设置 openai-gym 环境以特定状态而不是 `env.reset()` 开始?

Hu *_*ixi 5 reinforcement-learning python-3.x openai-gym

今天在openai-gym环境下尝试实现一个rl-agent的时候,发现一个问题,好像所有的agent都是从最初始的状态开始训练的:env.reset(),即

import gym

env = gym.make("CartPole-v0")
initial_observation = env.reset()  # <-- Note
done = False

while not done:
    action = env.action_space.sample()  
    next_observation, reward, done, info = env.step(action)

env.close()  # close the environment
Run Code Online (Sandbox Code Playgroud)

所以很自然地,代理可以沿着路线行事env.reset() -(action)-> next_state -(action)-> next_state -(action)-> ... -(action)-> done,这是一个插曲。但是,代理如何从特定状态(如中间状态)开始,然后从该状态采取行动?例如,我从重放缓冲区中采样了一个体验,即(s, a, r, ns, done),如果我想训练代理直接从 state 开始,然后ns使用 a 获取动作Q-Network,然后n-step向前迈出一步,该怎么办。类似的东西:

import gym

env = gym.make("CartPole-v0")
initial_observation = ns  # not env.reset() 
done = False

while not done:
    action = DQN(ns) 
    next_observation, reward, done, info = env.step(action)
    # n-step later or done is true, break

env.close()  # close the environment
Run Code Online (Sandbox Code Playgroud)

但即使我将变量设置initial_observationns,我认为代理或env根本不会意识到它。我怎么能告诉gym.env我想要将初始观察设置为ns并让代理知道特定的开始状态,直接从该特定观察中继续训练(从该特定环境开始)?

Pab*_* EM 6

AFAIK,大多数 OpenAI 健身房环境的当前实现(包括您在问题中使用的CartPole-v0)没有实现任何机制来在给定状态下初始化环境。

CartPoleEnv.reset()但是,为了接受充当初始状态的可选参数而修改该方法不应该太复杂。