序列二次规划_最优控制与规划

(以下内容均来源于 CS 294 Lecture 8)

首先我们假设环境是确定性的,即在某个状态执行某个动作之后,转移到的下一个状态是确定的,不存在任何随机性。而在这种情况下,我们想做的是在环境给了我们一个初始状态的条件下,根据我们需要完成的任务以及环境模型,直接得出从初始状态到任务完成状态中间最优的动作序列。因为环境是确定的,而我们又已知环境模型,因而以上想法是自然且可行的。下图展示了我们想做的事情:

dda3afe093a23e16e2871f20142b3108.png

现在我们将以上问题抽象成一个正式的优化问题:

其中

就代表环境模型。但是一旦环境不再是确定的,即正在某个状态执行某个动作之后,转移到的下一个状态是从一个状态分布中随机采样的。对于这种情况,上述的优化问题就会转变为最大化如下形式的期望值:

但是在随机环境下,解决与确定环境的类似的如上优化问题并不能得到与确定环境一样的最优解。原因在于我们只接受环境反馈回来的初始状态,接着便凭借着我们掌握的环境模型在脑海中进行规划。这种方法在确定环境下没有任何问题,但在随机环境下,智能体实际会转移到的状态可能并不符合我们的预期,因为它是从一个条件状态分布中随机采样的。而一旦从某一个状态开始与我们的预期产生偏差,那么后续的所有状态都会产生偏差,而我们设想的最优动作序列便不是最优了。从优化函数的角度来看,我们优化的只是一个期望值,而不是某一次随机采样的值。

我们把上述解决问题的方法叫做开环方法,与之对应的叫做闭环方法。那么这个“环”具体是指什么呢?具体示意图如下:

846d392e677a31bf80931c313e157586.png

开环方法是只在最开始时接收环境反馈的初始状态,然后开始规划从开始到任务完成的过程中所经历的所有状态对应的最优动作,并不需要一个基于状态产生动作的策略;反之,闭环方法在每一个时间步都会接收环境反馈的状态,然后利用一个根据状态输出动作的策略来产生一个动作。我们可以看出,对于一个随机环境,闭环方法显然比开环方法更具优势,因为其可以根据所处的状态随时调整自己的动作。

但接下来我们还是首先假定一个确定性的环境,因而采用开环方法来解决上述问题。下面将介绍三种优化方法:随机优化方法、蒙特卡洛树搜索法以及轨迹优化方法。

随机优化方法

对于随机优化方法来讲,上述优化问题可以简化为如下等价优化问题:

f7581eefb70ccaa9c421fba6c7140b90.png

随机优化方法完全不关系优化目标的特殊结构等信息,而是把任何优化问题都当作上图右半边这样的一般优化问题。

随即发射方法

最简单的随机优化方法就是随机瞎猜,即随机选择一个动作序列,然后评估其累积的代价。如上过程不断进行,最后选择一个累积代价最小的动作序列作为上述优化问题的最优解,因而这类方法也叫做“随机发射方法”:

4d6ea66100434efaaef8df2fa511d108.png

CMA算法

但是这种方法在相对高维的情况下效率会很低,因为搜索空间太大但是目标区域比较小。回顾一下上述方法,我们可以在采样分布上做些文章。假设第一次从一个均匀分布采样一些动作序列之后,得到的累积代价分别为如下情况:

581cb71a8e8a13ef375525e58276d9e1.png

那么下一次我们可以不再继续从一个均匀分布中采样了,我们可以聚焦于累积代价较小(累积回报较大)的区域,然后估计那个区域的分布,在这里我们假设分布是一个高斯分布:

ee106faf86cbcc9bbd9511d250cf6f49.png

接下来的采样我们就从这个新的分布中进行采样:

55b66d990be79eb00c6aff926306c525.png

然后在下一次采样之前,我们再次聚焦于性能更好的区域然后估计其分布:

