Python QP 求解器

系列文章目录


前言

        该 Python 库提供一站式 solve_qp 函数,用于求解凸二次规划:

$\begin{aligned} &\mathrm{minimize} \dfrac12x^TPx+q^Tx \\ &\text{subject to} Gx\leq h \\ &Ax=b \\ &lb\leq x\leq ub \end{aligned}$

        向量不等式逐个坐标应用。函数返回后端 QP 求解器找到的初等解 x^*,如果求解失败/问题不可行,则返回 None。所有求解器都要求问题是凸的,这意味着矩阵 P 应该是半正定的。有些求解器还要求问题是严格凸的,这意味着 P 应该是正定的。

        对偶乘法器:还有一个 solve_problem 函数,它不仅能返回初等解,还能返回其对偶乘法器和后端求解器计算的所有其他相关量。


一、示例

        要求解二次规划,请构建定义该二次规划的矩阵,然后调用 solve_qp,并通过求解器关键字参数选择后端 QP 求解器:

import numpy as np
from qpsolvers import solve_qpM = np.array([[1.0, 2.0, 0.0], [-8.0, 3.0, 2.0], [0.0, 1.0, 1.0]])
P = M.T @ M  # this is a positive definite matrix
q = np.array([3.0, 2.0, 3.0]) @ M
G = np.array([[1.0, 2.0, 1.0], [2.0, 0.0, 1.0], [-1.0, 2.0, -1.0]])
h = np.array([3.0, 2.0, -2.0])
A = np.array([1.0, 1.0, 1.0])
b = np.array([1.0])x = solve_qp(P, q, G, h, A, b, solver="proxqp")
print(f"QP solution: {x = }")

        本例输出解 [0.30769231,-0.69230769,1.38461538]。如本例所示,也可以在解中得到对偶乘数。

二、安装

2.1 PyPI

        安装带有开源 QP 求解器的库:

pip install qpsolvers[open_source_solvers]

        这种一刀切的安装方式可能无法在所有系统上立即运行(例如,如果求解器试图从源代码编译)。如果遇到任何问题,请查看以下变体:

  • pip install qpsolvers[wheels_only] 只安装预编译二进制文件的求解器、
  • pip install qpsolvers[clarabel,daqp,proxqp,scs](例如)将安装列出的 QP 求解器、
  • pip install qpsolvers 只安装库本身。

        导入后,qpsolvers 会加载所有能找到的求解器,并在 qpsolvers.available_solvers 中列出。

2.2 Conda

conda install -c conda-forge qpsolvers

三、求解器

SolverKeywordAlgorithmAPILicenseWarm-start
ClarabelclarabelInterior pointSparseApache-2.0✖️
CVXOPTcvxoptInterior pointDenseGPL-3.0✔️
DAQPdaqpActive setDenseMIT✖️
ECOSecosInterior pointSparseGPL-3.0✖️
GurobigurobiInterior pointSparseCommercial✖️
HiGHShighsActive setSparseMIT✖️
HPIPMhpipmInterior pointDenseBSD-2-Clause✔️
MOSEKmosekInterior pointSparseCommercial✔️
NPPronpproActive setDenseCommercial✔️
OSQPosqpAugmented LagrangianSparseApache-2.0✔️
PIQPpiqpProximal Interior PointDense & SparseBSD-2-Clause✖️
ProxQPproxqpAugmented LagrangianDense & SparseBSD-2-Clause✔️
QPALMqpalmAugmented LagrangianSparseLGPL-3.0✔️
qpOASESqpoasesActive setDenseLGPL-2.1
qpSWIFTqpswiftInterior pointSparseGPL-3.0✖️
quadprogquadprogActive setDenseGPL-2.0✖️
SCSscsAugmented LagrangianSparseMIT✔️

        密集求解器的矩阵参数是 NumPy 数组,稀疏求解器的矩阵参数是 SciPy 压缩稀疏列 (CSC) 矩阵。

四、常见问题

  • 我可以打印机器上可用的求解器列表吗?
  • 可以求解最小二乘法而不是二次规划吗?
  • 我的成本函数中有一个平方准则,如何将 QP 求解器应用于我的问题?
  • 我有一个非凸二次规划,有求解器可以用吗?
  • 我有二次等式约束条件,有求解器可以用吗?
  • 错误: 在 Windows 上需要 Mircrosoft Visual C++ 14.0 或更高版本
  • 能否像脊回归或 LASSO 那样添加惩罚项?

