OpenAI Gym3

观察(Observations)

上篇博客介绍了使用OpenAI Gym的CartPole(倒立摆)的demo,如果想要在每个步骤中做出比采取随机行动更好的行动,那么实际了解行动对环境的影响可能会很好。 
环境的step 函数返回需要的信息,step 函数返回四个值observation、reward、done、info,下面是具体信息:

  • observation (object):一个与环境相关的对象描述你观察到的环境,如相机的像素信息,机器人的角速度和角加速度,棋盘游戏中的棋盘状态。
  • reward (float):先前行为获得的所有回报之和,不同环境的计算方式不 
    一,但目标总是增加自己的总回报。
  • done (boolean): 判断是否到了重新设定(reset)环境,大多数任务分为明确定义的episodes,并且完成为True表示episode已终止。
  • info (dict):用于调试的诊断信息,有时也用于学习,但正式的评价不允许使用该信息进行学习。 
    这是一个典型的agent-environment loop 的实现。每一个时间步长,Agent 都选择一个action,Environment返回一个observation和reward。 
    这里写图片描述 
    该进程通过调用reset来启动,它返回一个初始观察。 所以编写上篇博客代码的更恰当的方法是遵守完成的标志:
import gym
env = gym.make('CartPole-v0')
for i_episode in range(20):
    observation = env.reset()
    for t in range(100):
        env.render()
        print(observation)
        action = env.action_space.sample()
        observation, reward, done, info = env.step(action)
        if done:
            print("Episode finished after {} timesteps".format(t+1))
            break
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

当done 为真时,控制失败,此阶段episode 结束。可以计算每 episode 的回报就是其坚持的t+1 时间,坚持的越久回报越大,在上面算法中,agent 的行为选择是随机的,平均回报为20 左右。 
Yongqianggao

[ 0.00753165  0.8075176  -0.15841931 -1.63740717]
[ 0.023682    1.00410306 -0.19116745 -1.97497356]
Episode finished after 26 timesteps
[-0.01027234 -0.00503277  0.01774634  0.01849733]
[-0.01037299 -0.20040467  0.01811628  0.31672619]
[-0.01438109 -0.00554538  0.02445081  0.02981111]
[-0.01449199  0.18921755  0.02504703 -0.25505814]
[-0.01070764  0.38397309  0.01994587 -0.53973677]
[-0.00302818  0.57880906  0.00915113 -0.8260689 ]
[ 0.008548    0.77380468 -0.00737025 -1.11585968]
[ 0.02402409  0.9690226  -0.02968744 -1.41084543]
[ 0.04340455  1.16449982 -0.05790435 -1.71265888]
[ 0.06669454  1.36023677 -0.09215753 -2.0227866 ]
[ 0.09389928  1.55618414 -0.13261326 -2.34251638]
[ 0.12502296  1.75222707 -0.17946359 -2.67287294]
Episode finished after 12 timesteps
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

空间(Spaces)

在上面的例子中,已经从环境的动作空间中抽取随机动作。但这些行动究竟是什么呢? 每个环境都带有描述有效动作和观察结果的一级Space对象:

import gym
env = gym.make('CartPole-v0')
print(env.action_space)
#> Discrete(2)
print(env.observation_space)
#> Box(4,)      
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

离散空间允许固定范围的非负数,因此在这种情况下,有效的动作是0或1. Box空间表示一个n维框,所以有效的观察将是4个数字的数组。 也可以检查Box的范围:

print(env.observation_space.high)
#> array([ 2.4       ,         inf,  0.20943951,         inf])
print(env.observation_space.low)
#> array([-2.4       ,        -inf, -0.20943951,        -inf])
  • 1
  • 2
  • 3
  • 4

这种反省(introspection)可以帮助编写适用于许多不同环境的通用代码。Box和Discrete是最常用的空格,可以从空格进行抽样或检查属于它的内容:

from gym import spaces
space = spaces.Discrete(8) # Set with 8 elements {0, 1, 2, ..., 7}
x = space.sample()
assert space.contains(x)
assert space.n == 8
  • 1
  • 2
  • 3
  • 4
  • 5

对于CartPole-v0,其中一个操作会向左施加力,其中一个向右施加力。

环境(Environments)

gym主要目的是提供大量的暴露常见界面的环境,并进行版本控制,以便进行比较,可以查看系统提供那些环境:

from gym import envs
print(envs.registry.all())

