具有秩亏正半定矩阵的二次规划

计算科学 线性代数 优化 凸优化 二次规划
2021-12-19 12:57:12

方对称矩阵。此外,这意味着所有特征值都是非负的,但也有一些零特征值。我想 在凸条件的二次优化,其中一些固定向量。An×nA0rank(A)<n

12xHAx+bHx
xi0yHx=0b,y

当由于数值舍入误差,矩阵具有一些非常小的负杂散特征值时,就会出现问题。然后,函数变得无界。我已经用SeDuMi和矩阵 如果你用 MATLAB 计算排名,你会得到但是,借助该函数的数值计算得出以下结果:

A=[10172559172943916254365152659155891626813],b=[11111],y=[11111]
rank(A)=2eig()

>> eig(A)

ans =

 -1.6661e-014
 -4.4496e-016
  4.2249e-015
       5.0536
       116.95

SeDuMi(通过Yalmip,在 Matlab 2007b 中执行)给出以下错误消息:

Exiting: the solution is unbounded and at infinity;
 the constraints are not restrictive enough.

你有什么想法,如何有效地解决这个问题?我已经尝试对进行对角化并用任意小的正数替换小的负特征值,但这看起来,嗯......任意的,我担心它可能会在优化中产生数值错误。你怎么看?A

2个回答

为了确保这不会淹没在评论中,我将其作为答案。

如问题中所述,使用的求解器不是 SeDuMi。使用的求解器是 quadprog,并且该求解器(或更具体地说,它的严重过时版本)显然在这个特定实例上存在数值问题。最新版本的 quadprog 或任何相当稳健的求解器都可以毫无问题地解决这个问题。

以下CVXPY脚本:

from cvxpy import *
import numpy as np

# optimization variables
x = Variable(5)

# matrix A and vectors b and c
A = np.array([[10, 17, 25, -5, -9],
              [17, 29, 43, -9,-16],
              [25, 43, 65,-15,-26],
              [-5, -9,-15,  5,  8],
              [-9,-16,-26,  8, 13]])
b = np.ones(5)
c = np.array([ 1, 1, 1,-1,-1])


# build optimization problem
objective = Minimize( 0.5 * quad_form(x, A) - b.T * x )
constraints = [ c.T * x == 0, x >= 0 ]
prob = Problem(objective, constraints)

# solve optimization problem
prob.solve()
print "x =", x.value

产生以下向量

x = [[  4.44444306e-01]
     [  2.85606990e-11]
     [  1.71645999e-10]
     [  2.22221718e-01]
     [  2.22222588e-01]]

这确实满足约束。也许这些限制确实“足够严格”。