状态方程

四边形优化DP学习

不羁的心 提交于 2020-03-24 11:58:38
转自:http://www.cnblogs.com/hadilo/p/5800306.html 在动态规划中,经常遇到形如下式的状态转移方程:     m(i,j)=min{m(i,k-1),m(k,j)}+w(i,j)(i≤k≤j)(min也可以改为max)   上述的m(i,j)表示区间[i,j]上的某个最优值。w(i,j)表示在转移时需要额外付出的代价。该方程的时间复杂度为O(N 3 )      下面我们通过四边形不等式来优化上述方程,首先介绍什么是“区间包含的单调性”和“四边形不等式”     1、区间包含的单调性:如果对于 i≤i'<j≤j',有 w(i',j)≤w(i,j'),那么说明w具有区间包含的单调性。(可以形象理解为如果小区间包含于大区间中,那么小区间的w值不超过大区间的w值)     2、四边形不等式:如果对于 i≤i'<j≤j',有 w(i,j)+w(i',j')≤w(i',j)+w(i,j'),我们称函数w满足四边形不等式。(可以形象理解为两个交错区间的w的和不超过小区间与大区间的w的和)   下面给出两个定理:     1、如果上述的 w 函数同时满足区间包含单调性和四边形不等式性质,那么函数 m 也满足四边形不等式性质       我们再定义 s(i,j) 表示 m(i,j) 取得最优值时对应的下标(即 i≤k≤j 时,k 处的 w 值最大,则 s

SLAM中的EKF,UKF,PF原理简介

拥有回忆 提交于 2020-02-27 05:17:01
这是我在知乎上问题写的答案,修改了一下排版,转到博客里。 原问题: 能否简单并且易懂地介绍一下多个基于滤波方法的SLAM算法原理? 目前SLAM后端都开始用优化的方法来做,题主想要了解一下之前基于滤波的方法,希望有大神能够总结一下各个原理(EKF,UKF,PF,FastSLAM),感激不尽。 作者:半闲居士 链接:https://www.zhihu.com/question/46916554/answer/103411007 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。   我怎么会写得那么长……如果您有兴趣可以和我一块把公式过一遍。   要讲清这个问题,得从状态估计理论来说。先摆上一句名言: 状态估计乃传感器之本质。(To understand the need for state estimation is to understand the nature of sensors.)   任何传感器,激光也好,视觉也好,整个SLAM系统也好,要解决的问题只有一个: 如何通过数据来估计自身状态。 每种传感器的测量模型不一样,它们的精度也不一样。换句话说,状态估计问题,也就是“ 如何最好地使用传感器数据 ”。可以说,SLAM是状态估计的一个特例。 1. 离散时间系统的状态估计   记机器人在各时刻的状态为 ,其中 是离散时间下标。在SLAM中

干货:图解算法——动态规划系列

霸气de小男生 提交于 2020-02-25 19:47:12
小浩:宜信科技中心攻城狮一枚,热爱算法,热爱学习,不拘泥于枯燥编程代码,更喜欢用轻松方式把问题简单阐述,希望喜欢的小伙伴可以多多关注! 动态规划系列一:爬楼梯 1.1 概念讲解 讲解动态规划的资料很多,官方的定义是指把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解。概念中的各阶段之间的关系,其实指的就是状态转移方程。很多人觉得DP难(下文统称动态规划为DP),根本原因是因为DP区别于一些固定形式的算法(比如DFS、二分法、KMP),没有实际的步骤规定第一步第二步来做什么,所以准确的说,DP其实是一种解决问题的思想。 这种思想的本质是:一个规模比较大的问题(可以用两三个参数表示的问题),可以通过若干规模较小的问题的结果来得到的(通常会寻求到一些特殊的计算逻辑,如求最值等) 所以我们一般看到的状态转移方程,基本都是这样: opt :指代特殊的计算逻辑,通常为max or min。 i,j,k 都是在定义DP方程中用到的参数。 dp[i] = opt(dp[i-1])+1 dp[i][j] = w(i,j,k) + opt(dp[i-1][k]) dp[i][j] = opt(dp[i-1][j] + xi, dp[i][j-1] + yj, ...) 每一个状态转移方程,多少都有一些细微的差别。这个其实很容易理解,世间的关系多了去了,不可能抽象出完全可以套用的公式