9ff4f25994660b44a094a0c3afdc1009.png

就这样不断迭代,直到满足停止条件。以上方法就是Cross-Entropy Method(CEM)算法,其伪代码如下:

6d073502b5773529657c923631e0405f.png

该方法还有个进阶版的算法叫做CMA-ES算法,后者可以看作是CMA算法带动量的版本。CMA算法会直接舍弃之前采样的数据点,但是CMA-ES算法会保留部分之前采样的数据点的相关信息,用来指导后续的采样。可以类比一下梯度下降法以及带动量的梯度下降法。

总结

随机优化方法具有以下优点:

  • 并行化后效率极高
  • 实现起来十分简单

但是也存在如下不可避免地缺点:

  • 极易受到维度灾难的影响
  • 只适用于开环情形

随即优化方法虽然可以同时适用于连续变量以及离散变量的情况,但不是专门为离散情况设计的。下面我们将介绍一种专门为离散动作空间设计的强大的优化方法(严格来讲叫做启发式搜索算法):蒙特卡洛树搜索MCTS方法。

蒙特卡洛树搜索算法

MCTS方法本质是一个搜索算法:

c199b1c8b9918d0caa20ef40613b9166.png

假设我们想要训练一个智能体能够自动去玩上面这个游戏(击沉敌方潜水艇将会获得分数,但是潜水艇自身的氧气储存量是逐渐减少的,需要不时地去浮出水面补充氧气。被敌方潜水艇撞上会损失生命值,游戏目标就是获得尽可能多的分数)。一个简单的暴力搜索算法可能会包含上图右边的过程,假设一段最优动作序列仅仅包含十个时间步,每个状态下仅仅包含两个可能动作,那么最后一个时间步就包含1024个可能性。但对于大多数问题来说,十个时间步远远不足以完成目标,因而暴力搜索算法是不可行的。

那么蒙特卡洛算法是如何在不穷举所有可能性直到到达终点的情况下对一个动作序列进行评估的呢?考虑潜水艇游戏,在潜水艇做出攻击指令后,由于炮弹的运行需要时间,因而几个时间步之后敌方潜水艇才会被击沉从而受到奖励,在潜水艇做出攻击指令那个时间步是没有任何奖励的,因而智能体可能认为这个动作并不是一个优秀的动作。对于以上情况,其实我们只需要在做出攻击指令后,如果要评估这个动作的优劣,“等待”几个时间步 即可。蒙特卡洛树搜索算法正是采用这种思想,同样用上图右边的过程举例,当动作执行到第三层时,如何评估这四个动作序列的性能好坏呢?算法进行了某种“等待”,即从第三层开始,不再把树进行完全的扩展了,而是采用一个随机策略随机执行动作直到游戏结束或者到达某个设定的时间步。这就类似于在潜水艇游戏中,潜水艇在发出炮弹后,随机执行一些动作,直到炮弹击中敌方潜水艇。

52c3cd06f53942c889246d7096431bd9.png

而蒙特卡洛算法正是通过这种评估方法来避免暴力搜索,具体来说,蒙特卡洛树搜索算法会根据评估结果的好坏以及访问次数来决定下一步应该搜索哪一条路径:

64bb93d3ea519bdaba6bdf23619352fd.png

可能以上描述有点难以理解,那么下面我们过一遍蒙特卡洛树搜索方法的搜索过程。我们首先给出算法的执行步骤:

9bedfbec8481c438f3f5eeb4dcffba01.png

首先我们处于一个初始状态:

fe06a665e5412d786ae809c48125479d.png

然后我们进行算法第一步,根据一个“树策略”找到一个叶子节点,注意这里找到一个叶节点的意思是找到一个**新的*叶节点。树策略的具体形式如下:

aef59bdcfac571c4f4c897a860882527.png

