Python使用CVXOPT求解二次规划详解

夏知夏
夏知夏
发布时间:2026-10-13| 7人浏览过
原创

本文介绍如何利用Python的CVXOPT库求解二次规划问题。内容涵盖二次型与正定矩阵的数学基础、标准形式转换、cvxopt.solvers.qp函数的参数含义及调用方法,并对比了cvxopt.matrix与numpy.matrix在内存排列上的差异,提供完整代码示例。

CVXOPT安装与环境配置

在Python生态中,处理凸优化(Convex Optimization)任务的常用模块是CVXOPT。安装该库的命令如下:

pip install cvxopt

二次规划数学基础

一、数学基础

二次型

二次型(quadratic form)是指包含n个变量的二次多项式,即多项式中未知数个数任意,但每一项的次数均为2。其基本代数形式如下所示。

该表达式亦可写作矩阵形式,,这被称为二次型的矩阵表示。其中A为对称矩阵。依据如下定义,可直接在基本形式与矩阵表示之间进行相互转换。

2.正定矩阵

若A是n阶实对称矩阵,且对任意非零实向量X,均满足二次型,则称f(X)为正定二次型,此时矩阵A称为正定矩阵(Positive Definite)。

相应地,若对任意非零实向量X,均满足二次型,则称f(X)为半正定二次型,矩阵A为半正定矩阵。

3.二次规划问题

二次规划是指带有二次型目标函数及约束条件的最优化问题。其标准数学形式如下:

即在满足Gx<h和Ax=b约束条件下,最小化目标函数。当矩阵P为正定矩阵时,目标函数存在全局唯一最优解;当P为半正定矩阵时,目标函数为凸函数,存在全局最优解(可能不唯一);当P为不定矩阵时,目标函数非凸,存在多个局部最小值和稳定点,此类问题属于NP难问题(本文暂不考虑非正定情况)。

Python求解实现步骤

二、Python程序求解

使用的工具包为CVXOPT,即Python凸优化包。

核心函数原型为:Cvxopt.solvers.qp(P,q,G,h,A,b)

参数P,q,G,h,A,b的具体含义可参考上述二次规划问题的标准形式定义。

编程求解的主要思路如下:

1. 对于给定的二次规划问题,首先将其转换为标准形式(具体转换方法参见数学基础中关于二次型矩阵形式的说明)。

2. 对照标准形式,构建出对应的矩阵P, q, G, h, A, b。

3. 调用result=Cvxopt.solvers.qp(P,q,G,h,A,b)执行求解。

4. 通过print(result)查看结果,其中result是一个字典对象,可直接获取其特定属性,例如:print(result['x'])。

接下来通过一个具体实例进行演示。

标准二次规划求解示例


import pprint
from cvxopt import matrix, solvers
P = matrix([[4.0,1.0],[1.0,2.0]])
q = matrix([1.0,1.0])
G = matrix([[-1.0,0.0],[0.0,-1.0]])
h = matrix([0.0,0.0])
A = matrix([1.0,1.0],(1,2))#原型为cvxopt.matrix(array,dims),等价于A = matrix([[1.0],[1.0]])
b = matrix([1.0])
result = solvers.qp(P,q,G,h,A,b)
 
print('x\n',result['x'])

运行结果如下:

注意事项:

cvxopt.matrix与numpy.matrix的数据排列顺序不同:cvxopt.matrix采用列优先存储,而numpy.matrix采用行优先存储。具体差异可见以下实例对比。

矩阵存储顺序差异对比


import numpy as np
from cvxopt import matrix
a = np.matrix([[1,2],[3,4]])
b = matrix([[1,2],[3,4]])
print('numpy.matrix',a)
print('cvxopt.matrix',b)

运行结果如下:

以上即为使用Python求解二次规划问题的完整介绍,希望能为读者提供参考与支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。