关于动态规划

我怕爱的太早我们不能终老 提交于 2020-01-28 04:58:48
著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:熊大大 链接:http://www.zhihu.com/question/23995189/answer/35324479 来源:知乎 动态规划中递推式的求解方法不是动态规划的本质。 我曾经作为省队成员参加过NOI,保送之后也给学校参加NOIP的同学多次讲过动态规划,我试着讲一下我理解的 动态规划 ,争取深入浅出。希望你看了我的答案,能够喜欢上动态规划。 0. 动态规划的本质,是对问题 状态的定义 和 状态转移方程 的定义 。 引自维基百科 dynamic programming is a method for solving a complex problem by breaking it down into a collection of simpler subproblems . 动态规划是通过 拆分问题, 定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。 本题下的其他答案,大多都是在说递推的求解方法,但 如何拆分问题 ,才是动态规划的核心。 而 拆分问题 ,靠的就是 状态的定义 和 状态转移方程 的定义 。 1. 什么是 状态的定义? 首先想说大家千万不要被下面的数学式吓到,这里只涉及到了函数相关的知识。 我们先来看一个动态规划的教学必备题: 给定一个数列,长度为N,

IMU Noise Model

情到浓时终转凉″ 提交于 2019-12-26 00:26:02
1.参考资料 2.相关定义 3.IMU 的噪声模型 3.1噪声的建模 3.2白噪声和随机游走噪声的离散化 3.3如何获取传感器噪声参数 4.随机噪声和扰动的积分 4.1建立模型 4.2噪声的离散化模型推导 4.3系统的状态误差方程 4.4状态误差方程的积分 4.4.1 第一项-状态误差 4.4.2 第二项-测量白噪声 4.4.3 第三项-扰动噪声离散化(随机游走噪声) 4.5 离散的系统误差方程 4.6 误差状态方程的其他说明 4.7 Full IMU example 1.参考资料 <1>Kalibr IMU Noise Model: https://github.com/ethz-asl/kalibr/wiki/IMU-Noise-Model <2>高斯白噪声: http://blog.csdn.net/ZSZ_shsf/article/details/46914853 <3>随机游走: http://blog.sina.com.cn/s/blog_5c2cfefb0100emyi.html <4>泡泡机器人IMU状态模型(2) http://mp.weixin.qq.com/s/_ElpcSkMaGEIFd3bmwGa_Q <5>泡泡机器人IMU状态模型(1) http://mp.weixin.qq.com/s/PD4cOqVE3oMhyW4A2N02xQ <6>

动态规划套路详解

故事扮演 提交于 2019-12-14 21:54:21
动态规划套路详解 转自 作者:labuladong 链接:https : / / leetcode - cn . com / problems / coin - change / solution / dong - tai - gui - hua - tao - lu - xiang - jie - by - wei - lai - bu - ke / 来源:力扣(LeetCode) 下面通过对斐波那契数列和这道凑零钱问题详解动态规划。如果只想看本题的答案,请直接翻到最后查看。 动态规划算法似乎是一种很高深莫测的算法,你会在一些面试或算法书籍的高级技巧部分看到相关内容,什么状态转移方程,重叠子问题,最优子结构等高大上的词汇也可能让你望而却步。 而且,当你去看用动态规划解决某个问题的代码时,你会觉得这样解决问题竟然如此巧妙,但却难以理解,你可能惊讶于人家是怎么想到这种解法的。 实际上,动态规划是一种常见的「算法设计技巧」,并没有什么高深莫测,至于各种高大上的术语,那是吓唬别人用的,只要你亲自体验几把,这些名词的含义其实显而易见,再简单不过了。 至于为什么最终的解法看起来如此精妙,是因为动态规划遵循一套固定的流程: 递归的暴力解法 -> 带备忘录的递归解法 -> 非递归的动态规划解法 。这个过程是层层递进的解决问题的过程,你如果没有前面的铺垫,直接看最终的非递归动态规划解法

