![]() |
MAiNGO
|
Wrapper for handling the upper bounding problems by interfacing Knitro. More...
#include <ubpKnitro.h>
Public Member Functions | |
UbpKnitro (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... | |
~UbpKnitro () | |
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 | |
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 sub-problem. This needs to be re-defined in derived classes to call specific sub-solvers. More... | |
UbpKnitro (const UbpKnitro &) | |
UbpKnitro & | operator= (const UbpKnitro &) |
Private Attributes | |
KnitroProblem * | _theKnitroProblem |
knitro::KTRSolver | _Knitro |
int | _solverStatus |
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 Knitro.
This class constructs and solves upper bounding problems using Knitro (https://www.artelys.com/en/optimization-tools/knitro ). It thus evaluates the Model equations using either regular floating point arithmetics or FADBAD++ to obtain function values and gradients, and solves the resulting (MI)NLPs. The solution point obtained is checked for feasibility within the given tolerances.
maingo::ubp::UbpKnitro::UbpKnitro | ( | 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 |
|
inline |
Destructor.
|
private |
default copy constructor declared private to prevent use
|
privatevirtual |
Function for actually solving the NLP sub-problem. This needs to be re-defined in derived classes to call specific sub-solvers.
[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.
default assignment operator declared private to prevent use
|
private |
Knitro solver object
|
private |
Status of the solver
|
private |
Pointer to Knitro problem object