这不是专门针对代码进行故障排除,而是帮助我了解健身房环境。我正在继承 gym.Env
来创建我自己的环境,但我很难理解流程。我浏览了文档,但仍有不清楚的问题和概念。
我还是有点迷糊,实际代理是如何知道要控制什么动作的?我知道当你 __init__
类时,你必须区分你的动作是离散的还是 Box 的,但是代理如何知道他们控制的参数是什么?
在确定 spaces.Box
命令的下限和上限时,这会告诉代理可以采用多大的步长?例如,如果我的限制是 [-1,1],他们可以在该域内实现任何大小?
我看到限制可以是[a,b], (-oo,a], [b,oo), (-oo,oo)
为限制,如果需要我的观察空间,我只用np.inf
命令?
如果有您推荐的任何文档,我们将不胜感激。
答案 0 :(得分:2)
agent 不知道 action 做了什么;这就是强化学习的用武之地。澄清一下,无论何时使用环境的 step(action)
方法,您都应该验证该操作在环境中是否有效,并以该操作为条件返回奖励和环境状态。
但是,如果您想在环境之外引用这些值,您可以这样做并控制代理可以传入的可用操作,如下所示:
import gym
env = gym.make('CartPole-v0')
actions = env.action_space.n #Number of discrete actions (2 for cartpole)
现在您可以创建一个输出形状为 2 的网络 - 使用 softmax 激活并采用最大概率来确定要采取的代理行动。
空格用于内部环境验证。例如,observation_space = spaces.Box(low=-1.0, high=1.0, shape=(1,), dtype=np.float32)
表示代理将看到的任何变量的最大值为 1,最小值为 -1。因此,您还应该在 step()
方法中使用这些以确保环境保持在这些范围内。
对于使用您的环境的其他人来说,这一步非常重要,因为他们能够一目了然地确定他们需要建立什么样的网络才能与您的环境交互。
是的。 np.inf
和 -np.inf