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

问题描述

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

enter image description here

哪里

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

ξ 和 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_kl_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']))

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...