我正在研究Pyomo中的优化问题,并得到了一个不能满足所有约束的解决方案。
结果,我在Pyomo中使用了log_infeasible_constraints模型,但似乎并没有给我违反的约束。
具体来说,请考虑以下仅包含两个约束和一个目标函数的简单模型:
from pyomo.environ import *
from pyomo.opt import SolverFactory
from pyomo.util.infeasible import log_infeasible_constraints
model = AbstractModel()
model.N = Param( within=PositiveIntegers )
model.I= RangeSet( model.N )
model.x = Var(model.I,within=NonNegativeReals)
def lower_x(m):
return sum(m.x[i] for i in m.I) >= 3
def upper_x(m):
return sum(m.x[i] for i in m.I) <= 6
def obj(m):
return sum(m.x[i]**2 for i in m.I)
model.value = Objective(rule=obj, sense=minimize)
model.c_lower = Constraint(rule=lower_x)
model.c_upper = Constraint(rule=upper_x)
data = { None:{
'N': {None: 3}
}}
real_model = model.create_instance(data)
log_infeasible_constraints(real_model)
很明显,最佳解决方案没有违反任何约束。但是最后一行的结果是:
INFO: CONSTR c_upper: 2.9999999712526666 </= 6.0
这让我很困惑。 log_infeasible_constraints(real_model)不应该仅返回违反的约束吗?有人可以帮忙吗?预先感谢。