深度学习

增强学习(2) Q Learning

2020-07-04  本文已影响0人  zidea
MachineLearninginMarketing

Q Learning
家长都会反对小朋友一边看电视一边吃饭,不过小朋友为了抓紧时间提供效率往往会选择一边看电视一边吃饭。所以生活中有许多准则。也就是吃完饭再看电视会得到奖励反而会得到训斥。
其实根据家长反馈我们会决定是

从上面表格来看 Q(s1,a1) 小于 Q(s1,a2),所以我们选择行为 a2 是 s1 状态的行为,然后就进入到下一个状态 s2 ,同样我们可以查询在 s2 中我们行为的

同样我们需要查询 Q 表来决定我们在 s2 状态选择的行为,因为 S2 状态是我们预测出来实际上还没有到达 s2 状态。所以我们需要将在 s2 做出选择后的奖励值乘以一个衰减值r 然后加上在 s1 实实在在得到奖励值 R 也就是 R+rmaxQ(s2)
我们将 R+r
maxQ(s2) 作为现实中Q(s1,a2) 的值,在 Q 表上的值都是估计值,之前 Q(s1,a2)是我们估计出来的值。
将新的 Q(s1,a2) = 老 Q(s1,a2) + a*差距(差距是现实值减去估计值)
Q Learning 是一种 value-base 方法,学习结果是评价现在行为有多好或者有多不好,是一种增强学习的一种。
通过动手实践是最好的学习手段,

import gym

创建环境

env = gym.make("MountainCar-v0")

初始化环境

env.reset()
done = False

while not done:
    action = 2
    # volecity positon
    new_state, reward, done, _ = env.step(action)
    print(new_state)
    env.render()
env.close()

这里定义 3 个动作来操作小车,0 推动小车左移动 1 不做任何操作而 2 表示推动小车右移动。这里定义 2 表示向右给小车一个力。step 表示每一步都进行操作(action)返回 new_state 表示小车的当前状态位置和速度。打印()数据如下

[-0.3553034   0.00149003]
[-0.35402264  0.00128076]
[-0.35295955  0.00106309]
[-0.35212108  0.00083847]

我们的目标让小车通过学习达到小旗的位置。

print(env.observation_space.high)
print(env.observation_space.low)
print(env.action_space.n)

我们打印出一些与环境相关的参数。

[0.6  0.07]
[-1.2  -0.07]
3

3 表示 3 操作我们可以用到,上面已经提到了,observation_space 表示我们观察空间间隔,这里我们需要调整一下。来得到我们想要大小 Q table。

DISCRETE_OS_SIZE = [20] * len(env.observation_space.high)
discrete_os_win_size = (env.observation_space.high - env.observation_space.low) / DISCRETE_OS_SIZE

print(discrete_os_win_size)

创建 Q table

    new_state, reward, done, _ = env.step(action)
    print(reward,new_state)

如果我们输出 reward 会发现 reward 总是 -1,当我们小车达到目标时候才会得到反馈 0

(-1.0, array([-0.16686211,  0.0038182 ]))
(-1.0, array([-0.16423716,  0.00262495]))
(-1.0, array([-0.16281484,  0.00142232]))
(-1.0, array([-0.16260018,  0.00021466]))
(-1.0, array([-0.16359394, -0.00099376]))
(-1.0, array([-0.16579261, -0.00219867]))
(-1.0, array([-0.16918837, -0.00339576]))
(-1.0, array([-0.17376895, -0.00458059]))
q_table = np.random.uniform(low=-2,high=0,size=(DISCRETE_OS_SIZE + [env.action_space.n]))
(20, 20, 3)
上一篇下一篇

猜你喜欢

热点阅读