[EnvSpec(PredictActionsCartpole-v0), EnvSpec(Asteroids-ramDeterministic-v0), EnvSpec(Asteroids-ramDeterministic-v3), EnvSpec(Gopher-ramDeterministic-v3), EnvSpec(Gopher-ramDeterministic-v0), EnvSpec(DoubleDunk-ramDeterministic-v3), EnvSpec(DoubleDunk-ramDeterministic-v0), EnvSpec(Tennis-ramNoFrameskip-v3), EnvSpec(RoadRunner-ramDeterministic-v0), EnvSpec(Robotank-ram-v3), EnvSpec(CartPole-v0), EnvSpec(CartPole-v1), EnvSpec(Gopher-ram-v3), EnvSpec(Gopher-ram-v0)...
  • 1
  • 2
  • 3
  • 4

观察(Observations)

上篇博客介绍了使用OpenAI Gym的CartPole(倒立摆)的demo,如果想要在每个步骤中做出比采取随机行动更好的行动,那么实际了解行动对环境的影响可能会很好。 
环境的step 函数返回需要的信息,step 函数返回四个值observation、reward、done、info,下面是具体信息:

  • observation (object):一个与环境相关的对象描述你观察到的环境,如相机的像素信息,机器人的角速度和角加速度,棋盘游戏中的棋盘状态。
  • reward (float):先前行为获得的所有回报之和,不同环境的计算方式不 
    一,但目标总是增加自己的总回报。
  • done (boolean): 判断是否到了重新设定(reset)环境,大多数任务分为明确定义的episodes,并且完成为True表示episode已终止。
  • info (dict):用于调试的诊断信息,有时也用于学习,但正式的评价不允许使用该信息进行学习。 
    这是一个典型的agent-environment loop 的实现。每一个时间步长,Agent 都选择一个action,Environment返回一个observation和reward。 
    这里写图片描述 
    该进程通过调用reset来启动,它返回一个初始观察。 所以编写上篇博客代码的更恰当的方法是遵守完成的标志:
import gym
env = gym.make('CartPole-v0')
for i_episode in range(20):
    observation = env.reset()
    for t in range(100):
        env.render()
        print(observation)
        action = env.action_space.sample()
        observation, reward, done, info = env.step(action)
        if done:
            print("Episode finished after {} timesteps".format(t+1))
            break
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

当done 为真时,控制失败,此阶段episode 结束。可以计算每 episode 的回报就是其坚持的t+1 时间,坚持的越久回报越大,在上面算法中,agent 的行为选择是随机的,平均回报为20 左右。 
Yongqianggao

[ 0.00753165  0.8075176  -0.15841931 -1.63740717]
[ 0.023682    1.00410306 -0.19116745 -1.97497356]
Episode finished after 26 timesteps
[-0.01027234 -0.00503277  0.01774634  0.01849733]
[-0.01037299 -0.20040467  0.01811628  0.31672619]
[-0.01438109 -0.00554538  0.02445081  0.02981111]
[-0.01449199  0.18921755  0.02504703 -0.25505814]
[-0.01070764  0.38397309  0.01994587 -0.53973677]
[-0.00302818  0.57880906  0.00915113 -0.8260689 ]
[ 0.008548    0.77380468 -0.00737025 -1.11585968]
[ 0.02402409  0.9690226  -0.02968744 -1.41084543]
[ 0.04340455  1.16449982 -0.05790435 -1.71265888]
[ 0.06669454  1.36023677 -0.09215753 -2.0227866 ]
[ 0.09389928  1.55618414 -0.13261326 -2.34251638]
[ 0.12502296  1.75222707 -0.17946359 -2.67287294]
Episode finished after 12 timesteps
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

空间(Spaces)

在上面的例子中,已经从环境的动作空间中抽取随机动作。但这些行动究竟是什么呢? 每个环境都带有描述有效动作和观察结果的一级Space对象:

import gym
env = gym.make('CartPole-v0')
print(env.action_space)
#> Discrete(2)
print(env.observation_space)
#> Box(4,)      
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

离散空间允许固定范围的非负数,因此在这种情况下,有效的动作是0或1. Box空间表示一个n维框,所以有效的观察将是4个数字的数组。 也可以检查Box的范围:

print(env.observation_space.high)
#> array([ 2.4       ,         inf,  0.20943951,         inf])
print(env.observation_space.low)
#> array([-2.4       ,        -inf, -0.20943951,        -inf])
  • 1
  • 2
  • 3
  • 4

这种反省(introspection)可以帮助编写适用于许多不同环境的通用代码。Box和Discrete是最常用的空格,可以从空格进行抽样或检查属于它的内容:

from gym import spaces
space = spaces.Discrete(8) # Set with 8 elements {0, 1, 2, ..., 7}
x = space.sample()
assert space.contains(x)
assert space.n == 8
  • 1
  • 2
  • 3
  • 4
  • 5

对于CartPole-v0,其中一个操作会向左施加力,其中一个向右施加力。

环境(Environments)

gym主要目的是提供大量的暴露常见界面的环境,并进行版本控制,以便进行比较,可以查看系统提供那些环境:

from gym import envs
print(envs.registry.all())

[EnvSpec(PredictActionsCartpole-v0), EnvSpec(Asteroids-ramDeterministic-v0), EnvSpec(Asteroids-ramDeterministic-v3), EnvSpec(Gopher-ramDeterministic-v3), EnvSpec(Gopher-ramDeterministic-v0), EnvSpec(DoubleDunk-ramDeterministic-v3), EnvSpec(DoubleDunk-ramDeterministic-v0), EnvSpec(Tennis-ramNoFrameskip-v3), EnvSpec(RoadRunner-ramDeterministic-v0), EnvSpec(Robotank-ram-v3), EnvSpec(CartPole-v0), EnvSpec(CartPole-v1), EnvSpec(Gopher-ram-v3), EnvSpec(Gopher-ram-v0)...
  • 1
  • 2
  • 3
  • 4

猜你喜欢

转载自blog.csdn.net/duanyajun987/article/details/78609288