16 #include "ClpFactorization.hpp" 17 #include "ClpNetworkMatrix.hpp" 18 #include "ClpSimplex.hpp" 53 LbpClp(mc::FFGraph &DAG,
const std::vector<mc::FFVar> &DAGvars,
const std::vector<mc::FFVar> &DAGfunctions,
54 const std::vector<babBase::OptimizationVariable> &variables,
const unsigned nineqIn,
const unsigned neqIn,
55 const unsigned nineqRelaxationOnlyIn,
const unsigned neqRelaxationOnlyIn,
const unsigned nineqSquashIn,
56 std::shared_ptr<Settings> settingsIn, std::shared_ptr<Logger> loggerIn, std::shared_ptr<std::vector<Constraint>> constraintPropertiesIn);
75 void _set_variable_bounds(
const std::vector<double> &lowerVarBounds,
const std::vector<double> &upperVarBounds);
87 void _update_LP_obj(
const MC &resultRelaxation,
const std::vector<double> &linearizationPoint,
const std::vector<double> &lowerVarBounds,
88 const std::vector<double> &upperVarBounds,
unsigned const &iLin,
unsigned const &iObj);
100 void _update_LP_ineq(
const MC &resultRelaxation,
const std::vector<double> &linearizationPoint,
const std::vector<double> &lowerVarBounds,
101 const std::vector<double> &upperVarBounds,
unsigned const &iLin,
unsigned const &iIneq);
114 void _update_LP_eq(
const MC &resultRelaxationCv,
const MC &resultRelaxationCc,
const std::vector<double> &linearizationPoint,
const std::vector<double> &lowerVarBounds,
115 const std::vector<double> &upperVarBounds,
unsigned const &iLin,
unsigned const &iEq);
127 void _update_LP_ineqRelaxationOnly(
const MC &resultRelaxation,
const std::vector<double> &linearizationPoint,
const std::vector<double> &lowerVarBounds,
128 const std::vector<double> &upperVarBounds,
unsigned const &iLin,
unsigned const &iIneqRelaxationOnly);
141 void _update_LP_eqRelaxationOnly(
const MC &resultRelaxationCv,
const MC &resultRelaxationCc,
const std::vector<double> &linearizationPoint,
const std::vector<double> &lowerVarBounds,
142 const std::vector<double> &upperVarBounds,
unsigned const &iLin,
unsigned const &iEqRelaxationOnly);
155 void _update_LP_ineq_squash(
const MC &resultRelaxation,
const std::vector<double> &linearizationPoint,
const std::vector<double> &lowerVarBounds,
156 const std::vector<double> &upperVarBounds,
unsigned const &iLin,
unsigned const &iIneqSquash);
167 void _update_LP_obj(
const vMC &resultRelaxationVMC,
const std::vector<std::vector<double>> &linearizationPoint,
const std::vector<double> &lowerVarBounds,
168 const std::vector<double> &upperVarBounds,
unsigned const &iObj);
179 void _update_LP_ineq(
const vMC &resultRelaxationVMC,
const std::vector<std::vector<double>> &linearizationPoint,
const std::vector<double> &lowerVarBounds,
180 const std::vector<double> &upperVarBounds,
unsigned const &iIneq);
192 void _update_LP_eq(
const vMC &resultRelaxationCvVMC,
const vMC &resultRelaxationCcVMC,
const std::vector<std::vector<double>> &linearizationPoint,
const std::vector<double> &lowerVarBounds,
193 const std::vector<double> &upperVarBounds,
unsigned const &iEq);
204 void _update_LP_ineqRelaxationOnly(
const vMC &resultRelaxationVMC,
const std::vector<std::vector<double>> &linearizationPoint,
const std::vector<double> &lowerVarBounds,
205 const std::vector<double> &upperVarBounds,
unsigned const &iIneqRelaxationOnly);
217 void _update_LP_eqRelaxationOnly(
const vMC &resultRelaxationCvVMC,
const vMC &resultRelaxationCcVMC,
const std::vector<std::vector<double>> &linearizationPoint,
const std::vector<double> &lowerVarBounds,
218 const std::vector<double> &upperVarBounds,
unsigned const &iEqRelaxationOnly);
230 void _update_LP_ineq_squash(
const vMC &resultRelaxationVMC,
const std::vector<std::vector<double>> &linearizationPoint,
const std::vector<double> &lowerVarBounds,
231 const std::vector<double> &upperVarBounds,
unsigned const &iIneqSquash);
296 void _fix_variable(
const unsigned &iVar,
const bool fixToLowerBound);
315 #ifdef LP__OPTIMALITY_CHECK 346 #ifdef LP__WRITE_CHECK_FILES 352 virtual void _write_LP_to_file(std::string &fileName);
384 #ifdef LP__OPTIMALITY_CHECK Wrapper for handling the lower bounding problems as well as optimization-based bounds tightening (OBB...
Definition: lbp.h:65
ClpSimplex _clp
Definition: lbpClp.h:371
double _get_objective_value_solver()
Function returning the objective value of the lastly solved LP.
Definition: lbpClp.cpp:952
std::vector< std::vector< double > > _dualValsEq1
Definition: lbpClp.h:387
Class representing a node in the Branch-and-Bound tree.
Definition: babNode.h:35
std::vector< std::vector< double > > _dualValsIneq
Definition: lbpClp.h:386
void _deactivate_objective_function_for_OBBT()
Function deactivating all objective rows in the LP for feasibility OBBT.
Definition: lbpClp.cpp:981
void _update_LP_ineqRelaxationOnly(const MC &resultRelaxation, const std::vector< double > &linearizationPoint, const std::vector< double > &lowerVarBounds, const std::vector< double > &upperVarBounds, unsigned const &iLin, unsigned const &iIneqRelaxationOnly)
Auxiliary function for updating LP relaxation only inequalities, i.e., processing the linearization o...
Definition: lbpClp.cpp:355
CoinPackedMatrix _matrix
Definition: lbpClp.h:372
void _set_optimization_sense_of_variable(const unsigned &iVar, const int &optimizationSense)
Function for setting the optimization sense of variable iVar in OBBT.
Definition: lbpClp.cpp:1036
std::vector< std::vector< double > > _dualValsIneqSquash
Definition: lbpClp.h:392
mc::vMcCormick< I > vMC
A type definition for a vector McCormick variable.
Definition: intervalLibrary.h:41
void _restore_LP_coefficients_after_OBBT()
Function for restoring proper coefficients and options in the LP after OBBT.
Definition: lbpClp.cpp:1058
std::vector< std::vector< double > > _dualValsObj
Definition: lbpClp.h:385
void activate_more_scaling()
Function called by the B&B solver to heuristically activate more scaling in the LBS.
Definition: lbpClp.cpp:196
void _update_LP_eqRelaxationOnly(const MC &resultRelaxationCv, const MC &resultRelaxationCc, const std::vector< double > &linearizationPoint, const std::vector< double > &lowerVarBounds, const std::vector< double > &upperVarBounds, unsigned const &iLin, unsigned const &iEqRelaxationOnly)
Auxiliary function for updating LP relaxation only equalities, i.e., processing the linearization of ...
Definition: lbpClp.cpp:392
std::vector< std::vector< double > > _dualValsEq2
Definition: lbpClp.h:388
std::vector< std::vector< double > > _dualValsEqRelaxationOnly2
Definition: lbpClp.h:391
void _modify_LP_for_feasopt_OBBT(const double ¤tUBD, std::list< unsigned > &toTreatMax, std::list< unsigned > &toTreatMin)
Function modifying the LP for feasibility-optimality OBBT.
Definition: lbpClp.cpp:1000
double _eta
Definition: lbpClp.h:381
SUBSOLVER_RETCODE _check_optimality(const babBase::BabNode ¤tNode, const double newLBD, const std::vector< double > &solution, const double etaVal, const std::vector< double > &multipliers)
Function for checking if the solution point returned by CLP solver is really optimal using strong dua...
void _get_solution_point(std::vector< double > &solution, double &etaVal)
Function for setting the solution to the solution point of the lastly solved LP.
Definition: lbpClp.cpp:929
void _initialize_matrix()
Function for initializing the CLP-internal matrix.
Definition: lbpClp.cpp:134
void _update_LP_eq(const MC &resultRelaxationCv, const MC &resultRelaxationCc, const std::vector< double > &linearizationPoint, const std::vector< double > &lowerVarBounds, const std::vector< double > &upperVarBounds, unsigned const &iLin, unsigned const &iEq)
Auxiliary function for updating LP equalities, i.e., processing the linearization of the equality...
Definition: lbpClp.cpp:295
double * _objective
Definition: lbpClp.h:377
void _terminate_Clp()
Function for taking care of memory management by terminating CLP (either called from destructor or wh...
Definition: lbpClp.cpp:1648
void _update_LP_ineq(const MC &resultRelaxation, const std::vector< double > &linearizationPoint, const std::vector< double > &lowerVarBounds, const std::vector< double > &upperVarBounds, unsigned const &iLin, unsigned const &iIneq)
Auxiliary function for updating LP inequalities, i.e., processing the linearization of the inequality...
Definition: lbpClp.cpp:258
void _update_LP_ineq_squash(const MC &resultRelaxation, const std::vector< double > &linearizationPoint, const std::vector< double > &lowerVarBounds, const std::vector< double > &upperVarBounds, unsigned const &iLin, unsigned const &iIneqSquash)
Auxiliary function for updating LP squash inequalities, i.e., processing the linearization of the squ...
Definition: lbpClp.cpp:456
SUBSOLVER_RETCODE
Enum for representing the return codes returned by the different sub-solvers (UpperBoundingSolver, LowerBoundingSolver).
Definition: returnCodes.h:36
namespace holding all essentials of MAiNGO
Definition: aleModel.h:25
mc::McCormick< I > MC
A type definition for a McCormick variable.
Definition: intervalLibrary.h:34
unsigned _numrows
Definition: lbpClp.h:374
void _update_LP_obj(const MC &resultRelaxation, const std::vector< double > &linearizationPoint, const std::vector< double > &lowerVarBounds, const std::vector< double > &upperVarBounds, unsigned const &iLin, unsigned const &iObj)
Auxiliary function for updating LP objective, i.e., processing the linearization of the objective fun...
Definition: lbpClp.cpp:220
SUBSOLVER_RETCODE _check_infeasibility(const babBase::BabNode ¤tNode)
Function for checking if the solution point returned CLP is really infeasible using Farkas' Lemma...
void _set_variable_bounds(const std::vector< double > &lowerVarBounds, const std::vector< double > &upperVarBounds)
Function for setting the bounds of variables.
Definition: lbpClp.cpp:207
void _solve_LP(const babBase::BabNode ¤tNode)
Function for solving the currently constructed linear program.
Definition: lbpClp.cpp:790
double * _upperRowBounds
Definition: lbpClp.h:379
SUBSOLVER_RETCODE _check_feasibility(const std::vector< double > &solution)
Function for checking if the solution point returned by CLP solver is really feasible.
unsigned _numcolumns
Definition: lbpClp.h:375
std::vector< std::vector< double > > _dualValsIneqRelaxationOnly
Definition: lbpClp.h:389
LP_RETCODE
Enum for representing the return codes returned when a linear program is solved.
Definition: returnCodes.h:69
LbpClp(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, std::shared_ptr< Settings > settingsIn, std::shared_ptr< Logger > loggerIn, std::shared_ptr< std::vector< Constraint >> constraintPropertiesIn)
Constructor, stores information on the problem and initializes the CLP problem and solver instances...
Definition: lbpClp.cpp:25
double _etaCoeff
Definition: lbpClp.h:382
double * _lowerRowBounds
Definition: lbpClp.h:378
void _get_multipliers(std::vector< double > &multipliers)
Function for setting the multipliers of the lastly solved LP.
Definition: lbpClp.cpp:961
Wrapper for handling the lower bounding problems by interfacing CLP.
Definition: lbpClp.h:34
~LbpClp()
Destructor.
Definition: lbpClp.cpp:124
bool _check_if_LP_really_infeasible()
Function for checking if the current linear program is really infeasible by, e.g., resolving it with different algorithms.
Definition: lbpClp.cpp:1076
void _fix_variable(const unsigned &iVar, const bool fixToLowerBound)
Function for fixing a variable to one of its bounds.
Definition: lbpClp.cpp:1045
void _turn_off_specific_options()
Function for checking if a specific option has to be turned off for a given lower bounding solver...
Definition: lbpClp.h:313
LP_RETCODE _get_LP_status()
Function returning the current status of the lastly solved linear program.
Definition: lbpClp.cpp:910
std::vector< std::vector< double > > _dualValsEqRelaxationOnly1
Definition: lbpClp.h:390