最小化受线性约束的范数,在 Python 中使用二次 programming/minimization

Minimizing norm subject to linear constraint, using quadratic programming/minimization in Python

我需要求解以下受线性不等式约束的二次最小化;

在哪里

||ξ||是 ξ 的欧几里德范数,

ξ 和 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) and 0 and A = -z_k, b = l_k.

给定z_kl_k(λ),可以通过

求解矩阵不等式
import numpy
from cvxopt import matrix

P  = matrix([
    [2., 0., 0.],
    [0., 2., 0.],
    [0., 0., 2.]
])

q   = matrix([[0., 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']))