Python Docplex编写严格约束报错,该如何正确实现?
Docplex中严格约束的处理方法
Docplex(以及绝大多数数学规划求解器)不支持严格大于(>)或严格小于(<)的约束,原因是线性/整数规划的可行域需要是闭合集合,严格不等式的边界不闭合,求解器无法处理这类约束。
针对你的问题,可根据变量类型选择以下两种处理方式:
连续变量场景
引入一个极小的正数epsilon(比如1e-6),将严格大于约束转换为非严格的大于等于约束:
epsilon = 1e-6 mdl.add_constraint(sum(a[i] * mdl.variable[i] for i in range(nrItems)) >= b + epsilon)
注意:epsilon的取值需平衡数值精度和问题实际需求,过小可能引发求解器的数值误差,过大则可能偏离原问题的约束意图。
整数变量场景
如果所有mdl.variable[i]都是整数类型,那么求和结果也是整数,此时sum(...) > b等价于sum(...) >= b + 1(整数的最小增量为1),直接修改约束即可:
mdl.add_constraint(sum(a[i] * mdl.variable[i] for i in range(nrItems)) >= b + 1)
内容的提问来源于stack exchange,提问作者Vjola Cl
相关产品推荐
相关产品推荐

