问题描述
我需要解决以下受线性不等式约束的二次最小化;
哪里
||ξ||是 ξ 的欧几里得范数,
ξ 和 vk 是向量
λk 是一个标量。
我认为这可以用 CVXOPT 来完成,但我没有任何二次最小化的经验,所以我有点迷茫,非常感谢一些帮助或只是指针!
求解 ξ∗ = argmin||ξ||服从 z.T ξ ≥ −λk
解决方法
cvxopt.solvers.qp
好像可以解决
1/2 xT P x + qT x
受制于
Ax ≤ B
对于您的情况,
||ξ||2 = ξ2 = ξT I ξ = 1/2 ξT (2 × I) ξ + 0 x ξ
其中 I 是单位矩阵。所以你的 P 和 q 是 (2 × I) 和 0 和 A = -z_k,b = l_k。
使用给定的 z_k
和 l_k
(λ),您可以通过以下方式求解矩阵不等式
import numpy
from cvxopt import matrix
P = matrix([
[2.,0.,0.],[0.,2.,2.]
])
q = matrix([[0.,0.]])
z_k = matrix([
[1.],[2.],[3.]
])
l_k = matrix([4.])
from cvxopt import solvers
sol = solvers.qp(P,q,-z_k,l_k)
print(sol['x']) # argmin ξ
print(sol['primal objective']) # min ξ^2
检查this。
如果您需要 min ||ξ||
,则规范:
import math
print(math.sqrt(sol['primal objective']))