根据以上策略,由于初始状态没有被完全扩展,因而随机选择一个动作,并执行第二步使用默认策略来评估执行这个动作的好坏,这里默认策略使用的是随机采样策略:

0c615a9fcc3eed29c875ce00b5a1e9fa.png

假设评估结果如下:

40873ed635cea3a98e1e3a678ce8dfbe.png

这里Q代表环境定义的回报,N代表访问这个状态的次数。**这里值得注意的是,N记录的并不是某个具体的状态的访问次数,而是执行某个动作的次数,执行这个动作后在随机环境下可能转移到很多个不同的状态,但在树中均显示为一个节点。**评估完之后,我们需要更新根节点到这个新加入的叶节点之间所有节点的Q值以及N值。由于这里两者之间并没有其他的节点,因而跳过这一步。然后以上过程开始循环,我们再将状态跳回到初始状态,遵循树策略,找到下一个新的叶节点。由于初始状态还是没有扩展完毕,因此这一次执行下一个未被执行过的状态:

ca21f18837b11024ce7aa0e2d1ff739c.png

再采用默认策略对其进行评估,假设我们得到了以下结果:

1037598164256e451db5aae0f3fc92dc.png

由于根节点与新的叶节点之间的路径并没有其他节点,因而更新步骤略过。再次重复以上过程,将状态跳回到初始状态,执行树策略找到一个新的叶节点。首先根据树策略,初始状态已经被完全扩展开了(即所有可能的动作均已经执行过),这个时候我们根据树策略中的公式计算每一条路径的一个分数。从分数计算公式可以看出,这个分数是同时考虑动作的回报以及动作的执行次数,更加倾向于执行被执行次数少的回报高的动作。在这里,由于两个动作被执行次数均为1,因而我们选择回报更高的第二个动作执行,然后再根据树策略(在没有找到新的叶节点之前,循环执行树策略),第二层的状态没有被完全扩展,因而随机选择一个动作执行:

a0e047183b49b09f89f5e87f55e6d48b.png

依据默认策略进行评估:

6e3eb6ccb0a9b41c1a7c428ab5c223df.png

注意,到了这一步,根节点到新的叶节点之间的路径存在其他节点了,我们就要用最新的叶节点的评估值以及访问次数加到这些中间节点的评估值以及访问次数上:

ea38693a12089b01daf7df250ac86df0.png

再次重复上述过程,将状态跳回到初始状态,调用树策略,这时候根据分数计算公式,在假设一些超参数的情况下,我们假定这个时候更加侧重于执行被执行次数更小的动作并评估:

298e7d3e4b38b4cb560371523753f630.png

然后再更新再跳回......

31c39d5131a01e7f598993bad492ccf1.png

55f390a04c2de37c920f01717e773755.png

b3a76ef461fe7121f83b6df5b77a6385.png

dd0db4441ca1693778e40234784c3867.png

如果想详细了解蒙特卡洛树搜索算法的扩展以及应用,可以参考下面这篇综述:

e340874bf1530f3b963907714ab3524d.png

这里讲一个比较有意思的案例:

93912e3d866b09114bbbc29a2e8e66c1.png

其思想其实是将DAgger算法与MCTS算法进行结合。由于DAgger算法需要人工的不断参与进行新数据的标注,以上案例将专家标注的过程用MCTS算法进行替代,学习一个MCTS的策略估计器:

1ad2aed98adf66a3e9f5e4975e83d19d.png

357c3e39689c7f5d5b27dcf9e59bb13b.png

那么为什么不直接使用MCTS算法呢?其实是基于以下两点考虑的:

  • 实时性要求较高的任务中MCTS太慢了
  • 采用类似神经网络的策略估计器具有更好的泛化性

路径优化算法

让我们再次回顾以下优化问题:

直接丢弃掉以上优化问题中的特殊结构显然不是十分恰当的,接下来让我们回到一般解决以上优化问题的思路。我们一看到以上问题,就会首先想到能不能利用类似梯度下降的方法呢?为了与最优控制中路径优化算法的一般符号记法一致,我们将以上问题重写为以下形式:

