oak*_*kca 8 variables constraints feasibility pyomo
我得到了一个包含很多变量和约束的 pyomo 具体模型。
不知何故,我的模型中的变量之一违反了一个约束,这使得我的模型不可行:
WARNING: Loading a SolverResults object with a warning status into model=xxxx;
message from solver=Model was proven to be infeasible.
Run Code Online (Sandbox Code Playgroud)
有没有办法询问求解器不可行的原因?
例如,假设我有一个名为 的变量x,如果我定义以下 2 个约束,则模型将为 ofc。不可行的。
const1:
x >= 10
const2:
x <= 5
Run Code Online (Sandbox Code Playgroud)
我想要实现的目标是指出导致这种不可行性的约束和变量,以便我可以修复它。否则,对于我的大模型来说,很难找出导致这种不可行性的原因。
IN: write_some_comment
OUT: variable "x" cannot fulfill "const1" and "const2" at the same time.
Run Code Online (Sandbox Code Playgroud)
许多求解器(包括 IPOPT)会在求解器终止时将变量的值返还给您,即使问题被发现不可行。到那时,你确实有一些选择。
里面有贡献的代码pyomo.util.infeasible可能会帮助你。https://github.com/Pyomo/pyomo/blob/master/pyomo/util/infeasible.py
用法:
from pyomo.util.infeasible import log_infeasible_constraints
...
SolverFactory('your_solver').solve(model)
...
log_infeasible_constraints(model)
Run Code Online (Sandbox Code Playgroud)