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_
Scalar * x
void setOptimizationProblem(OptimizationProblemInterface &problem)
bool get_nlp_info(Index &n, Index &m, Index &nnz_jac_g, Index &nnz_h_lag, IndexStyleEnum &index_style) override
Interface to the external interior point solver IPOPT.
IpoptWrapper(SolverIpopt *solver)
virtual ~IpoptWrapper()
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:33
Generic interface for optimization problem definitions.
bool get_bounds_info(Index n, Number *x_l, Number *x_u, Index m, Number *g_l, Number *g_u) override
bool eval_grad_f(Index n, const Number *x, bool new_x, Number *grad_f) override
void precompute1stOrderDerivatives()
bool eval_f(Index n, const Number *x, bool new_x, Number &obj_value) override
Ipopt::IpoptCalculatedQuantities IpoptCalculatedQuantities
bool eval_g(Index n, const Number *x, bool new_x, Index m, Number *g) override
OptimizationProblemInterface * _problem
bool eval_jac_g(Index n, const Number *x, bool new_x, Index m, Index nele_jac, Index *iRow, Index *jCol, Number *values) override
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
PlainMatrixType mat * n
Definition: eigenvalues.cpp:41
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
Ipopt::SolverReturn SolverReturn
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


control_box_rst
Author(s): Christoph Rösmann
autogenerated on Mon Feb 28 2022 22:07:06