fbbt
基于可行性的边界收紧
此模块的目的是执行基于可行性的边界收紧。这是一个非常基础的实现,但它是直接使用pyomo表达式完成的。用户唯一需要使用的函数是fbbt()和compute_bounds_on_expr()。
此文件中的第一组函数(名称以_prop_bnds_leaf_to_root开头的)用于将边界从变量传播到表达式树中的每个节点(一直到根节点)。第二组函数(名称以_prop_bnds_root_to_leaf开头的)用于将边界从约束传播回变量。
例如,考虑约束条件 x*y + z == 1,其中 -1 <= x <= 1 且 -2 <= y <= 2。当从变量传播边界到根节点 (根节点是 x*y + z)时,我们发现 -2 <= x*y <= 2,并且 -inf <= x*y + z <= inf。然而,根据约束条件,我们知道 1 <= x*y + z <= 1,因此我们可以将边界传播回变量。由于我们知道 1 <= x*y + z <= 1 且 -2 <= x*y <= 2,那么我们必须有 -1 <= z <= 3。 然而,x*y 的边界无法改进,因此 x 或 y 的边界也无法改进。
import pyomo.environ as pe
m = pe.ConcreteModel()
m.x = pe.Var(bounds=(-1,1))
m.y = pe.Var(bounds=(-2,2))
m.z = pe.Var()
from pyomo.contrib.fbbt.fbbt import fbbt
m.c = pe.Constraint(expr=m.x*m.y + m.z == 1)
fbbt(m)
print(f"z bounds = {m.z.bounds}")
z bounds = (-1, 3)
Classes
|
异常
Functions
|
根据表达式中变量的边界计算表达式的边界。 |
|
对约束、块或模型执行FBBT。 |