nlp_solver_ipopt_wrapper.h
Go to the documentation of this file.
1 /*********************************************************************
2  *
3  * Software License Agreement
4  *
5  * Copyright (c) 2020,
6  * TU Dortmund - Institute of Control Theory and Systems Engineering.
7  * All rights reserved.
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <https://www.gnu.org/licenses/>.
21  *
22  * Authors: Christoph Rösmann
23  *********************************************************************/
24 
25 #ifndef SRC_OPTIMIZATION_INCLUDE_CORBO_OPTIMIZATION_SOLVER_NLP_SOLVER_IPOPT_WRAPPER_H_
26 #define SRC_OPTIMIZATION_INCLUDE_CORBO_OPTIMIZATION_SOLVER_NLP_SOLVER_IPOPT_WRAPPER_H_
27 
29 
30 #define HAVE_CSTDDEF
31 #include <IpTNLP.hpp>
32 #undef HAVE_CSTDDEF
33 
34 // #include <cstddef>
35 // #define HAVE_CSTDDEF
36 
37 namespace corbo {
38 
39 class SolverIpopt; // forward declaration
40 
41 class IpoptWrapper : public Ipopt::TNLP
42 {
43  private:
45  using Number = Ipopt::Number;
46  using SolverReturn = Ipopt::SolverReturn;
47  using IpoptData = Ipopt::IpoptData;
48  using IpoptCalculatedQuantities = Ipopt::IpoptCalculatedQuantities;
49 
50  public:
52  explicit IpoptWrapper(SolverIpopt* solver);
53 
55  virtual ~IpoptWrapper();
56 
58 
61 
63  bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style) override;
64 
66  bool get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) override;
67 
69  bool get_starting_point(Index n, bool init_x, Number* x, bool init_z, Number* z_L, Number* z_U, Index m, bool init_lambda,
70  Number* lambda) override;
71 
73  bool eval_f(Index n, const Number* x, bool new_x, Number& obj_value) override;
74 
76  bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f) override;
77 
79  bool eval_g(Index n, const Number* x, bool new_x, Index m, Number* g) override;
80 
85  bool eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index* jCol, Number* values) override;
86 
91  bool eval_h(Index n, const Number* x, bool new_x, Number obj_factor, Index m, const Number* lambda, bool new_lambda, Index nele_hess, Index* iRow,
92  Index* jCol, Number* values) override;
93 
95 
98 
100  void finalize_solution(SolverReturn status, Index n, const Number* x, const Number* z_L, const Number* z_U, Index m, const Number* g,
101  const Number* lambda, Number obj_value, const IpoptData* ip_data, IpoptCalculatedQuantities* ip_cq) override;
103 
105 
106  private:
108  SolverIpopt* _solver = nullptr;
109 };
110 
111 } // namespace corbo
112 
113 #endif // SRC_OPTIMIZATION_INCLUDE_CORBO_OPTIMIZATION_SOLVER_NLP_SOLVER_IPOPT_WRAPPER_H_
corbo::IpoptWrapper::_problem
OptimizationProblemInterface * _problem
Definition: nlp_solver_ipopt_wrapper.h:107
corbo::IpoptWrapper::precompute1stOrderDerivatives
void precompute1stOrderDerivatives()
corbo::IpoptWrapper::eval_g
bool eval_g(Index n, const Number *x, bool new_x, Index m, Number *g) override
corbo::IpoptWrapper::eval_f
bool eval_f(Index n, const Number *x, bool new_x, Number &obj_value) override
corbo::IpoptWrapper::get_bounds_info
bool get_bounds_info(Index n, Number *x_l, Number *x_u, Index m, Number *g_l, Number *g_u) override
corbo
Definition: communication/include/corbo-communication/utilities.h:37
corbo::IpoptWrapper::~IpoptWrapper
virtual ~IpoptWrapper()
corbo::SolverIpopt
Interface to the external interior point solver IPOPT.
Definition: nlp_solver_ipopt.h:210
corbo::IpoptWrapper::Number
Ipopt::Number Number
Definition: nlp_solver_ipopt_wrapper.h:45
corbo::IpoptWrapper::get_starting_point
bool get_starting_point(Index n, bool init_x, Number *x, bool init_z, Number *z_L, Number *z_U, Index m, bool init_lambda, Number *lambda) override
corbo::IpoptWrapper::Index
Ipopt::Index Index
Definition: nlp_solver_ipopt_wrapper.h:44
corbo::IpoptWrapper::_solver
SolverIpopt * _solver
Definition: nlp_solver_ipopt_wrapper.h:108
corbo::IpoptWrapper
Definition: nlp_solver_ipopt_wrapper.h:41
x
Scalar * x
Definition: level1_cplx_impl.h:89
corbo::IpoptWrapper::eval_jac_g
bool eval_jac_g(Index n, const Number *x, bool new_x, Index m, Index nele_jac, Index *iRow, Index *jCol, Number *values) override
corbo::IpoptWrapper::eval_h
bool eval_h(Index n, const Number *x, bool new_x, Number obj_factor, Index m, const Number *lambda, bool new_lambda, Index nele_hess, Index *iRow, Index *jCol, Number *values) override
corbo::IpoptWrapper::setOptimizationProblem
void setOptimizationProblem(OptimizationProblemInterface &problem)
Definition: nlp_solver_ipopt_wrapper.h:57
corbo::IpoptWrapper::finalize_solution
void finalize_solution(SolverReturn status, Index n, const Number *x, const Number *z_L, const Number *z_U, Index m, const Number *g, const Number *lambda, Number obj_value, const IpoptData *ip_data, IpoptCalculatedQuantities *ip_cq) override
corbo::IpoptWrapper::IpoptCalculatedQuantities
Ipopt::IpoptCalculatedQuantities IpoptCalculatedQuantities
Definition: nlp_solver_ipopt_wrapper.h:48
corbo::IpoptWrapper::get_nlp_info
bool get_nlp_info(Index &n, Index &m, Index &nnz_jac_g, Index &nnz_h_lag, IndexStyleEnum &index_style) override
corbo::IpoptWrapper::IpoptWrapper
IpoptWrapper(SolverIpopt *solver)
n
PlainMatrixType mat * n
Definition: eigenvalues.cpp:41
corbo::IpoptWrapper::SolverReturn
Ipopt::SolverReturn SolverReturn
Definition: nlp_solver_ipopt_wrapper.h:46
corbo::IpoptWrapper::IpoptData
Ipopt::IpoptData IpoptData
Definition: nlp_solver_ipopt_wrapper.h:47
corbo::OptimizationProblemInterface
Generic interface for optimization problem definitions.
Definition: optimization_problem_interface.h:92
corbo::IpoptWrapper::eval_grad_f
bool eval_grad_f(Index n, const Number *x, bool new_x, Number *grad_f) override
Eigen::Index
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:33
optimization_problem_interface.h


control_box_rst
Author(s): Christoph Rösmann
autogenerated on Wed Mar 2 2022 00:05:58