五、基准测试

        下面的结果来自 qpbenchmark,它是 Python 中 QP 求解器的基准。在下表中,求解器以默认设置调用,并通过移位几何平均数(简称 "shm")对整个测试集进行比较。越低越好,1.0 代表最佳求解器。

5.1 马罗斯-梅萨罗斯(难题)

        查看高精度和低精度求解器设置的完整报告。

5.2 马罗斯-梅萨罗斯密集问题(密集问题子集)

        查看完整报告,了解高精度和低精度求解器设置。

六、引用 qpsolvers

        如果你觉得这个项目有用,请考虑给它一个 ⭐ 或者如果你的工作是科学性的,请引用它:

@software{qpsolvers2024,
  author = {Caron, Stéphane and Arnström, Daniel and Bonagiri, Suraj and Dechaume, Antoine and Flowers, Nikolai and Heins, Adam and Ishikawa, Takuma and Kenefake, Dustin and Mazzamuto, Giacomo and Meoli, Donato and O'Donoghue, Brendan and Oppenheimer, Adam A. and Pandala, Abhishek and Quiroz Omaña, Juan José and Rontsis, Nikitas and Shah, Paarth and St-Jean, Samuel and Vitucci, Nicola and Wolfers, Soeren and Yang, Fengyu and @bdelhaisse and @MeindertHH and @rimaddo and @urob and @shaoanlu},
  license = {LGPL-3.0},
  month = mar,
  title = {{qpsolvers: Quadratic Programming Solvers in Python}},
  url = {https://github.com/qpsolvers/qpsolvers},
  version = {4.3.2},
  year = {2024}
}


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

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

相关文章

CentOS 系统上使用 yum 安装 Nginx 及其模块

要在 CentOS 系统上使用 yum 安装 Nginx 及其 NJS (Nginx JavaScript Module),首先需要确保你的系统已经包含了 Nginx 的官方仓库,因为 Nginx 的某些模块可能不在默认的软件仓库中。 以下是安装 Nginx 和 Nginx Module NJS 的基本步骤: 添加…

探讨选择成为一名程序员的原因,是出于兴趣还是职业发展。

选择成为一名程序员的原因可以是出于兴趣和职业发展两方面的考虑。以下是两个方面的探讨: 兴趣:许多人选择成为程序员是因为对计算机科学和编程的兴趣。他们喜欢解决问题、构建应用程序和创造新的数字体验。对于这些人来说,编程是一种有趣、令…

隐式/动态游标的创建与使用

目录 将 emp 数据表中部门 10 的员工工资增加 100 元,然后使用隐式游标的 %ROWCOUNT 属性输出涉及的员工数量 动态游标的定义 声明游标变量 打开游标变量 检索游标变量 关闭游标变量 定义动态游标,输出 emp 中部门 10 的所有员工的工号和姓名 Orac…

光圈如何影响图像质量

光圈是摄影中一个重要的参数,它决定了镜头的光线通过量,直接影响图像的曝光和深度。以下是光圈如何影响图像质量的几个方面: 曝光控制:光圈的大小决定了相机接收到的光线的数量。较大的光圈(小光圈值)允许…

Ubuntu安装Java17

Ubuntu安装Java17 文章目录 Ubuntu安装Java171. 升级Ubuntu软件资源库2. 安装OpenJDK3. 检查是否安装成功4. 检查OpenJDK被安装在什么地方5. 设置全局环境变量 1. 升级Ubuntu软件资源库 $ sudo apt update && sudo apt upgrade -y2. 安装OpenJDK $ sudo apt-get inst…

攻防演练,作为红方,安装Amass进行子域名扫描

要在Ubuntu系统上安装并使用Amass进行子域名扫描,可以按照以下步骤操作。这个过程涵盖了从安装到实际使用的全程。 1. 安装Amass 有多种方法可以在Ubuntu上安装Amass。我将介绍两种常见的方法:使用Snap包管理器和从源代码安装。 使用Snap安装&#xf…

【Vue3】getters---Vue3中的计算属性工具

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

多模态之ALBEF—先对齐后融合,利用动量蒸馏学习视觉语言模型表征,学习细节理解与论文详细阅读:Align before Fuse

Align before Fuse: Vision and Language Representation Learning with Momentum Distillation (ALBEF)在融合之前对齐:利用动量蒸馏进行视觉与语言表示学习 Paper: arxiv.org/pdf/2107.07651.pdf Github: https://github.com/salesforce/…

napi系列学习基础篇——如何通过DevEco Studio开发一个NAPI工程

简介 NAPI(Native API)是OpenHarmony系统中的一套原生模块扩展开发框架,它基于Node.js N-API规范开发,为开发者提供了JavaScript与C/C模块之间相互调用的交互能力。如下图所示: 这套机制对于鸿蒙系统开发的价值有两方…

权威认证!亚信安全9款产品入选CCIA首版《网络安全专用产品指南》

权威认证 近日,中国网络安全产业联盟(CCIA)正式发布《网络安全专用产品指南》(第一版)(以下简称《指南》),亚信安全凭借突出技术实力、创新优势以及业内深厚积累,旗下9款…

为什么VPS服务器是一个好的选择?

数字世界不断发展。无论是小型企业、中型企业还是大型企业,建立在线形象对于企业来说都变得非常重要。那么,在本文中,我们将主要讨论网站的托管服务器。有许多托管解决方案可供选择,而虚拟专用服务器(VPS)托管是业内最佳选择之一。…

学会 Python 后可以做什么副业?

近年来,Python凭借其简洁易入门的特点受到越来越多人群的青睐。 当然这不仅仅是针对程序员来说,对于一些学生、职场人士也是如此。 Python为什么会大受欢迎呢?因为Python还被大家称为“胶水语言,它适用于网站、桌面应用开发、[自…

大模型微调的几种常见方法

在文章深入理解大语言模型微调技术中,我们详细了解大语言模型微调的概念和训练过程,本篇给大家介绍大模型微调常见的7种训练方法。 1、Adapter Tuning 2019年谷歌的研究人员首次在论文《Parameter-Efficient Transfer Learning for NLP》提出针对 BERT 的…

Matlab求矩阵的逆,3种常用方法总结

几种求逆矩阵的方法总结,以Matlab语言为例 *0* 引言*1* 简单描述函数实现*2* 方法调用计算对比 0 引言 最近在使用函数库求解逆矩阵的时候发现同一个矩阵使用不同的语言、不同的求解方法会产生不同精度的结果,特别是阶数很高的方阵,一些库中的…

第14章 大数据与数据科学知识点梳理

第14章 大数据与数据科学知识点梳理(附带页码) ◼ 原则:组织应仔细管理与大数据源相关的元数据,以便对数据文件及其来源和价值进行准确的清单管理。P386 ◼ 大数据:数据量大(Volume)、数据更新…

未来计算机的发展趋势是什么?

未来计算机的发展趋势是多方面的,涵盖了硬件、软件、体系结构以及计算范式等多个层面。以下是一些预期的趋势: 1. 量子计算: 随着量子理论的不断成熟和技术的进步,量子计算机将可能解决传统计算机难以处理的问题,比如药物发现、材料科学、复杂系统模拟等领域。量子计算的…

专访《综合品酒师》培训破大世界基尼斯之最纪录,开启行业新篇章

在一个阳光明媚的午后,记者来到了位于城市繁华地段的云仓酒庄。走进云仓酒庄,浓郁的酒香扑鼻而来,配合着柔和的灯光和精致的装饰,记者仿佛置身于一个酒文化的殿堂。在这里,记者有幸采访到了云仓酒庄的负责人&#xff0…

JS如何配合input框实现模糊搜索

在JavaScript中,实现一个模糊搜索的搜索框功能,通常需要以下几个步骤: 创建一个HTML输入框和一个显示搜索结果的元素。监听输入框的input事件,当用户输入时触发搜索。在事件处理函数中,根据用户输入的关键词进行模糊搜…

NH2-PEG-Silane 氨基聚乙二醇硅烷 生物材料表面修饰

NH2-PEG-Silane 氨基聚乙二醇硅烷 生物材料表面修饰 【中文名称】氨基聚乙二醇硅烷 【英文名称】Silane-PEG-NH2 【结 构】 【品 牌】碳水科技(Tanshtech) 【纯 度】95%以上 【保 存】-20 【规 格】500mg,1g,5g,10g 【产品特性】 生…

Java中的装箱和拆箱

本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。 目录: 装箱和拆箱概念 装箱和拆箱是如何实现的 面试中相关的问题 装箱和拆箱概念 Java为每种基本数据类型都提供了对应的包装器类型,至于为…