• 强化学习之Q-learning ^_^


    许久没有更新重新拾起,献于小白

    这次介绍的是强化学习  Q-learning,Q-learning也是离线学习的一种

    关于Q-learning的算法详情看 传送门

    下文中我们会用openai gym来做演示

     简要

    q-learning的伪代码先看这部分,很重要

    简单的算法语言描述就是

    开始执行任务:

      随机选择一个初始动作

      执行这些动作

      若未达到目标状态,则执行一下几步

        在当前状态s所有可能的行为中选择一个a

        利用a得到下一个状态s_

        计算Q(s,a) (对当前的行为进行学习)

        下一个状态等于当前状态

        开始下一个循环

    有重要的几个参数,GAMMA(gamma 是对未来 reward(分数) 的衰减值),ALPHA(学习率),EPSILON(策略)

    GAMMA是什么意思呢,就是对获取过的奖励为了防止再次获取后得到的分数一样,于是对reward进行一个衰减,这样就会有长远的眼光,机器人就不只专注于眼前的奖励了

    EPSILON 是一种策略,0.8代表的意思就是我们有80%的概率来选择之前的经验剩下的20%的概率来进行新的探索

    游戏开始

    首先我们初始化环境

    import numpy as np
    import gym
    
    GAME = 'FrozenLake-v0'
    env = gym.make(GAME)
    
    MAX_STEPS=env.spec.timestep_limit
    EPSILON=0.8
    GAMMA=0.8
    ALPHA=0.01
    q_table=np.zeros([16,4],dtype=np.float32)

    q_table就是Q-Learning的Q表了,里面有所有我们进行学习的经验,程序的动作选择都是从Q表中选择

    def action_choise(obervation):
        if np.random.uniform()<EPSILON:
            action=np.argmax(q_table[obervation])
        else:
            action=env.action_space.sample()
        return action

    上面代码为策略选择,80%的概率总Q表中选择最优策略,20%的概率进行随机操作

    def learn(state,action,reward,obervation):
        q_table[state][action]+=ALPHA*(reward+GAMMA*max(q_table[obervation])-q_table[state,action])

    此部分为学习部分,重要部分用红线标示出来了

    Q表的更新方式为   学习率 * (真实值 - 预测值)  将判断误差传递回去 以此来进行学习

     对应算法部位为

    GAME OVER

    以上就是Q-learning的简单介绍

    下面是全部的代码

     1 import numpy as np
     2 import gym
     3 
     4 GAME = 'FrozenLake-v0'
     5 env = gym.make(GAME)
     6 
     7 MAX_STEPS=env.spec.timestep_limit
     8 EPSILON=0.8
     9 GAMMA=0.8
    10 ALPHA=0.01
    11 q_table=np.zeros([16,4],dtype=np.float32)
    12 
    13 def action_choise(obervation):
    14     if np.random.uniform()<EPSILON:
    15         action=np.argmax(q_table[obervation])
    16     else:
    17         action=env.action_space.sample()
    18     return action
    19 
    20 def learn(state,action,reward,obervation):
    21     q_table[state][action]+=ALPHA*(reward+GAMMA*max(q_table[obervation])-q_table[state,action])
    22 
    23 
    24 SCORE=0
    25 for exp in xrange(10000):
    26     obervation=env.reset()
    27     EPSILON+=0.001
    28     for i in xrange(MAX_STEPS):
    29         # env.render()
    30         action=action_choise(obervation)          #动作选择
    31         obervation_,reward,done,info=env.step(action)    #学习
    32         SCORE+=reward
    33         if reward==0:
    34             if done:
    35                 reward=-1
    36             else:
    37                 reward=-0.001
    38         learn(obervation,action,reward,obervation_)
    39         obervation=obervation_
    40         if done:
    41             break
    42     print 'esp,score (%d,%d)'%(exp,SCORE)
    43 print 'score is %d'%SCORE

    大家把Q表的信息打印出来,断点执行一下,相信会对Q-learning有更深入的了解

    欢迎大家一起学习共同提高,

    独乐乐不如众乐乐 ^_^

  • 相关阅读:
    uwsgi 的启动停止重启
    项目部署(Python3 + ubuntu 16.04(ali server) + Nginx + uWSGI + Django 1.11)
    阿里云连接上Mysql数据库(10061 errors)
    本地数据库上传到阿里云Mysql
    Django 用户的修改密码接口
    django 的忘记密码接口
    Git光速入门
    缓存问题:一致性、穿击、穿透、雪崩、污染
    redis进阶-高可用:主从复制详解
    Redis分片技术(Redis Cluster)
  • 原文地址:https://www.cnblogs.com/lonenysky/p/8258528.html
Copyright © 2020-2023  润新知