MAiNGO
ubpNLopt.h
Go to the documentation of this file.
1 /**********************************************************************************
2  * Copyright (c) 2019 Process Systems Engineering (AVT.SVT), RWTH Aachen University
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License 2.0 which is available at
6  * http://www.eclipse.org/legal/epl-2.0.
7  *
8  * SPDX-License-Identifier: EPL-2.0
9  *
10  **********************************************************************************/
11 
12 #pragma once
13 
14 #include "ubp.h"
15 
16 #include "nlopt.hpp"
17 
18 
19 namespace maingo {
20 
21 
22 namespace ubp {
23 
24 
34 
35  public:
51  UbpNLopt(mc::FFGraph& DAG, const std::vector<mc::FFVar>& DAGvars, const std::vector<mc::FFVar>& DAGfunctions, const std::vector<babBase::OptimizationVariable>& variables,
52  const unsigned nineqIn, const unsigned neqIn, const unsigned nineqSquashIn, std::shared_ptr<Settings> settingsIn, std::shared_ptr<Logger> loggerIn, std::shared_ptr<std::vector<Constraint>> constraintPropertiesIn, UBS_USE useIn);
53 
54  private:
64  virtual SUBSOLVER_RETCODE _solve_nlp(const std::vector<double>& lowerVarBounds, const std::vector<double>& upperVarBounds, double& objectiveValue, std::vector<double>& solutionPoint);
65 
70  nlopt::opt _NLopt;
71  nlopt::opt _NLoptSubopt;
85  static double _NLopt_get_objective(const std::vector<double>& x, std::vector<double>& grad, void* f_data);
86 
97  static void _NLopt_get_ineq(unsigned m, double* result, unsigned n, const double* x, double* grad, void* f_data);
98 
109  static void _NLopt_get_eq(unsigned m, double* result, unsigned n, const double* x, double* grad, void* f_data);
112  // Prevent use of default copy constructor and copy assignment operator by declaring them private:
113  UbpNLopt(const UbpNLopt&);
114  UbpNLopt& operator=(const UbpNLopt&);
115 };
116 
117 
118 } // end namespace ubp
119 
120 
121 } // end namespace maingo
UbpNLopt(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, std::shared_ptr< Settings > settingsIn, std::shared_ptr< Logger > loggerIn, std::shared_ptr< std::vector< Constraint >> constraintPropertiesIn, UBS_USE useIn)
Constructor, stores information on the problem and initializes the local-subsolvers used...
Definition: ubpNLopt.cpp:23
static double _NLopt_get_objective(const std::vector< double > &x, std::vector< double > &grad, void *f_data)
Function returning the objective value to the NLopt interface.
Definition: ubpNLopt.cpp:173
nlopt::opt _NLoptSubopt
Definition: ubpNLopt.h:71
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 sub-problem.
Definition: ubpNLopt.cpp:128
UbpNLopt & operator=(const UbpNLopt &)
Base class for wrappers for handling the upper bounding problems.
Definition: ubp.h:44
SUBSOLVER_RETCODE
Enum for representing the return codes returned by the different sub-solvers (UpperBoundingSolver, LowerBoundingSolver).
Definition: returnCodes.h:36
nlopt::opt _NLopt
Definition: ubpNLopt.h:70
static void _NLopt_get_eq(unsigned m, double *result, unsigned n, const double *x, double *grad, void *f_data)
Function providing gradient and value information on equalities to the NLopt interface.
Definition: ubpNLopt.cpp:203
namespace holding all essentials of MAiNGO
Definition: aleModel.h:25
UBS_USE
Enum for communicating what the intended purpose of the solver is. This determines which settings are...
Definition: ubp.h:51
Wrapper for handling the upper bounding problems by interfacing NLopt.
Definition: ubpNLopt.h:33
static void _NLopt_get_ineq(unsigned m, double *result, unsigned n, const double *x, double *grad, void *f_data)
Function providing gradient and value information on inequalities to the NLopt interface.
Definition: ubpNLopt.cpp:188