![]() |
MAiNGO
|
Wrapper for handling the upper bounding problems by interfacing CPLEX. More...
#include <ubpCplex.h>
Public Member Functions | |
UbpCplex (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 nineqSquashIn, Settings *settingsIn, Logger *loggerIn, std::vector< Constraint > *constraintPropertiesIn, UBS_USE useIn) | |
Constructor, stores information on the problem and initializes the local-subsolvers used. More... | |
~UbpCplex () | |
Destructor. More... | |
![]() | |
UpperBoundingSolver (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 nineqSquashIn, Settings *settingsIn, Logger *loggerIn, std::vector< Constraint > *constraintPropertiesIn, UBS_USE useIn) | |
Constructor, stores information on the problem and constructs an own copy of the directed acyclic graph. More... | |
virtual | ~UpperBoundingSolver () |
Virtual destructor, only needed to make sure the correct destructor of the derived classes is called. More... | |
virtual SUBSOLVER_RETCODE | solve (babBase::BabNode const ¤tNode, double &objectiveValue, std::vector< double > &solutionPoint) |
Function called by B&B solver for solving the upper bounding problem on the current node. This calls the internal (protected) function solve_nlp that needs to be re-implemented by the derived classes. More... | |
SUBSOLVER_RETCODE | multistart (babBase::BabNode const ¤tNode, double &objectiveValue, std::vector< double > &solutionPoint, std::vector< SUBSOLVER_RETCODE > &feasible, std::vector< double > &optimalObjectives, bool &initialPointFeasible) |
Multistart heuristic for automatically solving the UBP from multiple starting points. More... | |
SUBSOLVER_RETCODE | check_feasibility (const std::vector< double > ¤tPoint, double &objectiveValue) const |
Function for checking feasibility of a point. More... | |
Private Member Functions | |
virtual SUBSOLVER_RETCODE | _solve_nlp (const std::vector< double > &lowerVarBounds, const std::vector< double > &upperVarBounds, double &objectiveValue, std::vector< double > &solutionPoint) |
Function for actually solving the NLP (actually, LP in this case) sub-problem. More... | |
void | _terminate_cplex () |
Function for taking care of memory management by terminating Cplex (either called from destructor or when an exception is thrown) More... | |
UbpCplex (const UbpCplex &) | |
UbpCplex & | operator= (const UbpCplex &) |
Private Attributes | |
Internal CPLEX variables | |
IloEnv | cplxEnv |
IloModel | cplxModel |
IloNumVarArray | cplxVars |
IloCplex | cplex |
Additional Inherited Members | |
![]() | |
enum | UBS_USE { USE_PRE = 0, USE_BAB } |
Enum for communicating what the intended purpose of the solver is. This determines which settings are used. More... | |
![]() | |
void | _determine_structure () |
Function for determining the number of variables participating in each function and the type of a function (linear, bilinear, quadratic, non-linear) More... | |
void | _determine_sparsity_jacobian () |
Function for setting the information about the sparsity structure in the Jacobian. More... | |
void | _determine_sparsity_hessian () |
Function for determining the non-zero entries in the Hessian of the Lagrangian function. More... | |
std::vector< double > | _generate_multistart_point (bool &usedCenter, const std::vector< double > &lowerVarBounds, const std::vector< double > &upperVarBounds) |
Function for generating a point used in multistart. More... | |
SUBSOLVER_RETCODE | _check_ineq (const std::vector< double > &modelOutput) const |
Function checking if inequality constraints are fulfilled. More... | |
SUBSOLVER_RETCODE | _check_ineq_squash (const std::vector< double > &modelOutput) const |
Function checking if squash inequality constraints are fulfilled (no tolerance allowed) More... | |
SUBSOLVER_RETCODE | _check_eq (const std::vector< double > &modelOutput) const |
Function checking if equality constraints are fulfilled. More... | |
SUBSOLVER_RETCODE | _check_bounds (const std::vector< double > ¤tPoint) const |
Function checking if bounds are fulfilled. More... | |
SUBSOLVER_RETCODE | _check_integrality (const std::vector< double > ¤tPoint) const |
Function checking if discrete variables are indeed discrete. More... | |
![]() | |
Settings * | _maingoSettings |
Logger * | _logger |
std::shared_ptr< DagObj > | _DAGobj |
UBS_USE | _intendedUse |
std::vector< Constraint > * | _constraintProperties |
unsigned | _nvar |
unsigned | _nineq |
unsigned | _nineqSquash |
unsigned | _neq |
std::vector< babBase::OptimizationVariable > | _originalVariables |
std::vector< double > | _originalUpperBounds |
std::vector< double > | _originalLowerBounds |
UbpStructure | _structure |
Wrapper for handling the upper bounding problems by interfacing CPLEX.
This class constructs and solves upper bounding problems which were recognized as LP, MIP, QCP or MIQCP using CPLEX (International Business Machines Corporation: IBM ILOG CPLEX v12.8. Armonk (2009)).
maingo::ubp::UbpCplex::UbpCplex | ( | 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 | nineqSquashIn, | ||
Settings * | settingsIn, | ||
Logger * | loggerIn, | ||
std::vector< Constraint > * | constraintPropertiesIn, | ||
UBS_USE | useIn | ||
) |
Constructor, stores information on the problem and initializes the local-subsolvers used.
[in] | DAG | is the directed acyclic graph constructed in MAiNGO.cpp needed to construct an own DAG for the lower bounding solver |
[in] | DAGvars | are the variables corresponding to the DAG |
[in] | DAGfunctions | are the functions corresponding to the DAG |
[in] | variables | is a vector containing the initial optimization variables defined in problem.h |
[in] | nineqIn | is the number of inequality constraints |
[in] | neqIn | is the number of equality constraints |
[in] | nineqSquashIn | is the number of squash inequality constraints which are to be used only if the squash node has been used |
[in] | settingsIn | is a pointer to the MAiNGO settings |
[in] | loggerIn | is a pointer to the MAiNGO logger object |
[in] | constraintPropertiesIn | is a pointer to the constraint properties determined by MAiNGO |
[in] | useIn | communicates what the solver is to be used for |
maingo::ubp::UbpCplex::~UbpCplex | ( | ) |
Destructor.
|
private |
default copy constructor declared private to prevent use
|
privatevirtual |
Function for actually solving the NLP (actually, LP in this case) sub-problem.
[in] | lowerVarBounds | is the vector containing the lower bounds on the variables within the current node |
[in] | upperVarBounds | is the vector containing the upper bounds on the variables within the current node |
[out] | objectiveValue | is the objective value obtained for the solution point of the upper bounding problem (need not be a local optimum!) |
[in,out] | solutionPoint | is the point at which objectiveValue was achieved (can in principle be any point within the current node!); it is also used for communicating the initial point (usually the LBP solution point) |
Reimplemented from maingo::ubp::UpperBoundingSolver.
|
private |
Function for taking care of memory management by terminating Cplex (either called from destructor or when an exception is thrown)
default assignment operator declared private to prevent use
|
private |
CPLEX object
|
private |
CPLEX environment
|
private |
CPLEX model
|
private |
CPLEX variables