MAiNGO
maingo::lbp Namespace Reference

namespace holding all essentials of the lower bounding solver More...

Classes

struct  DagObj
 Struct for storing all needed Directed acyclic Graph objects for the upper bounding solver. More...
 
class  LbpClp
 Wrapper for handling the lower bounding problems by interfacing CLP. More...
 
class  LbpCplex
 Wrapper for handling the lower bounding problems by interfacing CPLEX. More...
 
struct  LbpDualInfo
 Container for information from the LBP that is needed in DBBT and probing, used for communicating the results via bab. More...
 
class  LbpInterval
 Wrapper for handling the lower bounding problems by using interval arithmetics. We currently do a bit too much work, if the subgradient interval heuristic is not used, since we additionally compute the McCormick relaxations. More...
 
class  LowerBoundingSolver
 Wrapper for handling the lower bounding problems as well as optimization-based bounds tightening (OBBT) More...
 

Enumerations

enum  LINEARIZATION_RETCODE { LINEARIZATION_INFEASIBLE = 0, LINEARIZATION_OPTIMAL, LINEARIZATION_UNKNOWN }
 Enum for representing the return codes returned by the different linearization techniques. More...
 
enum  LP_RETCODE { LP_INFEASIBLE = 0, LP_OPTIMAL, LP_UNKNOWN }
 Enum for representing the return codes returned when a linear program is solved. More...
 
enum  LBP_SOLVER { SOLVER_MAiNGO = 0, SOLVER_INTERVAL = 1, SOLVER_CPLEX = 2, SOLVER_CLP = 3 }
 Enum for selecting the STRATegy so be used for solving the lower bounding problems. More...
 
enum  OBBT { OBBT_FEAS = 0, OBBT_FEASOPT }
 Enum for communicating whether Optimization-Based Bound Tightening should consider only feasibility or also optimality. More...
 
enum  LINP {
  LINP_MID = 0, LINP_INCUMBENT, LINP_KELLEY, LINP_SIMPLEX,
  LINP_RANDOM, LINP_KELLEY_SIMPLEX
}
 Enum for selecting the Linearization Points to be used in constructing affine relaxations. More...
 

Functions

std::shared_ptr< LowerBoundingSolvermake_lbp_solver (mc::FFGraph &DAG, const std::vector< mc::FFVar > &DAGvars, const std::vector< mc::FFVar > &DAGfunctions, const std::vector< babBase::OptimizationVariable > &variables, const unsigned nineqIn, const unsigned neqIn, const unsigned nineqRelaxationOnlyIn, const unsigned neqRelaxationOnlyIn, const unsigned nineqSquashIn, Settings *settingsIn, Logger *loggerIn, std::vector< Constraint > *constraintPropertiesIn)
 Factory function for initializing different lower bounding solver wrappers. More...
 

Detailed Description

namespace holding all essentials of the lower bounding solver

Enumeration Type Documentation

◆ LBP_SOLVER

Enum for selecting the STRATegy so be used for solving the lower bounding problems.

Enumerator
SOLVER_MAiNGO 

(=0): MAiNGO intern lower bounding solver consisting of linearizing the objective function at only 1 point and minimizing the linearization over box constraints

SOLVER_INTERVAL 

(=1): solution of lower bounding problems using only interval based relaxations

SOLVER_CPLEX 

(=2): solution of lower bounding linear programs using CPLEX

SOLVER_CLP 

(=3): solution of lower bounding linear programs using CLP

◆ LINEARIZATION_RETCODE

Enum for representing the return codes returned by the different linearization techniques.

Enumerator
LINEARIZATION_INFEASIBLE 

the problem was found to be infeasible during linearization

LINEARIZATION_OPTIMAL 

solved final LP during linearization

LINEARIZATION_UNKNOWN 

the solver did not solve the final LP problem yet

◆ LINP

Enum for selecting the Linearization Points to be used in constructing affine relaxations.

Enumerator
LINP_MID 

(=0) : Linearize only at the midpoint of the current node

LINP_INCUMBENT 

(=1) : Linearize at the incumbent value if it is in the current interval, else linearize at mid point, if using the subgradient interval heuristic, the heuristic also linearizes each operation at the incumbent if possible

LINP_KELLEY 

(=2) : Linearize at points determined via an adapted version of Kelley's algorithm, each function is treated individually

LINP_SIMPLEX 

(=3) : Linearize at mid point + (n+1)/2 points given as vertices of the (n+1) simplex where n is the dimension of the problem

LINP_RANDOM 

(=4) : Linearize at mid point + (n+1)/2 random points

LINP_KELLEY_SIMPLEX 

(=5) : Linearize at mid point + (n+1)/2 points given as vertices of the (n+1) simplex where n is the dimension of the problem and then apply Kelleys algorithm

◆ LP_RETCODE

Enum for representing the return codes returned when a linear program is solved.

Enumerator
LP_INFEASIBLE 

the linear program was found to be infeasible

LP_OPTIMAL 

solved LP to optimality

LP_UNKNOWN 

solved LP to unknown status

◆ OBBT

Enum for communicating whether Optimization-Based Bound Tightening should consider only feasibility or also optimality.

Enumerator
OBBT_FEAS 

Consider feasibility only, i.e., maximize and minimize each variable only subject to the relaxed (and linearized) constraints

OBBT_FEASOPT 

Consider both feasibility and optimality, i.e., including the objective function cut f_cv<=UBD

Function Documentation

◆ make_lbp_solver()

std::shared_ptr< LowerBoundingSolver > maingo::lbp::make_lbp_solver ( mc::FFGraph &  DAG,
const std::vector< mc::FFVar > &  DAGvars,
const std::vector< mc::FFVar > &  DAGfunctions,
const std::vector< babBase::OptimizationVariable > &  variables,
const unsigned  nineqIn,
const unsigned  neqIn,
const unsigned  nineqRelaxationOnlyIn,
const unsigned  neqRelaxationOnlyIn,
const unsigned  nineqSquashIn,
Settings settingsIn,
Logger loggerIn,
std::vector< Constraint > *  constraintPropertiesIn 
)

Factory function for initializing different lower bounding solver wrappers.

Parameters
[in]DAGis the directed acyclic graph constructed in MAiNGO.cpp needed to construct an own DAG for the lower bounding solver
[in]DAGvarsare the variables corresponding to the DAG
[in]DAGfunctionsare the functions corresponding to the DAG
[in]variablesis a vector containing the initial optimization variables defined in problem.h
[in]nineqInis the number of inequality constraints
[in]neqInis the number of equality
[in]nineqRelaxationOnlyInis the number of inequality for use only in the relaxed problem
[in]neqRelaxationOnlyInis the number of equality constraints for use only in the relaxed problem
[in]nineqSquashInis the number of squash inequality constraints which are to be used only if the squash node has been used
[in]settingsInis a pointer to the MAiNGO settings
[in]loggerInis a pointer to the MAiNGO logger object
[in]constraintPropertiesInis a pointer to the constraint properties determined by MAiNGO