我们可以将约束部分放进优化函数中从而将以上问题转变为一个无约束问题:

对于以上问题,只要我们知晓以下四项,即可根据链式法则得出其最优解:

LQR算法

确定性环境

为了解决以上优化问题,我们接下来将介绍一种路径优化算法LQR,此算法假设环境模型是线性的,并且代价函数是二次的

4033a2b2d11e9f080b578fef1a108a67.png

为了解决这种特殊形式的以上优化问题,我们采用动态规划的思想,先找出最优的最后一个时间步的动作。之所以这样做,是因为我们可以发现,以上连加项中只有最后一项是与最后一个时间步的动作相关的。如果我们首先解决第一个时间步的最优动作,那么连加项的所有项都与第一个时间步的动作相关。接下来,我们把最后一项中连续的函数求值简写为

注意这个值是未知的。进行了以上的准备工作后,求解最后一个时间步的最优动作对应的优化目标如下,我们把其记为

然后我们将线性项系数以及二次项系数展开:

然后,为了得出最优动作,我们令这个优化目标关于最后一个时间步动作的梯度等于0:

求解以上线性方程,可以得出最后一个时间步的最优动作为:

将其进行简单的转化,我们可以看出,最后一个时间步的最优动作是最后一个时间步状态(现在还是未知项)的线性函数(以上关系适用于所有时间步)

其中:

由于最后一步的最优动作完全可以用最后一步的状态表示,我们可以得出最后一个时间步的最优的Q值,这里我们将其记为V:

这里的Q值以及V值其实是和强化学习中的定义是一致的。接下来,我们将上式展开:

将上式合并同类项可得:

其中:

因而我们可以得到另一个关系,**最后一个时间步的V值(最优Q值)是最后一个时间步状态的二次函数(以上关系适用于所有时间步)。**进行到这里,我们已经解出最后一个时间步的最优动作了。接下来,我们要在此基础上解出倒数第二个时间步的最优动作。首先我们注意到,倒数第二个时间步的Q值函数可以记为:

19d73954cae27ace3ad0e3e8976c90b8.png

将环境模型引入可将V值展开:

cf6b764cd72840e18b9bcc90646ccfd0.png

我们将展开后的V值代入倒数第二时间步的Q值函数中:

其中:

同样,为了求出倒数第二个时间步的最优动作,我们令相关梯度为零:

解得倒数第二个时间步的最优动作为:

其中:

让我们不断地重复以上过程,直到第一个时间步。值得注意的是,由于每一时间步的最优动作与那个时间步的状态有关,但是状态是未知的。

304b69b4d04d25af81eeca21c1edef5a.png

当整个过程回溯到初始时间步时,情况发生了变化,**初始状态我们是已知的!**因而,我们就可以算法初始时间步的最优动作。利用环境模型,我们就可以得知第二个时间步的状态,如此循环下去,我们就可以得知所有时间步的最优动作:

28d9382496ec4c09a1146af293448947.png

以上就是整个LQR算法的执行过程。

非确定性环境 (未完成)

对于非确定性环境,假设我们的环境模型如下:

那么LQR算法依旧是完全可行的。

iLQR算法

LQR算法由于假设环境模型以及代价函数是线性以及二次的,表达能力有限,对于更加复杂的任务显然不能很好的估计。因而,解决这个问题的iLQR算法应运而生。其基本思想很简单,既然线性以及二次函数不足以估计全局的真实函数,那么估计局部的总是足够的。因而我们可以对环境模型以及代价函数分别做一阶以及二阶的泰勒展开!

那么我们的问题其实又转变回了原始的LQR设定:

b50d201a35a927eee37c8daf30434561.png

其中:

iLQR算法的具体框架如下:

a9d93ddbc1b26e91b647c8717a8c82e1.png

