RL vs 最优控制:用于轨迹跟踪的 LQR(使用 Python 代码)

news/2025/2/19 8:14:15/

一、说明

        在本博客系列中,我们将了解最优控制的经典方法,这些方法在某种程度上为强化学习等更熟悉的主题奠定了坚实的基础。这两个领域之间存在着不可避免的共同边界,本系列旨在提出这些最优控制的形式化方法,作为强化学习方法的有效替代方案。最优控制或RL旨在在某些约束和不断变化的系统动态下找到顺序行动/控制的最佳方法。

二、关于最佳控制

图1:要遵循的航点

        在我们进入主题之前,让我们举一个简单的动机示例,它有助于在最佳控制方法中形式化不同的术语。
轨迹优化:您的汽车被赋予一项任务,以遵循定义的航点或轨迹的方式控制自己。

If 𝓾ᵢ is the control of car at time step i𝓾ᵢ= { throttle, Steering }ᵢ

        所以汽车需要应用一系列控制步骤U:u₀,u₁,u₂... un 并到达所有航点,如图 1 所示。问题的这种顺序性质使这个问题与其他问题非常不同,这些问题可以使用最优控制轻松解决

        我们需要更正式的定义来为该方法和我们的直觉提供结构。

三、正规化Formalism

任务是找到一个允许的控制轨迹U,使用动态系统f生成相应的状态轨迹X,使得成本函数J(U)最小化。

        不要被突然涌入的行话吓倒,如果打破定义并使用我们的动机示例理解每个术语,它们非常直观。
        1.控制轨迹(U):控制UI是时间步骤i的输入,系列是这些控制步骤(油门,转向)将帮助汽车达到通过所有航点的目标。
        2.S tate 轨迹 (X):状态 xi 是对当前场景的描述。例如:我们汽车的“状态”包括机器人在世界上的当前位置(例如X,Y坐标)和方向(偏航γ)。此状态显然受到控制输入更改的影响。

        3. 动态系统(f):这只是一个数学模型,它讲述了世界是如何运作的。简单来说,这个数学模型 f 预测从状态 xi 执行操作 UI 时的下一个状态 xi+₁。

        在动力车的例子中,我们可以使用简单的运动学方程在数学上确定系统动力学f

        4. 成本函数(J):最优控制是关于成本函数的。它帮助我们在数学上描述顺序问题陈述的目标/任务。最优控制方法通过优化成本函数 J(U) 来计算最优轨迹 U

        在开始时定义的轨迹问题中,目标是到达定义的航点。我们可以将成本函数定义为汽车位置和下一个航点之间的余弦距离,因此,当我们最小化余弦距离成本时,我们更接近下一个航点。

四、线性二次稳压器 (LQR)

        最优控制问题的一个特例,其中动态方程f是线性的,目标函数是x和u的二次函数。 这个子问题在最优控制中是非常基本的,因为存在使用微分李嘉蒂方程的LQR问题的解析解

        让我们快速定义 LQR 的系统动力学函数 (f)、成本函数 J(U),我们将通过用 python 编码 LQR 解决方案来解决汽车轨迹优化问题。

        所以这个想法很简单,动力学方程是线性的,我们使用矩阵A和B来描述线性。成本函数 J(U) 不太明显:它是 x 和 u 的二次函数,

        Q(t) 称为状态成本矩阵。Q 帮助我们权衡状态向量中每个状态的相对重要性。Q 惩罚不良性能。Q 使我们能够通过使相应的 Q 值变大来定位我们想要低误差的状态。 R(t) 是输入成本矩阵。此矩阵会惩罚控制。

五、解:代数里卡蒂方程

        我们将简要讨论 LQR 问题的解析解。这是一种简化,可以得出有效的解决方案:控制律可以表示为线性状态反馈

        R 是输入成本矩阵,B 是输入矩阵。现在 S(t) 是微分李嘉蒂方程的解:

        这个问题的解决方案可以使用向后归纳法找到,我们将直接跳到最终的解决方案:

六、轨迹跟踪问题:LQR

        现在我们将使用 LQR 和 python 实现汽车轨迹跟踪问题。为了在最优控制范式中定义问题,我们需要定义状态、控制、系统动力学和成本函数。

        我们在引入问题本身时定义了状态向量。

        接下来,我们需要定义线性的系统动力学方程。

        控制 UI 包括速度和转向输入。现在我们可以使用一个简单的无摩擦运动学方程来近似世界上的汽车运动。

接下来是使用矩阵操作来查找 A 和 B 矩阵

        Q 惩罚您希望汽车的位置与现在的位置之间的巨大差异。Q 使我们能够通过使相应的 Q 值变大来定位我们想要低误差的状态。Q 沿对角线具有正值,其他地方为零。

        代码在此存储库中可用:打开ipython以提供不同的航点并自己测试分析解决方案。

七、结果和演示

        这是一个简单的问题,其中时间步长保持较大,这意味着代理可以覆盖更大的距离是单个时间步长。航点彼此垂直,因此汽车从一个航点到另一个航点采取半圆形轨迹。

        我们提供了更平滑的轨迹,航点保持非常接近。LQR 非常有效地工作。

        让我们给出更复杂的轨迹并观察不同的控制参数

        我们可以在这里观察到轨迹非常接近。

感谢您抽出宝贵时间!

Kowshik chilamkurthy


http://www.ppmy.cn/news/986671.html

相关文章

SOLIDWORKS 运行缓慢?了解如何诊断SOLIDWORKS大型装配性能问题?

在打开装配时,您的SOLIDWORKS运行缓慢吗?或者不仅打开时间慢,每次点击、旋转或缩放都会产生延迟。 好消息是,我们是可以改善装配加载性能的,困难的部分是需要知道从哪里入手。本文中,我们将研究如何诊断SO…

云原生训练营课程大纲

第一部分:Go 语****言基础 模块一:Go 语言特性 教学目标: 理解 Go 语言基本语法 理解 Go 语言常用数据类型 理解 Go 语言常用小技巧 深入理解 Go 语言的多线程编程 针对的用户痛点: 云原生从业者因为未熟练掌握 Go 语言&#…

Matplotlib_概述_绘制图象

⛳绘制基础 在使用 Matplotlib 绘制图形时,其中有两个最为常用的场景。一个是画点,一个是画线。 pyplot 基本方法的使用如下表所示 方法名说明title()设置图表的名称xlabel()设置 x 轴名称ylabel()设置 y 轴名称xticks(x, ticks, rotation)设置 x 轴的…

【Golang】Golang进阶系列教程--为什么 Go 语言 struct 要使用 tags

文章目录 前言struct tags 的使用使用反引号避免使用空格避免重复使用标准化的 tag 名称多个 tag 值 struct tags 的原理struct tags 的优势常用的 struct tags参考文章: 前言 在 Go 语言中,struct 是一种常见的数据类型,它可以用来表示复杂…

Mnist分类与气温预测任务

目录 传统机器学习与深度学习的特征工程特征向量pytorch实现minist代码解析归一化损失函数计算图Mnist分类获取Mnist数据集,预处理,输出一张图像面向工具包编程使用TensorDataset和DataLoader来简化数据预处理计算验证集准确率 气温预测回归构建神经网络…

SAP财务系统中的“复式记账法”

1. 前言 “复式记账法”是财务的基础知识,对于财务出身的小伙伴是so easy,但对于技术出身的同学,通常会被“借贷”关系弄的晕头转向。 本文会简明扼要的总结“复式记账法”的基本原理,并以采购和销售流程为例来介绍如何进行复式…

短视频矩阵源码/系统搭建/源码

一、短视频矩阵系统开发需要具备以下能力 短视频技术能力:开发人员应具备短视频相关技术能力,如视频编解码、视频流媒体传输等。 大数据存储和处理能力:短视频矩阵系统需要处理大量的视频数据,因此需要具备大数据存储和处理的能力…

HCIP——OSPF的重发布以及路由策略

OSPF重发布以及路由策略 一、重发布1、作用2、条件3、规则4、名词解释点向 5、单点重发布6、双点重发布 二、路由策略1、控制层流量和数据层流量2、抓流量ACL列表前缀列表 (ip-prefix) 3、做策略过滤策略(filter-policy)路由策略(route-policy) 一、重发布 在同一个网络拓扑结…