gym初级——初始gym环境(二)

    技术2022-07-10  179

    描述

    接上一篇gym初级——初始gym环境(一)

    代码

    动作空间和状态空间的数据类型

    import gym env = gym.make('CartPole-v0') print(env.action_space) print(env.observation_space)

    输出结果为

    Discrete(2) Box(4,)

    意思是动作空间中的动作是离散(Discrete)的2个动作,状态空间中的状态是4维的数组

    动作空间和状态空间的数据大小

    import gym env = gym.make('CartPole-v0') print(env.observation_space.high) print(env.observation_space.low)

    这一点我的输出和官网是不同的,我觉得这可能和python和gym版本相关,没有去纠结

    [4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38] [-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38]

    官网的是

    array([ 2.4, inf, 0.20943951, inf]) array([-2.4, -inf, -0.20943951, -inf])

    不过看到这里,我比较怀疑我上一篇的结论了,看这个数据大小,在上一篇文章我说数据是[小车速度,小车加速度,单摆角速度,单摆角加速度],这里看起来速度和加速度应该是相反的,应该是加速度在前,速度在后更合理,这个还需要后期实际开发再研究

    判断一个数据是否在动作空间和状态空间中

    我们在实际使用中,难免会遇到这种情况:我有一个数据,想判断它是否在动作空间和状态空间中

    官网的示例程序是这样的

    from gym import spaces space = spaces.Discrete(8) # 生成了一个离散空间,空间中的数是{0, 1, 2, ..., 7} x = space.sample() # 从中随机采样 assert space.contains(x) # 判断x是不是在space中 assert space.n == 8 # space的大小是不是8

    那么我们在gym里应该怎么用呢,就比较简单了

    import gym env = gym.make('CartPole-v0') assert env.action_space.contains(0) assert env.action_space.n == 2 assert env.observation_space.contains([0,0,0,0]) assert env.observation_space.shape[0] == 4
    Processed: 0.010, SQL: 9