问题描述
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 (将#修改为@)