如何在半正定约束下优化核范数?

计算科学 线性代数 matlab Python 半定规划
2021-12-09 20:37:27

对于有限维对称半正定矩阵,我想解决AB

min|XA|1subject toXB0X

这里||1|X|1=tr(XX)定义的核范数/迹范数,其中XXAB表示BA是半正定的。

我无法通过分析解决这个问题,现在正在考虑使用计算解决方案来提供帮助。这是一个半定的程序吗?如果是,怎么能把它变成标准形式?如果不是,那么在计算上解决这个问题的最佳方法是什么?我熟悉 MATLAB 和 Python。

1个回答

这很容易在 MATLAB 下的 CVX 中制定。Python 下的 CVXPY 解决方案与此类似。

CVX 代码:

cvx_begin sdp
variable X(n,n) hermitian semidefinite
minimize(norm_nuc(X-A))
X <= B
cvx_end

或者

cvx_begin
variable X(n,n) hermitian semidefinite
minimize(norm_nuc(X-A))
B - X == semidefinite(n)
cvx_end

编辑 2:CVX 对半定约束非常挑剔,仅当被约束为 psd 的矩阵完全是厄米特矩阵(对称,如果真实)时才处理。B因此,安全的做法是在出现在半定约束之前进行厄米化(对称化) 。即 ,B = 0.5*(B+B');这将消除舍入级非厄米特性(不对称性),这可能导致 CVX 有一个 conniption。

您可以通过查看norm_nuc. 您还可以看到引擎盖下的重新制定 CVX 应用如下。它是Mosek Modeling Cookbook的第 6.2.4 节“奇异值优化”的“奇异值之和”小节中的对偶问题公式,公式 6.19(在公式 6.20 中进一步解释)编辑 1:正如您所见,这确实可以表述为(线性、凸)半定程序。

如果您对 CVX 有更详细的问题,可以在http://ask.cvxr.com/提问(阅读CVX 用户指南常见问题解答后)。

编辑 3:作为奖励,这里是如何在 MATLAB 下的 YALMIP 中执行此操作。如果您需要额外的练习,您可以尝试通过上面链接的 Mosek Modeling Cookbook 的方程 6.19 重新制定核范数,并验证您是否获得了与允许 YALMIP 或 CVX 相同的最佳目标值(在公差范围内)为您提供(重新)配方。

X = sdpvar(3,3,'hermitian','complex') % note that unlike CVX, square matrices are symmetric (hermitian) by default in YALMIP, but I had to explicitly specify it, because 'complex' must be the 4th argument
optimize(0 <= X <= B,norm(X - A, 'nuc')) % Wow, a double-sided semidefinite constraint - I've never done that before. Also note that YALMIP is always in the equivalent of CVX's sdp mode.

事实证明,在 sdp 模式下,CVX 还允许双面半定约束(这些约束可以方便地约束 2-范数条件数)

cvx_begin sdp
variable X(n,n) hermitian
minimize(norm_nuc(X-A))
0 <= X <= B
cvx_end