This subpart is meant to provide a flexible framework for implementing spatial branch-and-bound based optimization routines in Julia. All components of the branch-and-bound routine can be customized by the individual user: lower bounding problem, upper bounding problem. The branch and bound routine consists of a main solve algorithm that executes as depicted in the flowchart below. Routines for setting the objects to implement standard B&B routines are also provided using a set_default!() function.

The preprocessing routine has inputs
(feas,X,UBD,k,d,opt)and outputsfeas::Bool,X::Vector{Interval{Float64}}. The initial feasibility flag isfeas, the bounds on the variables areX, the current upper bound isUBD, the iteration number isk, the node depth isd, and a solver option storage object isopt.The lower bounding routine has inputs
(X,k,d,opt,UBDg)and provides outputs(val,soln,feas,Lsto). The value of the subproblem isval, the solution of the subproblem issoln, it's feasibility isfeas, andLstois a problem information storage object.The upper bounding routine has inputs
(X,k,d,opt,UBDg)and provides outputs(val,soln,feas,Usto). he value of the subproblem isval, the solution of the subproblem issoln, it's feasibility isfeas, andUtois a problem information storage object.The postprocessing routine has inputs
(feas,X,k,d,opt,Lsto,Usto,LBDg,UBDg)and outputsfeas::Bool,X::Vector{Interval{Float64}}.The repeat check has inputs
(s,m,X0,X)wheres::BnBSolveris a solver object,m::BnBModelis a model object,X0::Vector{Interval{Float64}}are node bounds after preprocessing, andX::Vector{Interval{Float64}}are the node bounds generated after postprocessing. Returns a boolean.The bisection function has inputs
(s,m,X)wheres::BnBSolveris a solver object,m::BnBModelis a model object, andX::Vector{Interval{Float64}}is the box to bisect. It returns two boxes.The termination check has inputs
(s,m,k)wheres::BnBSolveris a solver object,m::BnBModelis a model object, andk::Int64is the iteration number. Returns a boolean.The convergence check has inputs
(s,UBDg,LBD)wheres::BnBSolveris a solver object,UBDgis the global upper bound, andLBDis the lower bound.