Iterative Linear Quadratic Gaussian(iLQG)
论文简述
原论文:http://maeresearch.ucsd.edu/groups/skelton/publications/weiwei_ilqg_CDC43.pdf
本文工作把一个非线性最优控制问题,在每次迭代中都在局部归化为控制理论里面研究很成熟的Linear Quadratic Gaussian(LQG)问题,然后迭代地去求解更好的控制序列,直到收敛。
与强化学习的区别在于强化学习中不直接知道系统的dynamics,而最优控制的问题可以知道系统的dynamics。控制理论是强化理论的重要基础,相比于更为玄学的强化学习,控制理论的理论分析更细致,能够更好的帮助我们理解强化学习。
公式理解
任意找一个控制序列 {u‾(k)}\{\overline{u}(k)\}{u(k)},然后按照这个控制做一次推导,得到轨迹 {x‾(k)}\{\overline{x}(k)\}{x(k)} 。在这个轨迹附近,将系统的动力学特性线性化、将损失函数二次化,并考虑如何在 {u‾(k)}\{\overline{u}(k)\}{u(k)}和 {x‾(k)}\{\overline{x}(k)\}{x(k)}附近找到扰动δu=u−u‾\delta u=u-\overline{u}δu=u−u 和δx=x−x‾\delta x=x-\overline{x}δx=x−x使得新的控制比之前的更好。迭代地做更新直到收敛即得到最优控制序列。
算法的每一次迭代都在轨迹 {x‾(k),u‾(k)}\{\overline{x}(k), \overline{u}(k)\}{x(k),u(k)}附近先找到控制序列 u=u‾+δuu=\overline{u}+\delta uu=u+δu ,然后根据动力学规律找到新的轨迹 x=x‾+δxx=\overline{x}+\delta xx=x+δx,反复迭代直到收敛
具体步骤:
首先可以将系统的动力学特性线性化并且将损失函数二次化,有
δxk+1=Akδxk+Bkδuk+Ck(δuk)ξkCk(δuk)≜[c1,k+C1,kδuk⋯cp,k+Cp,kδuk]costk=qk+δxk⊤qk+12δxk⊤Qkδxk+δuk⊤rk+12δuk⊤Rkδuk\begin{aligned} \delta \mathbf{x}_{k+1}=& A_{k} \delta \mathbf{x}_{k}+B_{k} \delta \mathbf{u}_{k}+\mathcal{C}_{k}\left(\delta \mathbf{u}_{k}\right) \boldsymbol{\xi}_{k} \\ \mathcal{C}_{k}\left(\delta \mathbf{u}_{k}\right) \triangleq &\left[\mathbf{c}_{1, k}+C_{1, k} \delta \mathbf{u}_{k} \cdots \mathbf{c}_{p, k}+C_{p, k} \delta \mathbf{u}_{k}\right] \\ \operatorname{cost}_{k}=& q_{k}+\delta \mathbf{x}_{k}^{\top} \mathbf{q}_{k}+\frac{1}{2} \delta \mathbf{x}_{k}^{\top} Q_{k} \delta \mathbf{x}_{k} \\ &+\delta \mathbf{u}_{k}^{\top} \mathbf{r}_{k}+\frac{1}{2} \delta \mathbf{u}_{k}^{\top} R_{k} \delta \mathbf{u}_{k} \end{aligned}δxk+1=Ck(δuk)≜costk=Akδxk+Bkδuk+Ck(δuk)ξk[c1,k+C1,kδuk⋯cp,k+Cp,kδuk]qk+δxk⊤qk+21δxk⊤Qkδxk+δuk⊤rk+21δuk⊤Rkδuk
其中 AkA_{k}Ak 和 BkB_{k}Bk 可以由已知的动力学规律在轨迹 {x‾(k)}\{\overline{x}(k)\}{x(k)} 附近求导得到,各种Q和R都可以对于损失函数在现有轨迹附近求导得到, [公式] 是由上述列向量拼成的,反映的是控制引起的噪声。即,认为各种A、B、C、Q、R已知
假设有state value function写成如下形式
vk(δx)=sk+δx⊤sk+12δx⊤Skδxv_{k}(\delta \mathbf{x})=s_{k}+\delta \mathbf{x}^{\top} \mathbf{s}_{k}+\frac{1}{2} \delta \mathbf{x}^{\top} S_{k} \delta \mathbf{x}vk(δx)=sk+δx⊤sk+21δx⊤Skδx
应用Bellman方程
vk(δx)=v_{k}(\delta \mathbf{x})=vk(δx)= immediate cost +E[vk+1(next state )]+\mathrm{E}\left[v_{k+1}(\text { next state })\right]+E[vk+1( next state )]
可以求得到
vk(δx)=qk+sk+1+12∑ici⊤Sk+1ci+δx⊤(qk+Ak⊤sk+1)+12δx⊤(Qk+Ak⊤Sk+1Ak)δx+π⊤(g+Gδx)+12π⊤Hπ\begin{aligned} v_{k}(\delta \mathbf{x})=& q_{k}+s_{k+1}+\frac{1}{2} \sum_{i} \mathbf{c}_{i}^{\top} S_{k+1} \mathbf{c}_{i} \\ &+\delta \mathbf{x}^{\top}\left(\mathbf{q}_{k}+A_{k}^{\top} \mathbf{s}_{k+1}\right) \\ &+\frac{1}{2} \delta \mathbf{x}^{\top}\left(Q_{k}+A_{k}^{\top} S_{k+1} A_{k}\right) \delta \mathbf{x} \\ &+\pi^{\top}(\mathbf{g}+G \delta \mathbf{x})+\frac{1}{2} \pi^{\top} H \pi \end{aligned}vk(δx)=qk+sk+1+21i∑ci⊤Sk+1ci+δx⊤(qk+Ak⊤sk+1)+21δx⊤(Qk+Ak⊤Sk+1Ak)δx+π⊤(g+Gδx)+21π⊤Hπ
假设具有形如δu=πk(δx)=Ik+Lkδx\delta u=\pi_{k}(\delta x)=I_{k}+L_{k} \delta xδu=πk(δx)=Ik+Lkδx的闭环控制形式,可以得到最优控制(具体讨论见附注)
1k=−H−1g,Lk=−H−1G\mathbf{1}_{k}=-H^{-1} \mathbf{g}, \quad L_{k}=-H^{-1} G1k=−H−1g,Lk=−H−1G
并且可以求得到state value function
vk(δx)=qk+sk+1+12∑ici⊤Sk+1ci+δx⊤(qk+Ak⊤sk+1)+12δx⊤(Qk+Ak⊤Sk+1Ak)δx+1k⊤g+12Ik⊤Hlk+δx⊤(G⊤1k+Lk⊤g+Lk⊤Hlk)+12δx⊤(Lk⊤HLk+Lk⊤G+G⊤Lk)\begin{aligned} v_{k}(\delta \mathbf{x})=& q_{k}+s_{k+1}+\frac{1}{2} \sum_{i} \mathbf{c}_{i}^{\top} S_{k+1} \mathbf{c}_{i} \\ &+\delta \mathbf{x}^{\top}\left(\mathbf{q}_{k}+A_{k}^{\top} \mathbf{s}_{k+1}\right) \\ &+\frac{1}{2} \delta \mathbf{x}^{\top}\left(Q_{k}+A_{k}^{\top} S_{k+1} A_{k}\right) \delta \mathbf{x} \\ &+\mathbf{1}_{k}^{\top} \mathbf{g}+\frac{1}{2} \mathbf{I}_{k}^{\top} H \mathbf{l}_{k}+\delta \mathbf{x}^{\top}\left(G^{\top} \mathbf{1}_{k}+L_{k}^{\top} \mathbf{g}+L_{k}^{\top} H \mathbf{l}_{k}\right) \\ &+\frac{1}{2} \delta \mathbf{x}^{\top}\left(L_{k}^{\top} H L_{k}+L_{k}^{\top} G+G^{\top} L_{k}\right) \end{aligned}vk(δx)=qk+sk+1+21i∑ci⊤Sk+1ci+δx⊤(qk+Ak⊤sk+1)+21δx⊤(Qk+Ak⊤Sk+1Ak)δx+1k⊤g+21Ik⊤Hlk+δx⊤(G⊤1k+Lk⊤g+Lk⊤Hlk)+21δx⊤(Lk⊤HLk+Lk⊤G+G⊤Lk)
进行比对可以得到
其中
算法流程
找到一条初始的轨迹 {x‾(k),u‾(k)}\{\overline{x}(k), \overline{u}(k)\}{x(k),u(k)} ,然后反复进行如下迭代:
- 做动态规划找到更好的控制序列:按照 k=K,K−1,⋯,1k=K, K-1, \cdots, 1k=K,K−1,⋯,1的顺序迭代,计算新的控制规律参数δuk=Ik+Lkδxk\delta u_{k}=I_{k}+L_{k} \delta x_{k}δuk=Ik+Lkδxk和 vk(δx)=sk+skTδx+12δxTSkδxv_{k}(\delta x)=s_{k}+s_{k}^{T} \delta x+\frac{1}{2} \delta x^{T} S_{k} \delta xvk(δx)=sk+skTδx+21δxTSkδx ;
- 更新新的轨迹:按照 k=1,2,⋯,Kk=1, 2, \cdots, Kk=1,2,⋯,K的顺序迭代,根据上步计算到的控制规律和 δxk+1=Akδxk+Bkδuk\delta x_{k+1}=A_{k} \delta x_{k}+B_{k} \delta u_{k}δxk+1=Akδxk+Bkδuk 计算新的轨迹;
Iterative Linear Quadratic Gaussian(iLQG)相关推荐
- 释义:Linear temporal logic (LTL)浅析
文章目录 前言 正文 小结 参考文献 前言 创作开始时间:2021年3月22日07:55:11 如题.简要解释一下LTL线性时间逻辑. 正文 主要参考: wiki词条:Linear_temporal_ ...
- 问题三十五: 怎么用ray tracing画二次曲面(quadratic surfaces)(2)——单页双曲面、双页双曲面、椭圆锥面、椭圆柱面
35.2.1 数学推导 单页双曲面.双页双曲面.椭圆锥面.椭圆柱面. 这四个二次曲面方程共同形式: 但是,注意到,这些曲面都是开放曲面.在画图时,需要限制曲面的范围(以免曲面覆盖整个画面). 我们在这 ...
- 问题三十五: 怎么用ray tracing画二次曲面(quadratic surfaces)(3)——椭球抛物面
35.3 椭球抛物面 35.3.1 数学推导 椭球抛物面的方程如下: 所以,其一:我们需要对两个实根进行排序(先处理小的) 另外,由于,是开放曲面,也就是,光线有可能撞击到曲面的正反两面,所以,对于撞 ...
- 问题三十五: 怎么用ray tracing画二次曲面(quadratic surfaces)(1)——椭球面
二次曲面包括:球面.椭圆球面.单页双曲面.双页双曲面.椭圆锥面.椭圆柱面.椭圆抛物面.双曲抛物面等等. 注意到:只有球面和椭球面是封闭面,其他的都是开放面. 二次曲面是有方程的(我们已经学过的多边形. ...
- 问题三十五: 怎么用ray tracing画二次曲面(quadratic surfaces)(4)——双曲抛物面(马鞍面)
35.4 双曲抛物面(马鞍面) 35.4.1 数学推导 双曲抛物面的方程如下: 35.4.2 看C++代码实现 -------------------------------------------- ...
- 问题三十五: 怎么用ray tracing画二次曲面(quadratic surfaces)(5)——汇总
二次曲面来张合照: hitable *list[9];list[0] = new sphere(vec3(0.0,-100.5,-1), 100, new lambertian(vec3(0.8, 0 ...
- Quadratic equation(二次剩余)2019牛客多校第九场
链接:https://ac.nowcoder.com/acm/contest/889/B 来源:牛客网 题目描述 Amy asks Mr. B problem B. Please help Mr. B ...
- Linear Algebra - Determinant(几何意义)
二阶行列式的几何意义 二阶行列式 \(D = \begin{vmatrix}a_1&a_2\\b_1&b_2\end{vmatrix} = a_1b_2 - a_2b_1\) 的几何意 ...
- 2019 牛客多校第9场 B Quadratic equation(二次剩余)
题意: x + y = b(mod p) x * y = c(mod p) 题目给出b,c ,p = 1e9 + 7,求解x y 要求(0≤x≤y<p),若没有可行解,输出-1 -1 题解: x ...
- 欠驱动机器人学-麻省理工学院开放课程-MIT 6.832: Underactuated Robotics(译)
课程链接:http://underactuated.csail.mit.edu/Spring2019/ http://underactuated.csail.mit.edu/underactuated ...
最新文章
- oracle text db2,从Oracle 到DB2(一)
- 10 个小技巧:快速用 Python 进行数据分析
- 将VMware Workstation 12 Pro的虚拟网卡修改为自己希望的IP网段
- URLDecoder: Illegal hex characters in escape (%) pattern ...
- 小汤学编程之JavaEE学习day08——Maven
- frobenius范数_非负矩阵之Perron-Frobenius定理
- 的ppt_PPT模板中国风PPT模板
- VC++2012编程演练数据结构《36》磁盘文件进行排序
- 继承与data member之单一继承
- (转)美国证监会SEC发布调查报告,认定ICO为证券投资邀约
- python写小说阅读器_用python实现自己的小说阅读器
- webrtc 共享屏幕延时测试
- 延迟微分方程(matlab求解)
- 湘潭大学计算机专业科目,湘潭大学(专业学位)计算机技术研究生考试科目和考研参考书目...
- Java面试宝典(2021版)
- 迅雷冻结3亿链克,停止国际版支持,这个区块链项目基本凉了
- 【rdma_cm】rdma_cm API
- 建网站(为什么租服务器和购买域名)
- Spring Boot HATEOAS的基本使用
- 【FLASH】写MSP430片内flash|FLASH 读写等操作 学习
热门文章
- 肯德基 服务器响应异常,肯德基链接服务器异常
- 获取计算机主机mac地址的命令有,Mac系统获取远程电脑MAC地址的两种简单方法
- HTML--video中的自动播放autoplay以及循环播放loop+更多多媒体标签
- 人们有时对机率存在的错误的认识
- C# 001 Windows7 WiFi共享大师 共享精灵 自制无广告精简版本
- HTC Vive开发笔记之手柄震动
- 计算机开机显示器不亮,电脑开机显示器不亮,小编教你电脑显示器不亮怎么解决...
- 运行时错误‘53’:文件未找到:MathPage.WLL
- AI插画设计,用AI制作一个只可爱的短腿柯基插画
- vue按钮字体大小设置_vue添加文字怎么设置时长