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

一、说明

        在本博客系列中,我们将了解最优控制的经典方法,这些方法在某种程度上为强化学习等更熟悉的主题奠定了坚实的基础。这两个领域之间存在着不可避免的共同边界,本系列旨在提出这些最优控制的形式化方法,作为强化学习方法的有效替代方案。最优控制或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.mzph.cn/news/11574.shtml

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

相关文章

从Vue 2到Vue 3:深入了解路由配置的变化与升级建议

🎬 岸边的风:个人主页 🔥 个人专栏:《 VUE 》 《 javaScript 》 ⛺️生活的理想,就是为了理想的生活! 目录 📘 前言 vue2路由配置 📟 一、控制台安装vue路由 📟 二、项目src文件夹下创建r…

基于SSM+JSP+LayUI的宿舍管理系统

修正初始账号密码 默认账号:admin,默认密码:123456修复后台管理头像消失功能相对简单些,可能需要添加一些功能,需要源码免费提供需要运行服务、添加功能等联系我

matlab BP神经网络对iris数据集进行分类

iris数据集 本文所用数据集👉👉👉iris分类数据集 1.数据预处理 %% 1.数据预处理 oridatareadtable(Iris.xls,Sheet,Sheet1); Xtable2array(oridata(:,(1:4))); % X转化为array类型 Ytable2array(oridata(:,5)); % Y因为包含中文字符&…

STM32CUBUMX配置FLASH(W25Q128)--保姆级教程

———————————————————————————————————— ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子,使用STM32CUBEMX做了很多驱动&#x…

(css)AI智能问答页面布局

(css)AI智能问答页面布局 效果&#xff1a; html <!-- AI框 --><div class"chat-top"><div class"chat-main" ref"chatList"><div v-if"!chatList.length" class"no-message"><span>欢迎使…

OpenLayers入门,OpenLayers地图初始化时如何设置默认缩放级别、设置默认地图中心点、最大缩放级别和最小缩放级别以及默认坐标系

专栏目录: OpenLayers入门教程汇总目录 前言 OpenLayers地图初始化时如何设置默认缩放级别、初始化时设置默认地图中心点、设置最大缩放级别和最小缩放级别,超过缩放级别用户无法再放大和缩小,和设置默认坐标系。 二、依赖和使用 "ol": "^6.15.1"使用…

Python GDAL为具有多个波段的大量栅格图像绘制像素随时间变化走势图

本文介绍基于Python中的gdal模块&#xff0c;对大量长时间序列的栅格遥感影像文件&#xff0c;绘制其每一个波段中、若干随机指定的像元的时间序列曲线图的方法。 在之前的文章Python中GDAL批量绘制多时相栅格遥感影像的像元时间序列曲线图&#xff08;https://blog.csdn.net/z…

【LLM】浅析chatglm的sft+p-tuning v2

note GLM将针对不同类型下游任务的预训练目标统一为了自回归填空&#xff0c;结合了混合的注意力机制和新的二维位置编码。本文浅析sft&#xff0c;并基于GLM在广告描述数据集上进行sftp-tuning代码的数据流讲解 文章目录 note零、ChatGLM2模型一、Supervised fine-tuning1. 数…

C#时间轴曲线图形编辑器开发2-核心功能实现

目录 三、关键帧编辑 1、新建Winform工程 &#xff08;1&#xff09;界面布局 &#xff08;2&#xff09;全局变量 2、关键帧添加和删除 &#xff08;1&#xff09;鼠标在曲线上识别 &#xff08;2&#xff09;键盘按键按下捕捉 &#xff08;3&#xff09;关键帧添加、删…

Unity自定义后处理——用偏导数求图片颜色边缘

大家好&#xff0c;我是阿赵。   继续介绍屏幕后处理效果的做法。这次介绍一下用偏导数求图形边缘的技术。 一、原理介绍 先来看例子吧。   这个例子看起来好像是要给模型描边。之前其实也介绍过很多描边的方法&#xff0c;比如沿着法线方向放大模型&#xff0c;或者用Ndo…