**该算法之所以采用迭代的形式,是因为其需要不断地用真实样本来去”矫正“其对于环境模型以及代价函数的估计。**更严格来讲,该算法之所以能够达到很好的效果,是因为它和牛顿方法的本质是一样的(通过泰勒展示来估计一个复杂的非线性函数的局部特性):

960d268c154c522efdcdcec81e99a8c7.png

而如果我们对环境模型估计时也进行二阶泰勒展开:

那么我们的算法就变为微分动态规划算法(DDP)。但是在实际情况中,代价函数的形式一般比较简单,因而进行二阶泰勒展开代价不大。但是环境模型一般是十分复杂的,一阶展开还好,一旦进行二阶展开其复杂性将会大大增加。事实表明一阶展开其实是足够的。

但是以上算法还存在一个问题,考虑以下估计误差:

0ece2605859b9451ef34f8de3dde8b36.png

对于这种情况,其实我们只要简单的在原始iLQR算法中加一个line search过程即可:

241914d0b380be2827167ce178143d41.png

最后我们看一个iLQR算法在实际情况应用的实例:

b1fa63599e0fd1721e104d464e405e8b.png

为了保证iLQR更加稳定,这个工作采用了如下形式的改进:

d8aa8a56331956d1aac37456f7c84f29.png

即在每一步都进行一个完整的规划,但是考虑到iLQR的估计误差随着时间会产生累积,因而每次只执行规划的第一步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java - 求a+aa+aaa+aa...a之和

求如 saaaaaaaaaaaa…a 之和,其中 a 是一个数字,根据提示输入个位数字和最高位数,计算并输出结果。 222222222222222(此时共有 5 个数相加),几个数相加由键盘控制 结果演示 代码演示 package com.two;import java.util.*;publ…

Go_defer详解

defer 1. 前言 defer语句用于延迟函数的调用,每次defer都会把一个函数压入栈中,函数返回前再把延迟的函数取出并执行。 为了方便描述,我们把创建defer的函数称为主函数,defer语句后面的函数称为延迟函数。 延迟函数可能有输入…

【youcans 的 OpenCV 例程200篇】143. 基于灰度形态学的粒度测定

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 【youcans 的 OpenCV 例程200篇】143. 基于灰度形态学的粒度测定 5.5 灰度形态学之粒度分析 粒度测度是指确定图像中颗粒的大小分布…

无法自动进入并单步执行服务器_膳食纤维无法进入血液执行营养功能,吃它有啥用?...

膳食纤维是植物性食物中所含不能被人体吸收、消化分解利用的碳水化合物,包含纤维素、半纤维素、木质秦和果胶等物质。其中,膳食纤维根据其水溶性又可再分为可溶性和不可水溶性。可溶性膳食纤维包括果胶、藻胶、树胶和黏液,多存在于水果、海藻…

java - 求素数

求素数,求出设定范围内所有的素数并进行控制台输出,输出101-200之间的所有素数 素数曾称质数。一个大于1的正整数,如果除了1和它本身以外,不能被其他正整数整除,就叫素数 结果演示 代码演示 package com.two; //输…

【youcans 的 OpenCV 例程200篇】144. 基于灰度形态学的纹理分割

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 【youcans 的 OpenCV 例程200篇】144. 基于灰度形态学的纹理分割 5.6 灰度形态学之纹理分割 形态学的纹理分割是以纹理内容为基础&…

activity 变成后台进程后被杀死_Android 后台运行白名单,优雅实现保活

作者:NanBox链接:https://www.jianshu.com/p/32b7241124a2欢迎关注专栏:里面定期分享Android架构技术知识点及解析,还会不断更新的BATJ面试专题,欢迎大家前来探讨交流,如有好的文章也欢迎投稿。Android开发…

java - 菲波拉契数列 兔子个数

菲波拉契数列:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 结果演示 代码演示 package com.two;public clas…

