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,一经查实,立即删除!

相关文章

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

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

【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款…

学会 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…

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

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

Java中的装箱和拆箱

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

React-Redux(二)

​🌈个人主页:前端青山 🔥系列专栏:React篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来React篇专栏内容:React-Redux(二) 目录 react-redux 模块化 redux-thunk react-redu…

ArcGIS加载的各类地图怎么去除服务署名水印

昨天介绍的: 一套图源搞定!清新规划底图、影像图、境界、海洋、地形阴影图、导航图-CSDN博客文章浏览阅读373次,点赞7次,收藏11次。一体化集成在一起的各类型图源,比如包括影像、清新的出图底图、地形、地图阴影、道路…

富文本回显 p 标签?去不掉怎么办?如何解决?

使用前端框架富文本控件上传的上传的数据&#xff0c;回显到文本框时显示<p></p>标签&#xff0c;并且数据库里面的数据也为带有p标签的数据&#xff0c;如何去掉 解决办法 使用正则表达式来讲HTML的内容进行替换更改&#xff0c;在vue中定义方法 //移除HTML标签…

Axure实现导航栏的展开与收缩

Axure实现导航栏的展开与收缩 一、概要介绍二、设计思路三、Axure制作导航栏四、技术细节五、小结 一、概要介绍 使用场景一般是B端后台系统需要以导航栏的展开与收缩实现原型的动态交互&#xff0c;主要使用区域是左边或者顶部的导航栏展开与收缩&#xff0c;同一级导航下的小…

Android 自定义SwitchPreference

1. 为SwitchPreference 添加背景&#xff1a;custom_preference_background.xml <?xml version"1.0" encoding"utf-8"?> <selector xmlns:android"http://schemas.android.com/apk/res/android"><item><shape android:s…

03-JAVA设计模式-组合模式

组合模式 什么是组合模式 组合模式&#xff08;Composite Pattern&#xff09;允许你将对象组合成树形结构以表示“部分-整体”的层次结构&#xff0c;使得客户端以统一的方式处理单个对象和对象的组合。组合模式让你可以将对象组合成树形结构&#xff0c;并且能像单独对象一…

python基础——类型注解【变量,函数,Union】

&#x1f4dd;前言&#xff1a; 上一篇文章Python基础——面相对象的三大特征提到&#xff0c;python中的多态&#xff0c;python中&#xff0c;类型是动态的&#xff0c;这意味着我们不需要在声明变量时指定其类型。然而&#xff0c;这可能导致运行时错误&#xff0c;因为我们…