Back-end

Default checks

Below are the default function for the Branch-and-Bound library. The EAGO solver populates these fields based on user inputs to the solver in order to deliver a valid nonconvex NLP solver.

The default termination check and convergence check functions are described below:

@docs
    EAGO.Term_Check(x::BnBSolver,y::BnBModel,k_int::Int64)
    EAGO.Conv_Check(x::BnBSolver,ubd::Float64,lbd::Float64)

Currently, the default is to never repeat a node.

@docs
    EAGO.Repeat_Node_Default(x::BnBSolver,y::BnBModel{Interval{T}}, Xin::Vector{Interval{T}},Xout::Vector{Interval{T}})

Fathoming

By default, nodes are fathomed on value dominance.

@docs
    EAGO.fathom!(y::BnBModel)

Pre-processing and post-processing

By default, the pre-processing and post-processing functions simply return the input Interval/MCInterval type vector and the prior feasibility value.

Bisection Methods

Method for absolute width bisection on all dimension in stack:

EAGO.Bisect_AbsFunction.
EAGO.Bisect_Abs(S::BnBSolver,B::BnBModel{T},N::Vector{T})

Returns two interval boxes 'X1,X2' created by bisecting 'N' in the highest width dimension.

source

Method for relative width bisection on all dimension in stack:

EAGO.Bisect_RelFunction.
EAGO.Bisect_Rel(S::BnBSolver,B::BnBModel,N::Vector{Interval{Float64}})

Returns two interval boxes 'X1,X2' created by bisecting 'N' in the highest width dimension after scaling by initial box size.

source

Method for absolute width bisection ignore first nx dimensions:

EAGO.Bisect_Abs_ImpFunction.
EAGO.Bisect_Abs_Imp(S::BnBSolver,B::BnBModel,N::Vector{Interval{Float64}})

Returns two interval boxes 'X1,X2' created by bisecting 'N' in the highest width dimension greater than 'nx'.

source

Method for relative width bisection ignore first nx dimensions::

EAGO.Bisect_Rel_ImpFunction.
EAGO.Bisect_Rel_Imp(S::BnBSolver,B::BnBModel,N::Vector{Interval{Float64}})

Returns two interval boxes 'X1,X2' created by bisecting 'N' in the highest width dimension greater than 'nx' after scaling by initial box size.

source

Storage Methods for Common Branching Schemes

Node storage method for breadth-first search:

EAGO.BM_breadth!Function.
EAGO.BM_breadth!

Takes the following inputs: (S::BnBSolver,B::BnBModel{T},tL::Float64,tU::Float64,X1::Vector{T},X2::Vector{T},pos::Int64)

Stores two interval boxes X1,X2 to the bottom of the stack along with their respective lower, tL and upper bounds, tU and their position number in the BnB tree. Also, assigns node numbers.

source

Node storage method for depth-first or best-first search:

EAGO.BM_depth_best!Function.
EAGO.BM_depth_best!

Takes the following inputs: (S::BnBSolver,B::BnBModel,tL::Float64,tU::Float64, X1::Vector{Interval{Float64}},X2::Vector{Interval{Float64}}, pos::Int64)

Stores two interval boxes X1,X2 to the top of the stack along with their respective lower, tL and upper bounds, tU and their position number in the BnB tree. Also, assigns node numbers.

source

Node storage method for adding a single node to the top of the stack:

EAGO.BM_Single!Function.
EAGO.BM_Single!

Takes the following inputs: (S::BnBSolver,B::BnBModel,tL::Float64,tU::Float64, X::Vector{Interval{Float64}},pos::Int64)

Stores interval box X to the top of the stack along with their respective lower, tL and upper bounds, tU and their position number in the BnB tree.

source

Selection Methods for Common Branching Schemes

Select node for best-first search:

EAGO.NS_bestMethod.
EAGO.NS_best(B::BnBModel)

Takes a single input B::BnBModel. Selects node with the lowest upper lower bound. Returns (IntvBox,LBD,UBD,id,pos) where Intv is the interval box, LBD is the lower bound of the node, UBD is the upper bound of the node, id is the id number of the node, and pos is the position of the node in the BnB tree.

source

Select node for depth-first or breadth-first search:

EAGO.NS_depth_breadth(B::BnBModel)

Takes a single input B::BnBModel. Selects node on the top of the stack. Returns (IntvBox,LBD,UBD,id,pos) where Intv is the intervalbox, LBD is the lower bound of the node, UBD is the upper bound of the node, id is the id number of the node, and pos is the position of the node in the BnB tree.

source

Functions for generating console displayed

EAGO.print_int!Method.
EAGO.print_int!(B::BnBSolver,k_int::Int64,k_nod::Int64,nid::Int64,lbdp::Float64,lbd::Float64,ubd::Float64,feasL::Bool,feasU::Bool)

Prints the iteration information if the Verbosity is set to "Normal" or "Full". The header is displayed every hdr_intv, the iteration info is displayed every itr_intv

source
EAGO.print_results!(B::BnBSolver,sol::Float64,pnt,feas::Bool,lbd_bool::Bool)

Prints the results of a single bounding problem.

source
EAGO.print_sol!Method.
EAGO.print_sol!(x::BnBSolver,y::BnBModel,ubdcnt::Int64,lbdcnt::Int64,ubdtime::Float64,lbdtime::Float64)

Prints solution information for the B&B problem. Displays first node found, solution value, solution, and time spent solving subproblems.

source