【动手学运动规划】5.4 二次规划问题:QP优化

站在天堂看地狱,人生就像情景剧;站在地狱看天堂,为谁辛苦为谁忙。 —武林外传 白展堂

🏰代码及环境配置:请参考 环境配置和代码运行!


在运动规划算法中, QP优化是非常常见的优化问题形式, 本节我们将进行介绍.

5.4.1 QP优化定义

二次规划(Quadratic Programming)优化,是指优化问题的目标函数为二次函数, 且约束条件为线性的问题。定义如下:

minimize ⁡ 1 2 x T P x + q T x  subject to  l ≤ A x ≤ u \begin{array}{ll}\operatorname{minimize} & \frac{1}{2} x^T P x+q^T x \\\text { subject to } & l \leq A x \leq u\end{array} minimize subject to 21xTPx+qTxlAxu

  • 决策变量是 x ∈ R n x \in \mathbf{R}^n xRn
  • 目标函数: 二次函数, 矩阵 P ∈ R n × n P \in \mathbf{R}^{n \times n} PRn×n并是一个对称矩阵, 向量 q ∈ R n q \in \mathbf{R}^n qRn
  • 线性约束: 矩阵 A ∈ R m × n A \in \mathbf{R}^{m \times n} ARm×n, 上下界向量 l , u l,u l,u确定.

5.4.2 QP优化的特点

首先我们介绍一下半正定矩阵定义:

A A A 是一个 n × n n \times n n×n 的实对称矩阵,如果对所有的非零实向量 x ∈ R n x \in \mathbb{R}^n xRn,都有 x T A x ≥ 0 x^T A x \geq 0 xTAx0,则称 A A A 为半正定矩阵。特别地,如果 x T A x > 0 x^T A x > 0 xTAx>0 对所有非零 x x x 都成立,则称 A A A 为正定矩阵。

在QP优化问题中, 当 P P P矩阵是半正定矩阵时, 该问题是一个凸二次规划问题. 对于凸优化问题, 极值点就是全局最优解, 具有求解快速的优点.

5.4.3 求解器

在工程中, 我们经常会调用现有的求解器来完成优化问题. 这样可以专注于构造合适的优化问题来解决运动规划问题, 而不是求解优化问题本身. 这很适合初学者快速上手相关运动规划算法.

有这样几种常见的QP优化求解器:

  • OSQP
  • qpOASES
  • OOQP

其中OSQP(Operator Splitting Quadratic Program)是一个在运动规划算法中被广泛运用的求解器。它基于交替乘子法(Alternating Direction Method of Multipliers, ADMM)求解QP问题, 我们将基于OSQP求解一个简单的例子.

5.4.4 例子

我们定义了这样一个QP问题, 目标函数是二次函数, 约束条件是3个线性约束:

m i n i m i z e   f ( x ) = 2 x 1 2 + x 2 2 + x 1 x 2 + x 1 + x 2  subject to   1 ≤ x 1 + x 2 ≤ 1 0 ≤ x 1 ≤ 0.7 0 ≤ x 2 ≤ 0.7 \begin{align*} minimize \ f(x)=2x_1^2 &+x_2^2+x_1 x_2 +x_1+x_2 \\ \text { subject to } \ 1\leq x_1&+x_2\leq 1 \\ 0\leq &x_1\leq 0.7 \\ 0\leq &x_2\leq 0.7 \end{align*} minimize f(x)=2x12 subject to  1x100+x22+x1x2+x1+x2+x21x10.7x20.7

x = [ x 1 x 2 ] x=\left[\begin{array}{l}x_1 \\x_2\end{array}\right] x=[x1x2], 将问题整理成矩阵的形式:

minimize ⁡ f ( x ) = 1 2 x T [ 4 1 1 2 ] x + [ 1 1 ] T x  subject to  [ 1 0 0 ] ≤ [ 1 1 1 0 0 1 ] x ≤ [ 1 0.7 0.7 ] \begin{array}{ll}\operatorname{minimize} & f(x)=\frac{1}{2} x^T\left[\begin{array}{ll}4 & 1 \\1 & 2\end{array}\right] x+\left[\begin{array}{l}1 \\1\end{array}\right]^T x \\\text { subject to } & {\left[\begin{array}{l}1 \\0 \\0\end{array}\right] \leq\left[\begin{array}{ll}1 & 1 \\1 & 0 \\0 & 1\end{array}\right] x \leq\left[\begin{array}{c}1 \\0.7 \\0.7\end{array}\right]}\end{array} minimize subject to f(x)=21xT[4112]x+[11]Tx 100 110101 x 10.70.7

