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
, andLsto
is 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
, andUto
is 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::BnBSolver
is a solver object,m::BnBModel
is 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::BnBSolver
is a solver object,m::BnBModel
is 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::BnBSolver
is a solver object,m::BnBModel
is a model object, andk::Int64
is the iteration number. Returns a boolean.The convergence check has inputs
(s,UBDg,LBD)
wheres::BnBSolver
is a solver object,UBDg
is the global upper bound, andLBD
is the lower bound.