基于矩阵的CVXPY二次规划不符合DCP规则问题咨询
问题原因与解决方案
你遇到的这个问题是因为在CVXPY 1.1.1版本中,trace(Pi.T @ Pi)这种写法没有被DCP规则识别为合规的凸表达式——虽然数学上它确实是所有元素的平方和(凸二次型),但CVXPY的DCP检查器对矩阵乘法后取trace的组合逻辑在旧版本里没有做特殊处理,导致判定为非DCP合规。
解决方法
最直接且符合DCP规则的替代写法是使用CVXPY内置的sum_squares函数,它专门用于计算变量所有元素的平方和,和trace(Pi.T @ Pi)数学上完全等价,而且会被DCP检查器正确识别:
import cvxpy Pi = cvxpy.Variable((10, 5)) objective = cvxpy.Minimize(cvxpy.sum_squares(Pi)) problem = cvxpy.Problem(objective) problem.solve()
如果你坚持想用矩阵乘法相关的写法,也可以用quad_form来构造这个二次型(不过这里sum_squares更简洁):
# 等价写法,用quad_form objective = cvxpy.Minimize(cvxpy.quad_form(Pi.flatten(), cvxpy.eye(50)))
另外补充一点:如果你升级到CVXPY的较新版本(比如1.2+),直接使用trace(Pi.T @ Pi)可能已经可以被正确识别为DCP合规的表达式,但考虑到你当前使用的是1.1.1,上述替代方案是最稳妥的。
内容的提问来源于stack exchange,提问作者magiiique
相关产品推荐
相关产品推荐