Palo Alto Networks 智能网络安全保护任何地方的用户、应用和数据

Palo Alto Networks 不仅能够为数字企业提供当下所需的网络安全服务&#xff0c;还能为日后的工作打好安全基础&#xff0c;让企业无需在二者间权衡和纠结&#xff0c;这样的网络安全合作伙伴仅此一家。我们承诺将双管齐下&#xff0c;在保障数字企业的安全方面绝不妥协退让。下…

专题-【排序比较】

时间最好&#xff1a;直接和冒泡&#xff0c;n 堆排序和归并时间固定&#xff1a;nlog2n 空间&#xff1a;归并&#xff0c;n&#xff1b;快速&#xff0c;log2n 稳定&#xff1a;直冒归基

Sharding-JDBC分布式事务详解与实战

&#x1f680; ShardingSphere &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&…

K8s卷存储详解(二)

K8s卷存储详解&#xff08;二&#xff09; 持久卷持久卷&#xff08;PV&#xff09;持久卷申领&#xff08;PVC&#xff09;存储类&#xff08;StorageClass&#xff09;存储制备器&#xff08;Provisioner&#xff09;PV和PVC的生命周期持久卷的类型CSI 卷快照CSI 卷克隆 投射…

多租户的低代码平台,Saas开发平台:MateCloud

简介 MateCloud是一款基于Spring Cloud Alibaba的微服务架构。目前已经整合Spring Boot 2.7.0、 Spring Cloud 2021、Spring Cloud Alibaba 2021、Spring Security Oauth2、Feign、Dubbo、JetCache、RocketMQ等&#xff0c;支持多租户的低代码平台&#xff0c;Saas平台开发套件…

Elasticsearch-增删改查数据工作原理

集群 集群的基本概念&#xff1a; 集群&#xff1a;ES 集群由一个或多个 Elasticsearch 节点组成&#xff0c;每个节点配置相同的 cluster.name 即可加入集群&#xff0c;默认值为 “elasticsearch”。节点&#xff1a;一个 Elasticsearch 服务启动实例就是一个节点&#xff…

【Linux】线程同步条件变量

目录 1 线程同步的引入 2 条件变量&线程同步&竞争条件的概念 3 条件变量相关函数 初始化 销毁 等待条件满足 唤醒等待 4 demo代码——理解条件变量&线程同步 5 为什么 pthread_cond_wait 需要互斥量? 6 条件变量使用规范 1 线程同步的引入 例子生活化&…

【多任务编程-线程通信】

进程/线程通信的方式 某些应用程序中&#xff0c;进程/进程和线程/线程之间不可避免的进行通信&#xff0c;进行消息传递&#xff0c;数据共享等 同一进程的线程之间通信方式包括Windows中常用Event, Message等。 不同进程之间的通信可以利用Event, FileMapping(内存共享), W…

24考研数据结构-栈和队列的应用

目录 3.3.1栈在括号匹配中的应用流程图算法代码 3.3.2栈在表达式求值中的应用1. 中缀表达式 (需要界限符)2. 后缀表达式 (逆波兰表达式)中缀表达式转后缀表达式-手算重点&#xff1a;中缀表达式转后缀表达式-机算重点&#xff1a;后缀表达式的计算—机算 3.前缀表达式 (波兰表达…

杭电oj Simple Set Problem 双指针 尺取法 满注释版

&#x1f468;‍&#x1f3eb; 题目地址 输入 3 2 1 6 3 -7 7 10 4 9 -5 -9 2 8 5 4 3 3 8 2 10 8 1 -7 3 1 6 10 1 1 9输出 1 15 0使用快读&#xff0c;避免使用 Arrays.fill() 按需初始化 避免卡常 &#x1f351; 思路 &#x1f37a; AC code import java.io.*; import ja…