Relaxation Backend
Quadratic Relaxations
EAGO.relax_convex_kernel
— Function.relax_convex_kernel
Stores the kernel of the calculation required to relax convex quadratic constraints using the immutable dictionary to label terms.
EAGO.relax_nonconvex_kernel
— Function.relax_nonconvex_kernel
Stores the kernel of the calculation required to relax nonconvex quadratic constraints using the immutable dictionary to label terms.
EAGO.relax_quadratic_gen_saf
— Function.relax_quadratic_gen_saf
Default routine for relaxing nonconvex quadratic constraint lower
< func
< upper
on node n
. Takes affine bounds of convex part at point x0
and secant line bounds on concave parts.
EAGO.relax_quadratic!
— Function.relax_quadratic!
Relaxes all quadratic constraints in x
optimizer.
Nonlinear Relaxation
EAGO.relax_nlp!
— Function.relax_nlp!
A rountine that relaxes all nonlinear constraints excluding constraints specified as quadratic.
EAGO.objective_cut_linear!
— Function.objective_cut_linear!
Adds linear objective cut constraint to the x.relaxed_optimizer
.
Nonlinear Storage Structures
EAGO.FunctionSetStorage
— Type.FunctionSetStorage
A storage object for both set and number valued data required to compute relaxations which contains the tape used to compute a nonlinear function. The object is parameterized by a {N,T<:RelaxTag}
where N corresponds the subgradient size used in the MC object.
- nd::Vector{JuMP.NodeData}
- adj::SparseMatrixCSC{Bool,Int64}
- const_values::Vector{Float64}
- setstorage::Vector{MC{N,T}}
- numberstorage::Vector{Float64}
- numvalued::Vector{Bool}
- tp1storage::Vector{Float64}
- tp2storage::Vector{Float64}
- tp3storage::Vector{Float64}
- tp4storage::Vector{Float64}
- tpdict::Dict{Int64,Tuple{Int64,Int64,Int64,Int64}}
- grad_sparsity::Vector{Int64}
- hess_I::Vector{Int64}
- hess_J::Vector{Int64}
- dependent_subexpressions::Vector{Int64}
EAGO.SubexpressionSetStorage
— Type.SubexpressionSetStorage
A storage object for both set and number valued data required to compute relaxations which contains the tape used to compute a nonlinear subexpression. The object is parameterized by a {N,T<:RelaxTag}
where N corresponds the the subgradient size used in the MC object.
- nd::Vector{JuMP.NodeData}
- adj::SparseMatrixCSC{Bool,Int64}
- const_values::Vector{Float64}
- setstorage::Vector{MC{N,T}}
- numberstorage::Vector{Float64}
- numvalued::Vector{Bool}
- tp1storage::Vector{Float64}
- tp2storage::Vector{Float64}
- tp3storage::Vector{Float64}
- tp4storage::Vector{Float64}
- tpdict::Dict{Int64,Tuple{Int64,Int64,Int64,Int64}}
- linearity::JuMP._Derivatives.Linearity
Nonlinear Evaluator
EAGO.Evaluator
— Type.Evaluator
MOI.AbstractNLPEvaluator for calculating relaxations of nonlinear terms.
Internal Functions Used by Evaluator
EAGO.set_current_node!
— Method.set_current_node!(x::Evaluator, n::NodeBB)
Sets the current node in the Evaluator structure.
EAGO.eval_objective_lo
— Method.eval_objective_lo
Retrieves the lower bound of the objective.
EAGO.eval_constraint_cc
— Method.eval_constraint_cc(d::Evaluator, g::Vector{Float64}, y::Vector{Float64})
Populates g
with the concave relaxations of the constraints of d
evaluated at y
.
EAGO.eval_constraint_lo!
— Method.eval_constraint_lo!(d::Evaluator, g::Vector{Float64})
Populates g
with the lower bounds of the constraints of d
.
EAGO.eval_constraint_hi!
— Method.eval_constraint_hi!(d::Evaluator, g::Vector{Float64})
Populates g
with the upper bounds of the constraints of d
.
EAGO.eval_constraint_cc_grad
— Method.eval_constraint_cc_grad(d::Evaluator, g, y)
Populates g
with the subgradients of the constraints of d
evaluated at y
.
EAGO.get_node_lower
— Method.get_node_lower(d::FunctionSetStorage, i::Int64)
Retreives the lower bound of ith term in the tape of d
.
EAGO.get_node_upper
— Method.get_node_upper(d::FunctionSetStorage, i::Int64)
Retreives the upper bound of ith term in the tape of d
.
EAGO.forward_reverse_pass
— Method.forward_reverse_pass(d::Evaluator, x::Vector{Float64})
Performs a d.fw_repeats
forward passes of the set-value evaluator each followed by a reverse pass if d.has_reverse
as long as the node between passes differs by more that d.fw_atol
at each iteration.