将对应的矩阵整理到代码中, 就可以调用OSQP求解这个QP问题了

import osqp
import numpy as np
from scipy import sparse

# Define problem data
P = sparse.csc_matrix([[4, 1], [1, 2]])
q = np.array([1, 1])
A = sparse.csc_matrix([[1, 1], [1, 0], [0, 1]])
l = np.array([1, 0, 0])
u = np.array([1, 0.7, 0.7])

# Create an OSQP object
prob = osqp.OSQP()

# Setup workspace and change alpha parameter
prob.setup(P, q, A, l, u, alpha=1.0)

# Solve problem
res = prob.solve()
print(f"optimal x:{res.x}")
python tests/optimization/osqp_test.py

求解结果如下:

status:               solved
number of iterations: 50
optimal objective:    1.8800
run time:             3.42e-05s
optimal rho estimate: 1.36e+00

optimal x:[0.30000019 0.69999981]

🏎️自动驾驶小白说官网:https://www.helloxiaobai.cn

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ABP框架9——自定义拦截器的实现与使用

一、AOP编程 AOP定义:面向切片编程,着重强调功能,将功能从业务逻辑分离出来。AOP使用场景:处理通用的、与业务逻辑无关的功能(如日志记录、性能监控、事务管理等)拦截器:拦截方法调用并添加额外的行为,比如…

基于YoloV11和驱动级鼠标模拟实现Ai自瞄

本文将围绕基于 YoloV11 和驱动级鼠标实现 FPS 游戏 AI 自瞄展开阐述。 需要着重强调的是,本文内容仅用于学术研究和技术学习目的。严禁任何个人或组织将文中所提及的技术、方法及思路应用于违法行为,包括但不限于在各类游戏中实施作弊等违规操作。若因违…

示例代码:C# MQTTS双向认证(客户端)(服务器EMQX)

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

记录IMX6ULL开发板上移植SQLite3并运行Qt程序

文章目录 概要移植SQLite3Qt程序部署实验现象 概要 基于上一章对使用Qt运行对应的实验实例来完成对用户使用ui界面完成对SQLite数据库的增删改查等操作。本文旨在对上一句节的Qt程序部署到IMX6ULL开发板,并且完成对SQLite数据库在IMX6ULL开发板上的移植。 移植SQ…

达梦数据库(DM)线程管理

