为什么Pyomo LP模型的求解结果有时会违反硬约束?
LP求解器报可行解但硬约束被违反的问题排查与解决
问题背景
构建了包含若干硬约束和软约束的Pyomo Concrete LP模型,使用IBM ILOG CPLEX求解时,偶尔出现求解器提示解可行,但部分硬约束被违反的情况。
初步排查过程
- 最初怀疑为CPLEX并行模式导致的问题,切换为单核心运行优化任务后问题仍复现
- 更换Gurobi、CBC等其他求解器测试,问题依旧存在
- 未发现硬约束被忽略的固定触发规律,问题表现为随机发生
问题答疑
是否为优化运行内存不足导致?
不是。内存不足时求解器会直接抛出内存溢出类错误终止运行,不会出现仅误判解可行性、部分硬约束被违反的表现,且多款主流求解器同时因内存问题出现完全一致异常的概率可以忽略。
是否有其他用户遇到过同类问题?
这类问题在规划类模型工程落地场景中较为常见,核心诱因通常分为两类:求解器数值精度问题、建模代码隐藏bug。
最终解决方案
- 调整CPLEX的
scale参数和mip emphasis开关,解决了数值精度问题导致的部分约束违反情况 - 排查并修复建模代码中的bug,所有问题已全部解决
内容的提问来源于stack exchange,提问作者kube
相关产品推荐
相关产品推荐

