最小化受线性约束的范数,在 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_k
和l_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']))
我需要求解以下受线性不等式约束的二次最小化;
在哪里
||ξ||是 ξ 的欧几里德范数,
ξ 和 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_k
和l_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']))