目录标题 达梦数据库(DM)线程管理笔记一、DM 线程架构概述二、DM 主要线程类型及功能(一)监听线程(二)工作线程(三)IO 线程(四)调度线程(五&#…

02.10 TCP之文件传输

1.思维导图 2.作业 服务器代码&#xff1a; #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> …

Node.js 环境配置

什么是 Node.js Node.js 是一个基于 Chrome V8 JavaScript 引擎的 JavaScript 运行时环境&#xff0c;它允许你在服务器端运行 JavaScript。传统上&#xff0c;JavaScript 主要用于浏览器中的前端开发&#xff0c;而 Node.js 使得 JavaScript 也能够在服务器上执行&#xff0c;…

【办公类-53-04】20250209Python模仿制作2024学年第二学期校历

背景需求&#xff1a; 马上开学了&#xff0c;又要制作校历&#xff08;删划节假日&#xff09;。之前我都是用网络的图片&#xff0c;然后在PPT里修改。 存在问题&#xff1a; 网络校历是从周日开始的&#xff0c;但日常我们老师做教案&#xff0c;都是默认从周一到周五&…

KERL文献阅读分享:知识图谱与预训练语言模型赋能会话推荐系统

标题期刊年份Knowledge Graphs and Pre-trained Language Models enhanced Representation Learning for Conversational Recommender SystemsJournal of LaTeX Class Files2021 &#x1f4c8;研究背景 在数字时代&#xff0c;个性化推荐系统已经成为了我们生活的一部分。从电…

强一致性算法:Raft

目录 什么是 Raft 算法&#xff1f; Leader的选举 投票分裂后的选举过程 Raft算法日志复制过程 修复不一样的日志 数据安全性的保证 什么是 Raft 算法&#xff1f; Raft 算法是一种是一种用于管理复制日志的强一致性算法&#xff0c;用于保证分布式系统中节点数据的一致…

[MyabtisPlus]PG的TIMESTAMPTZ不支持转换为LocalDateTime

背景 数据库用的是PG&#xff0c;且created_time字段用的是带时区的timestamptz类型&#xff1a; 用MyabtisPlus(MP)的的代码生成&#xff0c;默认生成的是JDK8的LocalDateTime类型&#xff1a; 结果&#xff0c;在查询时候&#xff0c;无法做到实体类的类型自动转换&#xff0…

cliproxy代理服务使用指南

Cliproxy代理服务使用指南 一、引言 Cliproxy&#xff0c;作为一款高效稳定的代理服务工具&#xff0c;广泛应用于跨境电商、数据分析、网络爬虫、远程办公等领域。本指南旨在帮助用户快速上手Cliproxy&#xff0c;充分利用其代理服务&#xff0c;提升工作效率与数据安全。 二、…

【Java 面试 八股文】Redis篇

Redis 1. 什么是缓存穿透&#xff1f;怎么解决&#xff1f;2. 你能介绍一下布隆过滤器吗&#xff1f;3. 什么是缓存击穿&#xff1f;怎么解决&#xff1f;4. 什么是缓存雪崩&#xff1f;怎么解决&#xff1f;5. redis做为缓存&#xff0c;mysql的数据如何与redis进行同步呢&…

防火墙术语大全( Firewalld Glossary of Terms)

防火墙术语大全 防火墙作为网络安全中不可或缺的设备&#xff0c;在各种网络架构中扮演着至关重要的角色。无论是企业级防火墙、云防火墙还是家用路由器内置的防火墙&#xff0c;它们的工作原理和配置策略都离不开一系列专业术语的支撑。对于网络工程师来说&#xff0c;掌握这…

【蓝耘元生代智算云平台】一键部署 DeepSeek人工智能模型

欢迎来到ZyyOvO的博客✨&#xff0c;一个关于探索技术的角落&#xff0c;记录学习的点滴&#x1f4d6;&#xff0c;分享实用的技巧&#x1f6e0;️&#xff0c;偶尔还有一些奇思妙想&#x1f4a1; 本文由ZyyOvO原创✍️&#xff0c;感谢支持❤️&#xff01;请尊重原创&#x1…

配置@别名路径,把@/ 解析为 src/

路径解析配置 webpack 安装 craco npm i -D craco/craco 项目根目录下创建文件 craco.config.js &#xff0c;内容如下 const path require(path) module.exports {webpack: {// 配置别名alias: {// 约定&#xff1a; 使用 表示src文件所在路径: path.resolve(__dirname,src)…

力扣hot100刷题第一天

哈希 1. 两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素。你可以按任意…

【前端】几种常见的跨域解决方案代理的概念

几种常见的跨域解决方案&代理的概念 一、常见的跨域解决方案1. 服务端配置CORS&#xff08;Cross-Origin Resource Sharing&#xff09;&#xff1a;2. Nginx代理3. Vue CLI配置代理&#xff1a;4 .uni-app在manifest.json中配置代理来解决&#xff1a;5. 使用WebSocket通讯…

以下是基于巨控GRM241Q-4I4D4QHE模块的液位远程控制系统技术方案:

以下是基于巨控GRM241Q-4I4D4QHE模块的液位远程控制系统技术方案&#xff1a; 一、系统概述 本系统采用双巨控GRM241Q模块构建4G无线物联网络&#xff0c;实现山上液位数据实时传输至山下水泵站&#xff0c;通过预设逻辑自动控制水泵启停&#xff0c;同时支持APP远程监控及人工…

百度高德地图坐标转换

百度地图和高德地图的侧重点不太一样。同样一个地名&#xff0c;在百度地图网站上搜索到的地点可能是商业网点&#xff0c;在高德地图网站上搜索到的地点可能是自然行政地点。 高德地图api 在高德地图中&#xff0c;搜索地名&#xff0c;如“乱石头川”&#xff0c;该地名会出…