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

(七)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.xdnf.cn/news/1534179.html

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

相关文章

GD32F4开发 -- FreeRTOS移植

之前讲过FreeRTOS,参看:FreeRTOS学习 – 再识 讲解了什么是FreeRTOS、FreeRTOS的特点、源码下载和目录文件介绍。 这里就不做更多讲解了,直接介绍怎么移植。 一、下载 官网: https://www.freertos.org/zh-cn-cmn-s/ 源码下载&a…

【C++二分查找 容斥原理】1201. 丑数 III

本文涉及的基础知识点 C二分查找 容斥原理:组合数学汇总 LeetCode1201. 丑数 III 丑数是可以被 a 或 b 或 c 整除的 正整数 。 给你四个整数:n 、a 、b 、c ,请你设计一个算法来找出第 n 个丑数。 示例 1: 输入:n …

总结拓展九:SAP数据迁移(2)

第三节 数据迁移工具LTMC实操 1、供应商(BP)主数据导入 1.1 首先在SAP S 4系统,通过事务代码“LTMC”跳转进入数据迁移控制台(网页版); 1.2 点击“创建”按钮,创建迁移项目“NJDHMM-01”; 传…

大模型→世界模型下的「认知流形」本质·下

本篇内容节选自今年初我撰写的那篇10万的文章《融合RL与LLM思想,探寻世界模型以迈向AGI》,其观点也是文章中核心中的核心。 想进一步完整阅读的小伙伴可关注评论,节选内容如下↓ 接上篇..“因此当前无论对先验自回归学习下的LLMs也好还是未来…

基于python+django+vue的社区爱心养老管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的社…

用Python实现时间序列模型实战——Day 20: 时间序列预测的综合练习

一、学习内容 在本节中,我们将综合应用前几周学习的时间序列分析与预测方法,完成一个完整的时间序列预测项目,包含从数据预处理、异常检测、模型选择、预测到评估的全流程。项目流程: 1. 数据获取与预处理 数据加载&#xff0c…

三、二叉树-算法总结

文章目录 三、二叉树3.1 二叉树遍历3.1.1 前序遍历3.1.2 中序遍历3.1.3 后序遍历3.1.4 DFS 深度搜索3.1.5 BFS 广度搜索3.1.6 BFS 广度搜索 2 3.2 二叉树分治3.2.1 检验二叉搜索树3.2.2 二叉树的最大深度3.2.3 平衡二叉树 3.3 二叉树分治法3.3.1 二叉树中的最大路径和3.3.2 二叉…

mysql数据库如何开启binlog日志

首先我们要知道什么是binlog日志 binlog是 MySQL数据库的二进制日志文件,记录了数据库更改的所有操作,但不包括SELECT和SHOW这类操作,这些操作对数据进行修改、管理操作、数据库修改等操作都会被记录在日志中。 对于一个sql,它…

Qt-QPushButton按钮类控件(22)

目录 描述 使用 给按钮添加图片 给按钮添加快捷键 添加槽函数 添加快捷键 添加组合键 开启鼠标的连发功能 描述 经过上面的一些介绍,我们也尝试的使用过了这个控件,接下来我们就要详细介绍这些比较重要的控件了 使用 给按钮添加图片 我们创建…

在线IP代理检测:保护您的网络安全

在互联网飞速发展的今天,越来越多的人开始意识到网络安全和隐私保护的重要性。在线IP代理检测工具作为一种有效的网络安全手段,能够帮助用户识别和检测IP代理的使用情况,从而更好地保护个人隐私和数据安全。本文将详细介绍在线IP代理检测的相…

最好用的翻译器:什么是DeepL?如何订阅支付DeepL,订阅DeepL Pro以及申请DeepL API?

DeepL目前最好用的翻译软件,如果是学习翻译的同学或者海外客户翻译,一定不能错过,用它来处理文件,论文等翻译是最好不过了的!!! AI翻译技术的飞速发展正在颠覆我们的沟通方式,打破语…

预测日前电价:回顾最先进的算法、最佳实践和公开基准——阅读笔记

Forecasting day-ahead electricity prices: A review of state-of-the-art algorithms, best practices and an open-access benchmark 预测日前电价:回顾最先进的算法、最佳实践和公开基准 Applied Energy (2021) 摘要:电价预测在过去二十年间已经得到…

【pycharm】安装以及简单使用教程

以windows版本举例: 1、首先去Pycharm官网,或者直接输入网址:http://www.jetbrains.com/pycharm/download/#sectionwindows,下载PyCharm安装包,根据自己电脑的操作系统进行选择,对于windows系统选择下图的…

苹果CMS影视程序被举报侵权?有效解决方案指南

在当今数字时代,影视版权问题成为了许多网站面临的主要挑战。如果你使用苹果CMS进行影视内容管理,可能会遇到版权举报的问题。幸运的是,有一种有效的解决方案可以帮助你应对这些挑战——苹果CMS插件,它能够屏蔽原视频内容&#xf…

网络药理学:2、文章基本思路、各个数据库汇总与比对、其他相关资料(推荐复现的文章、推荐学习视频、论文基本框架、文献基本知识及知网检索入门)

一、文章基本思路(待更) 一篇不含分子对接和实验的纯网络药理学文章思路如下: 即如下: 二、 各个数据库(待更) 三、其他相关资料 1.推荐复现的文章 纯网络药理学分子对接:知网&#xff1…

《C++》解密--顺序表

一、线性表 线性表是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈...... 线性表在【逻辑上】是线性结构…

单调队列的实现

这是C算法基础-数据结构专栏的第二十五篇文章,专栏详情请见此处。 引入 单调队列就是满足单调性的队列,它最经典的应用就是给定一个序列和一个窗口,使窗口在序列中从前向后滑动,求出窗口在每个位置时,其中元素的最大/小…

STM32启用FPU浮点运算

这篇文章产生背景:其他人的文章太杂了,对我这种菜鸡无法接受; 参考文章: stm32h743单片机嵌入式学习笔记7-FPU_stmh743vit4-CSDN博客 stm32F407 打开 FPU(浮点运算处理器)_stm32f407开启fpu-CSDN博客 STM32F4CubeMXHal库下使能…

第J1周:ResNet-50算法实战与解析

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 文章目录 一、前期工作1、ResNet-50总体结构2、设置GPU3、导入数据 二、数据预处理1、加载数据2、可视化数据3、再次检查数据4、配置数据集 三、构建ResNet-50…

初级练习[2]:Hive SQL查询汇总分析

目录 SQL查询汇总分析 成绩查询 查询编号为“02”的课程的总成绩 查询参加考试的学生个数 分组查询 查询各科成绩最高和最低的分 查询每门课程有多少学生参加了考试(有考试成绩) 查询男生、女生人数 分组结果的条件 查询平均成绩大于60分的学生的学号和平均成绩 查询至少…