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

如何告诉 CVXPY x^T * x 是 SDP?

如何解决如何告诉 CVXPY x^T * x 是 SDP?

    x = cp.Variable((m,n)) 

x 是一些矩形矩阵

    z = cp.Variable((n,n),PSD=True)

z 应该等于 X^T * X,它总是 PSD

    e_1 = cp.Variable()
    e_2 = cp.Variable()
    obj = cp.Minimize(cp.sum_squares(x - obj_matrix) + omega_k * e_1 + omega_k * e_2)
    constr1 = (e_1 * np.eye(n - rank) - np.transpose(v_k_prev_1) @ z @ v_k_prev_1) >> 0
    aux = (np.eye(m + n,m) @ (np.eye(m,m + n) + x @ np.eye(n,m + n,k=m)) +
           np.eye(m + n,n,k=-m) @ (cp.transpose(x) @ np.eye(m,m + n) +
                                     z @ np.eye(n,k=m)))
    constr2 = (e_2 * np.eye(n) - np.transpose(v_k_prev_2) @ aux @ v_k_prev_2) >> 0
    constr3 = e_1 <= e_k_prev_1
    constr4 = e_2 <= e_k_prev_2
    constr5 = z == cp.transpose(x) @ x
    prob = cp.Problem(obj,constraints=[constr1,constr2,constr3,constr4,constr5])
    prob.solve()

这是一个低秩逼近算法的迭代。 首先,我仅在 PSD 矩阵上进行了尝试,但是当我尝试将其更改为在矩形矩阵上工作时,发生了此错误。我猜 CVXPY 不知道 X^T * X 总是 PSD,我不知道如何编码。

这是我得到的错误 以下约束不是 DCP: var1 == var0.T @ var0 ,因为 以下子表达式不是:|-- var0.T @ var0 var0.T @ var0

  • Promote(-0.0,(10,10)) >> 0 ,因为以下子表达式不是:|-- var0.T @ var0

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