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

CVXPY调用SCIPY求解大规模LP失败、ECOS返回非精确最优解原因问询

Scipy HiGHS求解LP失败原因分析

核心失败原因

从运行日志可直接定位求解失败的根本原因:

  • HiGHS求解器默认会对输入的LP模型做数值缩放,降低问题条件数以提升求解效率,缩放后的模型已经成功求得最优解
  • 但将缩放后的最优解逆变换还原到原始未缩放模型时,产生了12个原始变量不可行项,超出了HiGHS默认的可行性容忍阈值
  • HiGHS默认未开启「使用更精细公差重求解」的逻辑,所以直接返回HighsModelStatusNOTSET的未定义状态,触发CVXPY抛出求解失败异常

日志开头的message_level参数警告是因为你同时传入了verbose=True和disp=True,CVXPY重复传参导致参数值异常,该警告不影响核心求解逻辑,和本次求解失败无关。

小变量规模无异常的原因

变量规模较小时,问题的目标函数、约束矩阵系数量级跨度小,缩放和逆缩放过程中产生的浮点精度误差极小,不会超出可行性公差阈值;变量规模提升后,系数的量级跨度变大,逆缩放过程的误差被放大,最终导致还原后的解不满足原始约束要求。
你使用ECOS求解得到optimal_inaccurate结果也是同一类数值精度问题,只是ECOS不会直接抛出错误,而是返回精度未达默认标准的非精确最优解。

可行解决方案

  • 调整HiGHS求解参数:在scipy_options中增加公差配置、开启交叉验证逻辑,示例配置如下:
prob.solve(
    solver=cvx.SCIPY, 
    scipy_options={
        "method": "highs",
        "primal_feasibility_tolerance": 1e-6,
        "dual_feasibility_tolerance": 1e-6,
        "run_crossover": True
    },
    verbose=True
)
  • 对问题做归一化预处理:将目标函数、所有约束的系数统一做缩放,把所有参数的量级控制在1e-3 ~ 1e3的范围内,从根源降低精度损失的概率
  • 更换适配性更好的求解器:可以尝试CBC、GLPK等开源LP求解器,这类求解器对大规模问题的数值容错处理更完善,也可以使用Gurobi、CPLEX的免费社区版,求解效率和数值稳定性都优于Scipy内置的HiGHS接口

内容的提问来源于stack exchange,提问作者Alexis Olivero Aimaretti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:45:04