【youcans 的 OpenCV 例程200篇】145. 形态学之边缘和角点检测

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 【youcans 的 OpenCV 例程200篇】145. 形态学之边缘和角点检测 5.7 形态学之边缘和角点检测 边缘和角点不仅保留了图像的重要特征&…

tengine简单安装_树莓派使用宝塔面板安装LNMP环境

书接上回,前面说到我被垃圾Rock 64搞的死去活来,索性在树莓派上装了Ubuntu 20.04 LTS。 为了方便配置V2Ray,我忙活了一天终于把LNMP环境搞定了。下面说说怎么搞的,避免后面再踩坑。安装宝塔面板在安装之前需要先安装必要的软件。U…

cmd中Redis的启动

对于Redis缓存数据库来说,是使用命令行来进行有关操作的,那么我们如何使用命令行来打开Redis数据库呢??? 1.在windows电脑上按windowsR,然后输入cmd打开命令行 2.根据我们安装Redis的路径切换到对应的盘中…

【youcans 的 OpenCV 例程200篇】146. 基于灰度形态学的复杂背景图像重建

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 【youcans 的 OpenCV 例程200篇】146. 基于灰度形态学的复杂背景图像重建 5.8 灰度形态学图像重建 灰度级形态学重建涉及标记图像 …

Tomcat端口号的修改

当我们运行web项目的时候通常要输入Tomcat的端口号进行访问,那么我们如何修改Tomcat的端口号呢??? 我们要到安装目录(或者解压目录)下找到conf文件夹,在里面找到server.xml的文件右击用记事本打开,找到 修…

golang 获取当天0点时间_golang使用webAssembly的方式

WebAssembly (WASM) 是一种新的编码方式,可以在现代的网络浏览器中运行- 它是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能. 可以将C/C/Rust/GO代码编译成.wasm文件, 然后运行在web上面.本文仅介绍Golang与WASM…

Redis数据库的连接

对于Redis缓存数据库的连接要有两大步,一是启动我们的Redis服务,只有Redis服务启动了我们才能对它进行连接等相关操作,二就是Redis数据库的连接了。 首先,确保我们电脑上已经安装好了Redis数据库。 一 . 启动Redis服务 1.在我的…

dnn神经网络 缺点_抄近路神经网络如何因找捷径而犯错

导读:Te road reaches every place, the short cut only one”— James Richardson见路不走:现在有很多大师都告诉别人要去照抄别人,有的大师告诉别人不要去照抄别人,这两种说法都不全面,首先要分析事物发生的本质&…

java - 数组逆序输出

根据提示输入一串数组(多个类型完全相同数字)当输入数组完成时输入-1(-1代表结束),程序会在控制台输出你输入的数组,并且还会再此把你输入的数组逆序输出。 结果演示 代码展示 package com.three;import…

分组后统计总数_大数据时代看排球:排球技术统计能告诉你什么?

2020-08-25 中国排协排球技术统计是将排球比赛行为按照一定的规则和排列方式进行记录,再将记录的数据汇总形成统计表格的一种统计行为。国际排联(FIVB)和中国排球协会(CVA)公布的一系列技术统计数据,对指导训练、比赛和进行相关的排球科研工作具有重要指…

计算机设计大赛国奖作品_2. 报名材料

计算机设计大赛国奖作品_2. 报名材料 本系列是2021年中国大学生计算机设计大赛作品“环境监测无人机航线优化”的相关文档,获得2021年西北赛区一等奖,国赛三等奖。学生习作,只供大家参考。 计算机设计大赛国奖作品_1. 项目概要 计算机设计大…

【youcans 的 OpenCV 例程200篇】147. 图像分割之孤立点检测

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 【youcans 的 OpenCV 例程200篇】147. 图像分割之孤立点检测 1. 图像分割基本概念 图像分割就是把图像分成若干个特定的、具有独特…