使用pyscipopt建模时SCIP误判二进制线性问题不可行的原因咨询
问题分析与解决方案
你的核心问题是约束C3被错误转换为等式约束,导致模型不可行:当y1=y2=1时,等式z - y1 - y2 = 0要求z=2,但z的上界为1,直接触发不可行判定。
问题原因
这不是你建模的疏漏,而是pyscipopt 4.3.0与SCIP 9.0.0的兼容性bug——该版本组合下,用<=运算符定义的不等式约束被错误解析为等式约束。
修复方法
你可以通过以下两种方式解决:
显式构造约束表达式,避免直接使用运算符:
# 方式1:直接整理不等式项 m.addCons(z - y1 - y2 <= 0, name="C3") # 方式2:用SCIP表达式API构建 expr = scip.Expr() expr.addVar(z, 1.0) expr.addVar(y1, -1.0) expr.addVar(y2, -1.0) m.addCons(expr <= 0, name="C3")升级pyscipopt版本:更新到4.5.0及以上版本(该版本已修复此兼容性问题),即可正常使用
z <= y1 + y2的写法。
验证结果
修正约束定义后,重新运行代码,SCIP会正确识别z <= y1 + y2的约束,模型最优解为(y1,y2,z)=(1.0,1.0,1.0),最优目标值为1.0,符合预期。
内容的提问来源于stack exchange,提问作者Ale
相关产品推荐
相关产品推荐

