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

CVXPY可解的线性规划用CPLEX求解出现最优但未缩放不可行如何解决

状态含义说明

optimal with unscaled infeasibilities是CPLEX线性规划求解器的专属返回状态,指CPLEX在内部做了数值缩放后的问题模型上找到了满足最优性条件的解,但将该解映射回原始未缩放的问题尺度时,部分约束的违反量超出了CPLEX默认设置的可行性容忍度阈值。
这类问题一般由两个原因触发:一是模型内不同变量、约束的数值量级差过大,二是大尺寸问题的系数矩阵本身存在病态性,默认的数值缩放策略不足以抵消数值误差影响。你当前的模型中q变量上下界设置为1e10、和a变量的0-1上下界差了10个数量级,再加上大尺寸桁架平衡矩阵本身的病态特性,刚好符合触发条件。

解决方案

可按优先级尝试以下操作:

  • 调整CPLEX缩放参数
    docplex支持直接设置CPLEX底层求解参数,不需要调用原生CPLEX接口,在模型构建完成后、求解前添加如下代码即可启用更激进的缩放策略,专门适配病态问题:
# 启用极端缩放模式,适配数值差大的病态问题
model.parameters.read.scale = 4
# 可适当放宽可行性容忍度,默认值为1e-6,调整范围建议不超过1e-4
model.parameters.simplex.tolerances.feasibility = 1e-5
  • 优化模型本身的数值尺度
    去掉q变量无意义的1e10上下界设置,直接用许用应力sigma作为上下界即可;同时对载荷、杆件长度、许用应力等输入参数做无量纲化处理,将所有输入参数的数值统一缩放到[0.1, 10]区间,从根源降低数值差带来的求解不稳定问题。
  • 切换LP求解算法
    大尺寸稀疏LP问题默认的对偶单纯形法对数值误差更敏感,可切换为屏障法(内点法)求解,设置代码如下:
# 设置LP求解算法为屏障法
model.parameters.lpmethod = 4
  • 优化平衡矩阵约束的生成逻辑
    添加平衡约束时不要遍历所有杆件,仅遍历平衡矩阵B的非零元素生成约束,既可以减小模型规模,也可以避免大量乘0的无效计算引入的数值误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:21:03