微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CVXPY 中具有优化变量的块矩阵

如何解决CVXPY 中具有优化变量的块矩阵

我想构建一个具有以下形式的块矩阵

Q = [[A,B],[C,D]]

其中每个块 A,B,C,D 是以下矩阵:

  • A 只是 2x2 单位矩阵
  • B一个 2x1 向量 b=(b_1,b_2) 嵌入到身份 B = diag(b_1,b_2)
  • 的对角线上
  • CB
  • 的转置
  • D 是由某个常数 dD = d*A
  • 乘以的 2x2 身份

我的优化问题是 min d 使得 Q >> 0,即 PSD 条件。 我需要帮助解决这个问题。

困惑:

  1. 我知道如何使用 Numpy np.eye(2) 制作 2x2 单位矩阵。我不确定在我的矩阵 Q 中使用它是否有意义。
  2. 此外,对于 b 我定义 b = cvxpy.Variable((2,1))。然后,我也可以将它的转置定义为 b_t = b.T 但如果没有外积,我如何将其设为矩阵 BC?也就是说,我需要将向量的元素嵌入到矩阵的对角线中。
  3. 由于 d 是我最小化的变量,因此我需要将其定义为 d = cvxpy.Variable(1)。但是我不能简单地将它与单位矩阵相乘以获得diag(t,t),我称之为T = t*np.eye(2)

一般来说,我不知道是否需要先将块矩阵 Q 定义为 Q = cvxpy.Variable((4,4))Q = cvxpy.Parameter((4,4)),然后上面的所有术语都使用 cvxpy.bmat 为其提供精确的形式。

感谢任何帮助。

解决方法

您可能会在编程站点以外的地方得到更好的答案。然而,在这种情况下,它是直截了当的。

因为交换两行和(相同的)两列可以通过

M -> Q'*M*Q

其中 Q 是置换矩阵(因此是正交的),如果原始矩阵是 PSD,则这样的变换矩阵将是 PSD。

如果我们写

M = ( 1  0  b1 0 )
    ( 0  1  0  b2)
    ( b1 0  d  0 )
    ( 0  b2 0  d )

并交换我们得到的中间两行和列

M = ( 1  b1 0 0  )
    ( b1 d  0 0  )
    ( 0  0  1 b2 )
    ( 0  0  b2 d )

如果对角线上的两个块是 PSD,则该矩阵将是 PSD,当 iff

d > max( b1*b1,b2*b2)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。