零钱兑换-动态规划

*爱你&永不变心* 提交于 2019-12-13 01:26:30
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 示例 1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2: 输入: coins = [2], amount = 3 输出: -1 说明: 你可以认为每种硬币的数量是无限的。 题解 动态规划算法似乎是一种很高深莫测的算法,你会在一些面试或算法书籍的高级技巧部分看到相关内容,什么状态转移方程,重叠子问题,最优子结构等高大上的词汇也可能让你望而却步。 而且,当你去看用动态规划解决某个问题的代码时,你会觉得这样解决问题竟然如此巧妙,但却难以理解,你可能惊讶于人家是怎么想到这种解法的。 实际上,动态规划是一种常见的「算法设计技巧」,并没有什么高深莫测,至于各种高大上的术语,那是吓唬别人用的,只要你亲自体验几把,这些名词的含义其实显而易见,再简单不过了。 至于为什么最终的解法看起来如此精妙,是因为动态规划遵循一套固定的流程:递归的暴力解法 -> 带备忘录的递归解法 -> 非递归的动态规划解法。这个过程是层层递进的解决问题的过程,你如果没有前面的铺垫,直接看最终的非递归动态规划解法,当然会觉得牛逼而不可及了。 当然,见的多了,思考多了

leetcode309 买卖股票

柔情痞子 提交于 2019-12-08 18:14:30
一、穷举框架 首先,还是一样的思路:如何穷举?这里的穷举思路和上篇文章递归的思想不太一样。 递归其实是符合我们思考的逻辑的,一步步推进,遇到无法解决的就丢给递归,一不小心就做出来了,可读性还很好。缺点就是一旦出错,你也不容易找到错误出现的原因。比如上篇文章的递归解法,肯定还有计算冗余,但确实不容易找到。 而这里,我们不用递归思想进行穷举,而是利用「状态」进行穷举。我们具体到每一天,看看总共有几种可能的「状态」,再找出每个「状态」对应的「选择」。我们要穷举所有「状态」,穷举的目的是根据对应的「选择」更新状态。听起来抽象,你只要记住「状态」和「选择」两个词就行,下面实操一下就很容易明白了。 for 状态1 in 状态1的所有取值: for 状态2 in 状态2的所有取值: for ... dp[状态1][状态2][...] = 择优(选择1,选择2...) 比如说这个问题,每天都有三种「选择」:买入、卖出、无操作,我们用 buy, sell, rest 表示这三种选择。但问题是,并不是每天都可以任意选择这三种选择的,因为 sell 必须在 buy 之后,buy 必须在 sell 之后。那么 rest 操作还应该分两种状态,一种是 buy 之后的 rest(持有了股票),一种是 sell 之后的 rest(没有持有股票)。而且别忘了,我们还有交易次数 k 的限制,就是说你 buy

动态规划

白昼怎懂夜的黑 提交于 2019-12-06 03:44:47
 这个思路来源于搞了动态规划几十年(也算是理论奠基人之一了)的Dimitri Bertsekas,他所称之为Abstract Dynamic Programming Models。动态规划是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。 动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解。通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量:一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表。这种做法在重复子问题的数目关于输入的规模呈指数增长时特别有用。 动态规划问题满足三大重要性质 一、抽象模型 ¶ 定义:两个集合 S,A ;策略映射 mu ;两个算子 T_mu,T 本节我们定义为了准确描述动态规划模型必不可少的5个符号。 考虑 S 和 A 为两个集合,前者我们认为是包含所有状态(state)的集合,后者我们认为是包含所有控制(control,或者action)的集合。对任意 sin S ,定义 A(s)subset A 为针对状态 s 的可行控制集。然后我们再对任意 sin S