You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CVXPY二次规划问题求助:矩阵非对称/非PSD及目标函数inf

问题原因分析

一、cp.quad_form报错但numpy验证矩阵为PSD的原因

  • CVXPY对矩阵的对称性和半正定性检查比numpy的isPSD更严格:
    • numpy的isPSD通常通过检查特征值是否非负,但会容忍极小的负特征值(由浮点运算误差导致),而CVXPY的检查阈值更苛刻,哪怕微小的负特征值都会触发报错。
    • cp.quad_form要求矩阵P必须是严格对称的。如果你的矩阵在数值计算中因为浮点误差导致上下三角元素存在微小差异(比如P[i,j]和P[j,i]差了1e-15),CVXPY会判定为非对称矩阵,进而报错。解决办法是显式将矩阵转换为对称形式:P = (P + P.T) / 2。

二、替换为sum_squares后QP不可行但LP可行的原因

结合你的描述(LP可行、QP目标函数值为inf且提示不可行),可能的原因有以下几种:

  • 目标函数的凸性与问题类型不匹配:
    如果你是最大化问题,当二次项系数constant为正数时,(1/2)*constant*cp.sum_squares(X_LP @ x)是凸函数。最大化凸函数在可行域上可能无界(目标函数可以无限增大,即显示为inf),而LP的线性目标函数在可行域上有界,因此能得到最优解。反过来,如果是最小化问题且constant为负数,二次项是凹函数,最小化凹函数会导致目标函数无下界,同样会出现异常的极值结果。
  • 浮点数值稳定性问题:
    当二次项系数constant过大或过小时,可能导致约束条件在数值计算中被求解器误判为不可行。比如系数过大时,二次项的增长速度远超线性项,使得满足约束的x无法同时让目标函数有界,求解器会误报不可行。
  • 约束或变量定义的隐性变化:
    替换目标函数时,可能不小心修改了变量的定义域或约束条件(比如变量x的维度、约束的不等式方向等),导致QP的约束集与LP的约束集不一致。LP的约束集可行,但QP的约束集实际不可行。
  • 求解器对非凸QP的支持不足:
    如果你的二次项是非凸的(比如constant为负数,二次项为凹函数),大部分CVXPY默认的求解器只支持凸QP。此时求解器无法处理非凸问题,可能会错误地返回“不可行”的结果,而LP是凸优化问题,求解器能正常处理。

内容的提问来源于stack exchange,提问作者Resu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:50:18