作者:YJLAugus 博客: https://www.cnblogs.com/yjlaugus 项目地址:https://github.com/YJLAugus/Reinforcement-Learning-Notes,如果感觉对您有所帮助,烦请点个Star. MDP背景介绍 Random Variable 随机变量(Random Variable),通常用大写字母来表示一个随机事件.比如看下面的例子: \(X\): 河水是咸的 \(Y\): 井水是甜的 很显然,\(X\), \(Y\)两个随…
课件:Lecture 2: Markov Decision Processes 视频:David Silver深度强化学习第2课 - 简介 (中文字幕) 马尔可夫过程 马尔可夫决策过程简介 马尔可夫决策过程(Markov Decision Processes, MDPs)形式上用来描述强化学习中的环境. 其中,环境是完全可观测的(fully observable),即当前状态可以完全表征过程. 几乎所有的强化学习问题都能用MDPs来描述: 最优控制问题可以描述成连续MDPs; 部分观测环境可以转…
1. 马尔可夫模型的几类子模型 大家应该还记得马尔科夫链(Markov Chain),了解机器学习的也都知道隐马尔可夫模型(Hidden Markov Model,HMM).它们具有的一个共同性质就是马尔可夫性(无后效性),也就是指系统的下个状态只与当前状态信息有关,而与更早之前的状态无关. 马尔可夫决策过程(Markov Decision Process, MDP)也具有马尔可夫性,与上面不同的是MDP考虑了动作,即系统下个状态不仅和当前的状态有关,也和当前采取的动作有关.还是举下 棋的例子,…
1. 马尔可夫模型的几类子模型 大家应该还记得马尔科夫链(Markov Chain),了解机器学习的也都知道隐马尔可夫模型(Hidden Markov Model,HMM).它们具有的一个共同性质就是马尔可夫性(无后效性),也就是指系统的下个状态只与当前状态信息有关,而与更早之前的状态无关. 马尔可夫决策过程(Markov Decision Process, MDP)也具有马尔可夫性,与上面不同的是MDP考虑了动作,即系统下个状态不仅和当前的状态有关,也和当前采取的动作有关.还是举下棋的例子,当…
1. 马尔可夫模型的几类子模型 马尔科夫链(Markov Chain),了解机器学习的也都知道隐马尔可夫模型(Hidden Markov Model,HMM).它们具有的一个共同性质就是马尔可夫性(无后效性),也就是指系统的下个状态只与当前状态信息有关,而与更早之前的状态无关. 马尔可夫决策过程(Markov Decision Process, MDP)也具有马尔可夫性,与上面不同的是MDP考虑了动作,即系统下个状态不仅和当前的状态有关,也和当前采取的动作有关.还是举下棋的例子,当我们在某个局面…
一.MDP  / NFA    :马尔可夫模型和不确定型有限状态机的不同 状态自动机:https://www.cnblogs.com/AndyEvans/p/10240790.html MDP和NFA唯一相似的地方就是它们都有状态转移,抛掉这一点两者就八竿子打不着了. 二.MP  -> MRP -> MDP 三.计算给定策略下的价值函数 / 贝尔曼期望方程 我们用贝尔曼期望方程求解在某个给定策略π和环境ENV下的价值函数: 具体解法是:(下面是对于V(s)的解法) 从而对于每一个特定的π,都能…
1. 前言 前面的强化学习基础知识介绍了强化学习中的一些基本元素和整体概念.今天讲解强化学习里面最最基础的MDP(马尔可夫决策过程). 2. MDP定义 MDP是当前强化学习理论推导的基石,通过这套框架,强化学习的交互流程可以很好地以概率论的形式表示出来,解决强化学习问题的关键定理也可以依此表示出来. MDP(马尔可夫决策过程)包含以下三层含义: "马尔可夫"表示了状态间的依赖性.当前状态的取值只和前一个状态产生依赖,不和更早的状态产生联系.虽然这个条件在有些问题上有些理想,但是由于它…
之前讲了监督学习和无监督学习,今天主要讲“强化学习”. 马尔科夫决策过程:Markov Decision Process(MDP) 价值函数:value function 值迭代:value iteration(算法,解决MDP) 政策迭代:policy iteration(算法,解决MDP) 什么是强化学习? 强化学习(reinforcement learning,又称再励学习,评价学习)是一种重要的机器学习方法,在智能控制机器人及分析预测等领域有许多应用.但在传统的机器学习分类中没有提到过强…
请先阅读上两篇文章: [RL系列]马尔可夫决策过程中状态价值函数的一般形式 [RL系列]马尔可夫决策过程与动态编程 状态价值函数,顾名思义,就是用于状态价值评价(SVE)的.典型的问题有“格子世界(GridWorld)”游戏(什么是格子世界?可以参考:Dynamic programming in Python),高尔夫游戏,这类问题的本质还是求解最优路径,共性是在学习过程中每一步都会由一个动作产生一个特定的状态,而到达该状态所获得的奖励是固定的,与如何到达,也就是之前的动作是无关的,并且这类问题…
本篇请结合课本Reinforcement Learning: An Introduction学习 Jack's Car Rental是一个经典的应用马尔可夫决策过程的问题,翻译过来,我们就直接叫它“租车问题”吧.租车问题的描述如下: Jack’s Car Rental Jack manages two locations for a nationwide car rental company. Each day, some number of customers arrive at each l…
在介绍马尔可夫决策过程之前,我们先介绍下情节性任务和连续性任务以及马尔可夫性. 情节性任务 vs. 连续任务 情节性任务(Episodic Tasks),所有的任务可以被可以分解成一系列情节,可以看作为有限步骤的任务. 连续任务(Continuing Tasks),所有的任务不能分解,可以看作为无限步骤任务. 马尔可夫性 引用维基百科对马尔可夫性的定义: 马尔可夫性:当一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态. 用数学形式表示如下: A state…
前文5.2节和5.4节分别就Python下读文件操作做了基础性讲述和提升性介绍,但是仍有些问题,比如在5.4节里涉及到一个多次读文件的问题,实际上我们还没有完全阐述完毕,下面这个图片的问题在哪呢? 问题在于,为何调用两次readline?文本文件a.txt里我们已知有两行文本,所以我们用两次readline把a.txt文本里的内容全部读取出来了,实际上通常程序是不知道某个文件里有多少行数据的,那怎样编写一个通用的程序无论文件里有多少行我们都可以通过程序把它全部读出来呢?这里需要将文件的读写和循环…
请先阅读上一篇文章:[RL系列]马尔可夫决策过程与动态编程 在上一篇文章里,主要讨论了马尔可夫决策过程模型的来源和基本思想,并以MAB问题为例简单的介绍了动态编程的基本方法.虽然上一篇文章中的马尔可夫决策过程模型实现起来比较简单,但我认为其存在两个小问题: 数学表达上不够简洁 状态价值评价型问题与动作价值评价型问题是分离的,形式上不够统一 本篇主要来解决第一个问题. 第一个问题是比较直观的,下面给出状态价值函数以作分析: $$ \mathbb{Value}(S_1) = \mathbb{Rewa…
最近在学习斯坦福2017年秋季学期的<强化学习>课程,感兴趣的同学可以follow一下,Sergey大神的,有英文字幕,语速有点快,适合有一些基础的入门生. 今天主要总结上午看的有关DQN的一篇论文<Human-level control through deep reinforcement learning>,在Atari 2600 games上用DQN网络训练的,训练结果明,DQN能够比较稳定的收敛到Human-level的游戏水平. 前言 目前,强化学习已经在现实中很多复杂的…
Python下的文件读写操作过程和其他高级语言如C语言的操作过程基本一致,都要经历以下几个基本过程. 1. 打开文件 首先是要打开文件,打开文件的主要目的是为了建立程序和文件之间的联系.按程序访问文件时的目的来 看,有的时候打开文件是为了从文件中读取需要的数据,那么此时我们在打开文件时应以读的的方式去打开文 件:有的时候需要将程序的数据写入某个文件,那么在写入数据之前需要把文件以写的方式打开,不能向以读 方式打开的文件里写数据,也不能从以写的方式打开的文件里读取数据. 那么怎样编写程序去以读或者…
上节"6.2 Python的list访问索引和切片"主要学习了Python下的List的访问技术:索引和切片的基础知识,这节将就List的索引index和切片Slice知识点做进一步的展开.       0.index必须大于0么? list数据类型通过index访问某项数据项时,其index的值可以取负值,-1代表list列表最后一项数据,-2代表倒数第二项数据,以此类推. >>> li1 = range(10) >>> li1 [0, 1, 2,…
angular .caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halfl…
本节主要讨论Python下的文件操作技术. 首先,要明白为何要学习或者说关系文件操作这件事?其实道理很简单,Python程序运行时,数据是存放在RAM里的,当Python程序运行结束后数据从RAM被清除掉,如果想把运行过程的数据保留下来则必须存放在永久非易似性的存储介质里,比如磁盘.那么这时候就需要在磁盘上创建文件来保留这些数据或者操作磁盘上已有数据把RAM里的数据增加到文件里去(参见下图1所示),这就是为何要学习文件读写操作的原因,当然通过数据库也可将数据存放在磁盘上,但数据库的操作和数据存放…
前边我们学习了一下Python下如何读取一个文件的基本操作,学会了read和readline两个函数,本节我们学习一下Python下写文件的基本操作方法. 这里仍然是举例来说明如何写文件.例子的功能是往当前目录下的b.txt文件里写入两个字符串. 程序代码如下: wfile = open("b.txt", 'w') wfile.write("hello ") wfile.write("www.jeapedu.com\n") wfile.close…
在if分支判断语句里的条件判断语句不一定就是一个表达式,可以是多个(布尔)表达式的组合关系运算,这里如何使用更多的关系表达式构建出一个比较复杂的条件判断呢?这里需要再了解一下逻辑运算的基础知识.逻辑关系运算有以下几种运算符. 下面是逻辑与实例,通过例子我们了解一下and.or等逻辑运算操作机制. def if_check(): global x x = 79 print(" in if_check x = ", x) if x >= 60 and x < 70: print…
如果if的condition不用布尔表达式来做条件判断而采用关系表达式,实际上关系表达式运算的结果要么是True要么是False.下面我们先了解一些有关关系运算符的基础知识,如下表所示. 做个小程序测试一下. def if_check(): global x x = 100 print(" in if_check x = ", x) if x > 1: print(" x greater than 1") if x == 0: print(" x e…
本节主要讨论Python下如何通过文件操作实现对数据记录集的存储与处理的操作方法. 在Python里和其他高级语言一样可以通过文件读写将一些记录集写入文件或者通过文件读操作从文件里读取一条或多条和数据记录集,我们知道记录集recordset是由一个个的数据字段组成的. 上图,Record里由三个字段组成name.id.job.文件里可以存储多条记录,如下图所示: 像这样的数据结构record在Python里该怎样处理呢?很简单,记录有几个字段就读或者写几次然后结束一条记录的读写操作,下面我们先看…
上节简单的说明了一下Pyhon下的文件读写基本流程,从本节开始,我们做几个小例子来具体展示一下Python下的文件操作,本节主要是详细讲述Python的文件读操作. 下面举一个例子,例子的功能是读取当前目录下的a.txt文本文件里的内容并输出打印到屏幕上.下图是运行结果.        程序代码如下: rfile = open("a.txt", 'r') words = rfile.read() print words rfile.close() 代码第一行的作用是以只读的方式打开当前…
         1. 字典数据添加 这个很简单,像赋值那样一项项赋值即可.语法结构如下 dict_obj[key] = value 添加数据项示例如下 >>> d1 = {'code':123,'addr':'Peking'} >>> d1 {'code': 123, 'addr': 'Peking'} >>> d1['zip'] = 10086 >>> d1 {'code': 123, 'addr': 'Peking', 'zip…
本节的主要讨论内容是有关dict字典的一些常用的方法函数的使用和范例展示. 1. clear清除字典数据 语法结构如下: dict_obj.clear() 示例代码如下: dict1 = {'web':'www.','domain':'jeapedu.','org':'com'} for key in dict1: print format(key,"8s"), print ":\t", print dict1[key] dict1.clear() print di…
变量的基本概念,变量可以这样去理解,变量是一个值,这个值存储在计算机的内存里.以网购为例,您在选购傻商品的时候,是在不同页面里选不同的商品,选好一件点击“放入购物车”,选完了再点击去结帐,这些商品的价格.数量.折扣这些数据就存储在计算机的内存里,当您结算时,从内存里取出再进行相应的计算,得到消费金额. 程序通过变量名来访问内存里的数据. Python里的变量和C语言的变量有很多的不同,在C语言里定义或者说声明一个变量需要指定变量的类型,而Python比较自由,无需指定使用变量的数据类型,任何数据…
前文提及过变量代表内存里的某个数据,这个说法有根据么? 这里我们介绍一个python内建(built-in)函数id.我们先看看id函数的帮助文档吧.在python查某个函数的帮助文档很简单,只用help(xxx)即可. >>> help(id) 我们使用help查询一下id函数的具体信息如下: Help on built-in function id in module __builtin__: id(...) id(object) -> integer Return the i…
本节主要讨论设计传递多个参数子函数的设计方法. 在2.3节里我们讨论了如何自己设计一个带参数的子函数的设计方法,现在我们研究一下如何传递两个及以上参数的设计方法. 函数为何要带参数呢?其实原因很简单,就是想把更多的数据交给子函数去处理,只传递一个参数给子函数显得有些太捉襟见肘的意思,Python和C语言一样子函数可以设计多个参数,但不需要指定参数的类型,这点很美!好,我们看看语法结构是怎样的,如下所示. def func(arg1, arg2,....): (tab) statment1 (ta…
本节研究一下if分支语句. if分支语句是Python下逻辑条件控制语句,用于条件执行某些语句的控制操作,当if后的条件conditon满足时,if其下的语句块被执行,但当if的控制条件conditon不满足时,if下的语句块就不被执行.使用if的语法结构如下所示. if conditon: (tab) statement1 (tab) statement2 (tab) statement3 etc. if条件控制分支语句的逻辑流程图,如下图所示. 下边的程序是计算3门课程平均值程序,如果平均成…
if-else分支语句结构的特点是当conditon条件满足时,执行if下的语句块,当condition条件不满足时执行else下的语句块,也就是说根据条件来控制让某些语句执行,某些语句不被执行. if-else语法结构如下: if conditon: (tab) statement1 (tab) statement2 (tab) statement3 etc. else: (tab) statement1 (tab) statement2 (tab) statement3 etc. 需要注意的…