从零使用强化学习训练AI玩儿游戏(2)——学习Gym
程序员文章站
2024-02-13 23:05:22
...
本文目前主要是写给自己的一个笔记,接下来这段时间会逐步记录我是怎么通过学习使用TensorFlow+Keras训练神经网络自己玩儿游戏,如果能间接帮助到他人就最好不过了,不喜勿喷。
上一篇把玩儿游戏的游戏给搞定了,接下来看看怎么是怎么通过代码来玩儿这个游戏的
官网上的doc详细介绍了step函数,如上图所示:step函数返回四个值
-
observation
(object): 一个环境特定的对象,代表你对环境的观察。例如,来自相机的像素数据、机器人的关节角度和关节速度,或者棋盘游戏中的棋盘状态。 -
reward
(float): 由先前行为获得的奖励。大小范围在不同的环境之间变化,但最终目标总是增加你的总奖励。 -
done
(boolean): 是否该重置环境了。大多数(但不是全部)任务被划分为明确定义的情节,并且done
是True
表明该事件已经终止。(比如,杆子倾斜太远,或者你失去了你的最后生命。) -
info
(dict): 用于调试的诊断信息。它有时可以用于学习(例如,它可能包含在环境的最后状态改变背后的原始概率)。然而,官方评估你的算法时不允许使用这个来学习。
这只是一个经典的“代理环境循环”的实现。每个时间步长,代理选择一个动作,并且环境返回观察和奖励。
# -*- coding: UTF-8 -*- if __name__ == '__main__': print('开始学习') 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
Spaces
动作是由两个从环境返回的变量表示的action_space
和observation_space他们都是space型的数据他们的数据类型是import gym
env = gym.make('CartPole-v0')
print(env.action_space)
#> Discrete(2) //这个action可以看出来是两个一左一右,因为CartPole-v0这个游戏只需要左右
print(env.observation_space)
#> Box(4,)
observation_space大小是:
print(env.observation_space.high)
#> array([ 2.4 , inf, 0.20943951, inf])
print(env.observation_space.low)
#> array([-2.4 , -inf, -0.20943951, -inf])
现在总结一下也就是说从step返回的observation
是一个我们需要传入神经网络的观测值他有可能是来自相机的像素数据、机器人的关节角度和关节速度,或者棋盘游戏中的棋盘状态。
reward
是你这个action 过后的奖励就跟error是一样的,只不过error是越小越好奖励是越大越好。
然后action 就是你需要传入step的值,也就是你通过神经网络计算过后得到的动作。
不同的游戏他的observation
和action 是不同的,具体的可以通过这个网址来查看
比如说CartPole-v0这个游戏action就是0,1代表左右observation
是[-0.02842006 -0.34569273 0.04810185 0.57496187] 一个一维数组。
这个游戏输入的就是Atari这个机器的RAM,action是从{2,3,4}中选择的。
接下来就可以搭建神经网络开始玩儿了。