对正半定矩阵施加特殊结构

计算科学 Python 凸优化 半定规划 简历
2021-12-16 11:10:30

我正在尝试使用cvxpy. 但是我正在努力约束矩阵Zj如等式 (33-35) 中所述。引用论文(μj¯只是一个向量):

剩余约束Rj是:

Zj=[1(μj¯)μj¯U]

在哪里U必须是μj¯(μj¯). 由于约束不是线性的,我们放宽它使得:

Uμj¯(μj¯)0

通过以下财产:

Zj0Uμj¯(μj¯)0

在哪里Zj0表示Zj是半正定矩阵。

我试图通过执行以下操作来强制这种结构:

u = cvx.Variable(D)
U = u*u.T
Zj = cvx.bmat([[1, u.T], [u, U]])

但是cvxpy抱怨这u*u.T是不正确的:

UserWarning: Forming a nonconvex expression (affine)*(affine).

求解器失败:

cvxpy.error.DCPError: Problem does not follow DCP rules

看来两个向量的外积不能这样实现。关于如何强制执行此约束的任何想法?

参考

  1. Yun、Sungrack 和 Chang D. Yoo。“用于语音情感分类的损失尺度大边距高斯混合模型。” IEEE 音频、语音和语言处理汇刊 20.2 (2012): 585-59
1个回答

关键是你不包括约束U=uuT. 该约束是非凸的。

相反,您包括约束Zj是(正)半定的。这个约束是一个凸松弛U=uuT,由 Schur 补获得。即,使用凸的松弛约束代替原始的非凸约束。