7

我想使用 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'])
4

2 回答 2

11

你应该看看这个:

用 CVXopt 求解 QP

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

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

于 2015-10-20T21:05:23.483 回答
2

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

  • c 是我们想要最小化的函数,2x1 + x2 =[2,1]
  • b (AKA 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]
于 2018-07-15T04:08:13.490 回答