美文网首页深度学习
增强学习(2) Q Learning

增强学习(2) Q Learning

作者: zidea | 来源:发表于2020-07-04 20:51 被阅读0次
    MachineLearninginMarketing

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

    • 先吃饭看电视
    • 看电视同时吃饭
      这是两种选择,如果没有随后家长反馈,我们的选择是随意。不过随后家长反馈会影响小朋友以后决策。这也就是 QLearning。
      用数据也就是计算机能够理解来分析一下小朋友成长过程,现在吃饭(状态 s1)接下来可能有两个行为看电视(a1)还是继续吃饭(a2)。不过接下来行为会获得潜在奖励我们用 Qtable 来表示

    从上面表格来看 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)
    

    相关文章

      网友评论

        本文标题:增强学习(2) Q Learning

        本文链接:https://www.haomeiwen.com/subject/lrkwjctx.html