一些说明、参阅

https://github.com/MorvanZhou/Reinforcement-learning-with-tensorflow/blob/master/contents/1_command_line_reinforcement_learning/treasure_on_right.py

https://github.com/simoninithomas/Deep_reinforcement_learning_Course/blob/master/Q%20learning/FrozenLake/Q%20Learning%20with%20FrozenLake.ipynb

https://www.cnblogs.com/hhh5460/p/10134018.html

http://baijiahao.baidu.com/s?id=1597978859962737001&wfr=spider&for=pc

https://www.jianshu.com/p/29db50000e3f

问题提出

为了实现自走的路径,并尽量避免障碍,设计一个路径。

如图所示,当机器人在图中的任意网格中时,怎样让它明白周围环境,最终到达目标位置。

这里给出一个运行结果:

首先给他们编号如下:作为位置的标识。

然后利用Q-Learning的奖赏机制,完成数据表单更新,最终更新如下:

在机器人实际选择路径时,按照该表中的最大值选择,最终走到24号位置,并避开了红色方块。

如初始位置在4时候,首先选择了最大值向左到3,然后在3处选择了最大值向下,然后到8处选择了向下,等等,最终完成路径的选择。而这种选择正是使用Q-Learning实现的。

Q-learning的想法

奖赏机制

在一个陌生的环境中,机器人首先的方向是随机选择的,当它从起点开始出发时,选择了各种各样的方法,完成路径。

但是在机器人碰到红色方块后,给予惩罚,则经过多次后,机器人会避开惩罚位置。

当机器人碰到蓝色方块时,给予奖赏,经过多次后,机器人倾向于跑向蓝色方块的位置。

具体公式

完成奖赏和惩罚的过程表达,就是用值表示吧。

首先建立的表是空表的,就是说,如下这样的表是空的,所有值都为0:

在每次行动后,根据奖惩情况,更新该表,完成学习过程。在实现过程中,将奖惩情况也编制成一张表。表格式如上图类似。

而奖惩更新公式为:

贝尔曼方程:

其中的表示当前的Q表,就是上图25行4列的表单。表示学习率,表示下一次行为会得到的奖惩情况,表示一个贪婪系数,在这里的公式中,就是说,如果它的数值比较大,则更倾向于对远方的未来奖赏。

