我想使用 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'])
你应该看看这个:
为了解决二次规划问题,CVXopt 接受一组矩阵,通常称为 P、q、G、A 和 h。 您必须首先将您的问题转换为 CVXopt 接受的特定形式(在链接中提到)。 目的是找到最佳解决方案(在您的情况下为拉格朗日乘数),即矩阵“x”。
“存储”解决方案的对象具有许多属性,其中之一是矩阵“x”,您可以打印或使用它进行进一步计算。
我还不确定完整的设置是如何工作的,但基本设置如下。我正在使用文档中的这个示例。
[2,1]
约束方程为
任何 >= 的约束都必须乘以
-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]