Domain Reduction
Duality-Based Bound Tightening
Variable bound tightening based on the duality multipliers are supported.
EAGO.variable_dbbt! — Function
variable_dbbt!(
n::NodeBB,
mult_lo::Vector{Float64},
mult_hi::Vector{Float64},
LBD::Float64,
UBD::Float64,
nx::Int64
)
Tighten the bounds of the _current_node using the current global upper bound and the duality information obtained from the relaxation.
Special Forms
Bound tightening for linear forms, univariate quadratic forms, and bivariate quadratic forms are also supported.
EAGO.fbbt! — Function
fbbt!(m::GlobalOptimizer, f::T)Performs feasibility-based bound tightening on a back-end constraint and returns true if it is feasible or false if it is infeasible.
Options for T (all are subtypes of AbstractEAGOConstraint):
- AffineFunctionIneq
- AffineFunctionEq
Constraint Propagation
EAGO contains a constraint propagation architecture that supported forward and reverse evaluation of set-valued functions on the directed acyclic graph. The interval contractor and reverse McCormick relaxation-based contractors are currently available.
EAGO.set_constraint_propagation_fbbt! — Function
set_constraint_propagation_fbbt!(
m::GlobalOptimizer{R, S, Q<:ExtensionType}
) -> Bool
Performs bound tightening based on forward/reverse interval and/or McCormick passes. This routine resets the current node with new interval bounds.
Optimization-Based Bound Tightening
EAGO makes use of an optimization-based bound tightening scheme using filtering and greedy ordering as detailed in [1].
EAGO.obbt! — Function
obbt!(m::GlobalOptimizer{R, S, Q<:ExtensionType}) -> Bool
Performs OBBT with filtering and greedy ordering as detailed in: Gleixner, A.M., Berthold, T., Müller, B. et al. J Glob Optim (2017) 67: 731. https://doi.org/10.1007/s10898-016-0450-4
EAGO.trivial_filtering! — Method
trivial_filtering!(
m::GlobalOptimizer{R, S, Q<:ExtensionType},
n::NodeBB
)
Excludes OBBT on variable indices that are tight for the solution of the relaxation.
EAGO.aggressive_filtering! — Method
aggressive_filtering!(
m::GlobalOptimizer{R, S, Q<:ExtensionType},
n::NodeBB
) -> Bool
Excludes OBBT on variable indices after a search in a filtering direction.
EAGO.bool_indx_diff! — Method
bool_indx_diff!(
z::Vector{Bool},
x::Vector{Bool},
y::Vector{Bool}
) -> Vector{Bool}
Utility function used to set vector of booleans z to x & ~y. Avoids the generation of conversion of the BitArray created by broadcasting logical operators.
References
- Gleixner, A.M., Berthold, T., Müller, B. et al. J Glob Optim (2017) 67: 731. https://doi.org/10.1007/s10898-016-0450-4