Python cvxopt 求解器 qp 的基本工作原理

问题描述 投票:0回答:3

我想使用 cvxopt 求解器 qp 并计算拉格朗日乘数,但我想知道它是如何“精确”工作的。我试图找到更多信息,但没有太多关于 cvxopt 的信息。我正在查看这个示例问题,但我不确定这些变量意味着什么以及它们如何提出解决方案。

例子是这样的:

可以通过使用

解决
Q = 2*matrix([ [2, .5], [.5, 1] ])
p = 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))
b = matrix(1.0)
sol=solvers.qp(Q, p, G, h, A, b)
print(sol['x'])
python cvxopt
3个回答
14
投票

你应该看看这个:

使用 CVXopt 求解 QP

为了解决二次规划问题,CVXopt 接受一组矩阵,通常称为 P、q、G、A 和 h。 您必须首先将您的问题转换为 CVXopt 接受的特定形式(在链接中提到)。 目的是找到最佳解决方案(在您的情况下为拉格朗日乘数),即矩阵“x”。

“存储”解决方案的对象具有许多属性,其中之一是矩阵“x”,您可以打印或使用它进行进一步计算。


2
投票

我还不确定完整的设置是如何工作的,但基本设置如下。我正在使用文档中的这个示例

  • c 是我们想要最小化的函数,2x1 + x2 =
    [2,1]
  • b(又名 h)是约束右侧的值。
  • A(AKA G)是约束方程的系数。

约束方程为

  • -x1 + x2 <= 1
  • x1 + x2 >= 2
  • x2 >= 0
  • x1-2x2 <= 4

任何 >= 的约束都必须乘以

-1
才能成为 <=.

所以

b=[1,-2,0,4]
还有

A = [ 
  [-1.0, -1.0, 0.0, 1.0], #x1
  [1.0, -1.0, -1.0, -2.0] #x2
]

解决
>>> from cvxopt import matrix, solvers
#wrap our arrays in the `matrix` function
>>> sol=solvers.lp(c,A,b)
>>> print(sol['x'])
[ 5.00e-01]
[ 1.50e+00]

0
投票

这解决了以下标准中的二次规划(QP),

QP standard form

有关

cvxopt
包中二次规划标准形式的说明可以在代码文档中找到。但是,这并没有明确指定输出。更详细的解释可以在代码注释中提供的文档中找到。

© www.soinside.com 2019 - 2024. All rights reserved.