(该式子在很多网页文本中并没有固定的格式,如贪婪系数,在有些时候是随着步数的增加而递减的(可能)。

推荐阅读:

https://www.jianshu.com/p/29db50000e3f

等,其中包括了更新Q表中的一些过程。

代码实现-准备过程

不得不说的是该代码参阅了:https://github.com/MorvanZhou/Reinforcement-learning-with-tensorflow/blob/master/contents/1_command_line_reinforcement_learning/treasure_on_right.py

他的代码讲解:https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/2-1-general-rl/

他设计了一种方案实现了机器人在一维空间中如何移动,但是不涉及障碍物的问题,并使用了较高的编程能力,有显示路径过程。

而本文侧重于如何表示出路径,完成思路示例。

导入对应的库函数,并建立问题模型:

import numpy as np
import pandas as pd
import time

N_STATES = 25   # the length of the 2 dimensional world
ACTIONS = ['left', 'right','up','down']     # available actions
EPSILON = 0.3   # greedy police
ALPHA = 0.8     # learning rate
GAMMA = 0.9    # discount factor
MAX_EPISODES = 100   # maximum episodes
FRESH_TIME = 0.00001    # fresh time for one move

创建Q表的函数:

def build_q_table(n_states, actions):table = pd.DataFrame(np.zeros((n_states, len(actions))),     # q_table initial valuescolumns=actions,    # actions's name)return table

行为选择的函数:

行为选择过程中,使用这样长的表示也就是为了表达:在边界时候,机器人的路径有些不能选的,要不就超出索引的表格了。。

当贪婪系数更小时,更倾向于使用随机方案,或者当表初始时所有数据都为0,则使用随机方案进行行为选择。

当np.random.uniform()< =EPSILON时,则使用已经选择过的最优方案完成Qlearning的行为选择,也就是说,机器人并不会对远方的未知目标表示贪婪。(这里的表达是和上述公式的贪婪系数大小的作用是相反过来的)

def choose_action(state, q_table):state_actions = q_table.iloc[state, :]if (np.random.uniform() > EPSILON) or ((state_actions == 0).all()):  # act non-greedy or state-action have no valueif state==0:action_name=np.random.choice(['right','down'])elif state>0 and state<4:action_name=np.random.choice(['right','down','left'])elif state==4:action_name=np.random.choice(['left','down'])elif state==5 or state==15 or state==10 :action_name=np.random.choice(['right','up','down'])elif state==9 or state==14 or state==19 :action_name=np.random.choice(['left','up','down'])elif state==20:action_name=np.random.choice(['right','up'])elif state>20 and state<24:    action_name=np.random.choice(['right','up','left'])elif state==24:action_name=np.random.choice(['left','up'])else:action_name=np.random.choice(ACTIONS)else:   # act greedyaction_name = state_actions.idxmax()    # replace argmax to idxmax as argmax means a different function in newer version of pandasreturn action_name

奖赏表达:

函数中参数S,表示state(状态),a表示action(行为),行为0到3分别表示左右上下。该表中,给出了在当前状态下,下一个方向会导致的奖惩情况。

def get_init_feedback_table(S,a):tab=np.ones((25,4))tab[8][1]=-10;tab[4][3]=-10;tab[14][2]=-10tab[11][1]=-10;tab[13][0]=-10;tab[7][3]=-10;tab[17][2]=-10tab[16][0]=-10;tab[20][2]=-10;tab[10][3]=-10;tab[18][0]=-10;tab[16][1]=-10;tab[22][2]=-10;tab[12][3]=-10tab[23][1]=50;tab[19][3]=50return tab[S,a]

获取奖惩:

该函数调用了上一个奖惩表示的函数,获得奖惩信息,其中的参数S,A,同上。

当状态S,A符合了下一步获得最终的结果时,则结束(终止),表示完成了目标任务。否则更新位置S

def get_env_feedback(S, A):action={'left':0,'right':1,'up':2,'down':3};R=get_init_feedback_table(S,action[A])if (S==19 and action[A]==3) or (S==23 and action[A]==1):S = 'terminal'return S,Rif action[A]==0:S-=1elif action[A]==1:S+=1elif action[A]==2:S-=5else:S+=5  return S, R

代码实现-开始训练

首先初始化Q表,然后设定初始路径就是在0位置(也就是说每次机器人,从位置0开始出发)

训练迭代次数MAX_EPISODES已经在之前设置。

在每一代的训练过程中,选择行为(随机或者使用Q表原有),然后根据选择的行为和当前的位置,获得奖惩情况:S_, R

当没有即将发生的行为不会到达最终目的地时候,使用:

q_target = R + GAMMA * q_table.iloc[S_, :].max()
q_table.loc[S, A] += ALPHA * (q_target - q_table.loc[S, A])

 这两行完成q表的更新。(对照贝尔曼方程)

当完成时候,即终止,开始下一代的训练。

def rl():# main part of RL loopq_table = build_q_table(N_STATES, ACTIONS)for episode in range(MAX_EPISODES):S = 0is_terminated = Falsewhile not is_terminated:A = choose_action(S, q_table)S_, R = get_env_feedback(S, A)  # take action & get next state and rewardif S_ != 'terminal':q_target = R + GAMMA * q_table.iloc[S_, :].max()   # next state is not terminalelse:print(1)q_target = R     # next state is terminalis_terminated = True    # terminate this episodeq_table.loc[S, A] += ALPHA * (q_target - q_table.loc[S, A])  # updateS = S_  # move to next statereturn q_tableif __name__ == "__main__":q_table = rl()print('\r\nQ-table:\n')print(q_table)

效果-总结

效果其实和开头一样,调整合适的参数,最终输出的q表自然有对应的影响。

明显可以得到的是,贪婪系数会影响训练时间等。

所有代码就是以上。可以使用eclipse的pydev下进行运行,调试。并观察没一步对表格的影响

转载于:https://www.cnblogs.com/bai2018/p/11517584.html

增强学习Q-learning分析与演示(入门)相关推荐

  1. AI之FL:联邦学习(Federated Learning)的简介、入门、应用之详细攻略

    AI之FL:联邦学习(Federated Learning)的简介.入门.应用之详细攻略 导读       2019 年2 月,微众银行 AI 团队自主研发的全球首个工业级联邦学习框架 FATE(Fe ...

  2. 增强学习(五)----- 时间差分学习(Q learning, Sarsa learning)

    接下来我们回顾一下动态规划算法(DP)和蒙特卡罗方法(MC)的特点,对于动态规划算法有如下特性: 需要环境模型,即状态转移概率PsaPsa 状态值函数的估计是自举的(bootstrapping),即当 ...

  3. 增强学习Reinforcement Learning经典算法梳理2:蒙特卡洛方法

    1 前言 在上一篇文章中,我们介绍了基于Bellman方程而得到的Policy Iteration和Value Iteration两种基本的算法,但是这两种算法实际上很难直接应用,原因在于依然是偏于理 ...

  4. 增强学习Reinforcement Learning经典算法梳理1:policy and value iteration

    前言 就目前来看,深度增强学习(Deep Reinforcement Learning)中的很多方法都是基于以前的增强学习算法,将其中的value function价值函数或者Policy funct ...

  5. [增强学习][Reinforcement Learning]学习笔记与回顾-2-马尔可夫决策过程MDP

    Markov Decision Processes 前言 本文主要是视频学习的总结与回顾,想要了解更多内容请看视频或者学习专业课程.这一节主要是说马尔可夫决策过程-Markov Decision Pr ...

  6. [增强学习][Reinforcement Learning]学习笔记与回顾-1

    引言 增强学习这几篇博客在于学习增强学习中所获得知识的理解与回顾,如果想要深入学习增强学习,请参考后文所列出的资料和书籍.本文只用于复习与理解. Introduction to Reinforceme ...

  7. 初学者的强化学习q learning和sarsa

    Reinforcement learning is a fast-moving field. Many companies are realizing the potential of RL. Rec ...

  8. Deep Reinforcement Learning 深度增强学习资源

    http://blog.csdn.net/songrotek/article/details/50572935 1 学习资料 增强学习课程 David Silver (有视频和ppt): http:/ ...

  9. 增强学习之入门 这个很明白

    本文首发于集智:https://jizhi.im/blog/post/intro_q_learning "机器学习"的话题一直很火热,相关的概念也是层出不穷,为了不落后于时代,我们 ...

  10. 增强学习入门之Q-Learning

    本文首发于集智:https://jizhi.im/blog/post/intro_q_learning "机器学习"的话题一直很火热,相关的概念也是层出不穷,为了不落后于时代,我们 ...

最新文章

  1. 中自苏研院2021招聘季开始啦!
  2. Cesium - 转换obj模型为3D Tiles 并加载
  3. Javascript-入门
  4. 如何激活React的跟踪模式和打开日志记录
  5. 打开方式中选择默认方式无反映_「Windows」得看,更改文件的默认应用,告别“打开方式”...
  6. deepin15.7挂载/home到单独的分区:
  7. 重新定义旅游网站,米胖新版发布
  8. 位、字,字节与KB的关系?
  9. Ubuntu(Debian) 18.04 安装后开启ssh和防火墙传输文件
  10. Java学到什么程度可以面试工作?
  11. 前端生成pdf和word
  12. 微信小程序开通广告要求累计独立访客(UV)不低于 1000是什么意思?怎么查看UV数量?
  13. 信创项目基础软件都包括哪些?你要了解
  14. windows查看系统补丁
  15. java中的g1_G1GC 概念与性能调优
  16. Linux 中断(IRQ/softirq)基础:原理及内核实现
  17. 去中心化金融 (DeFi)
  18. App2sd功能和Asec文件
  19. Thinking in BigData(五)大数据之统计学与数据挖掘
  20. 【Linux驱动】安卓充电芯片bq24735调试详解

热门文章

  1. WebBrowser 操作(从网上收集)
  2. Libevent事件的创建-scoke服务的创建-特征的获取和配置
  3. XCTF-Reverse:open-source
  4. visual c++ 部分窗口样式设置
  5. Git 分支的创建与切换 —— Git 学习笔记 14
  6. idea包名呈现层级显示
  7. DM368开发 --IPNC 设置过程
  8. UNIX再学习 -- 记录锁
  9. 区块链学堂(6):以太坊生产网络/测试网络/私有网络
  10. Go从入门到精通(一)go语言初识