alpaqa guanaqo
Nonconvex constrained optimization
Loading...
Searching...
No Matches
ipopt-adapter.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <alpaqa/ipopt-adapter-export.h>
7
8#include <IpTNLP.hpp>
9
10namespace alpaqa {
11
12/// Based on https://coin-or.github.io/Ipopt/INTERFACES.html
13class IPOPT_ADAPTER_EXPORT IpoptAdapter : public Ipopt::TNLP {
14 public:
20 using Index = Ipopt::Index;
21 using Number = Ipopt::Number;
22
23 struct Results {
24 Ipopt::SolverReturn status = Ipopt::SolverReturn::UNASSIGNED;
29
30 [[nodiscard]] vec combine_bounds_multipliers() const {
31 return (-solution_z_L.array() >= solution_z_U.array())
32 .select(solution_z_L, solution_z_U);
33 }
34 } results;
35
36 IpoptAdapter(const Problem &problem);
37 IpoptAdapter(Problem &&) = delete;
38
39 /// @name Functions required by Ipopt
40 /// @{
41
42 bool get_nlp_info(Index &n, Index &m, Index &nnz_jac_g, Index &nnz_h_lag,
43 IndexStyleEnum &index_style) override;
44
45 bool get_bounds_info(Index n, Number *x_l, Number *x_u, Index m,
46 Number *g_l, Number *g_u) override;
47
48 bool get_starting_point(Index n, bool init_x, Number *x, bool init_z,
49 Number *z_L, Number *z_U, Index m, bool init_lambda,
50 Number *lambda) override;
51
52 bool eval_f(Index n, const Number *x, bool new_x,
53 Number &obj_value) override;
54
55 bool eval_grad_f(Index n, const Number *x, bool new_x,
56 Number *grad_f) override;
57
58 bool eval_g(Index n, const Number *x, bool new_x, Index m,
59 Number *g) override;
60
61 bool eval_jac_g(Index n, const Number *x, bool new_x, Index m,
62 Index nele_jac, Index *iRow, Index *jCol,
63 Number *values) override;
64
65 bool eval_h(Index n, const Number *x, bool new_x, Number obj_factor,
66 Index m, const Number *lambda, bool new_lambda, Index nele_hess,
67 Index *iRow, Index *jCol, Number *values) override;
68
69 void finalize_solution(Ipopt::SolverReturn status, Index n, const Number *x,
70 const Number *z_L, const Number *z_U, Index m,
71 const Number *g, const Number *lambda,
72 Number obj_value, const Ipopt::IpoptData *ip_data,
73 Ipopt::IpoptCalculatedQuantities *ip_cq) override;
74
75 /// @}
76
77 private:
79
81 sparsity::SparsityConverter<Sparsity, sparsity::SparseCOO<Index>>;
82 Sparsity orig_sparsity_jac_g = problem.get_constraints_jacobian_sparsity(),
83 orig_sparsity_hess_L = problem.get_lagrangian_hessian_sparsity();
86};
87
88} // namespace alpaqa
Based on https://coin-or.github.io/Ipopt/INTERFACES.html.
IpoptAdapter(const Problem &problem)
const Problem & problem
bool eval_g(Index n, const Number *x, bool new_x, Index m, Number *g) override
bool eval_grad_f(Index n, const Number *x, bool new_x, Number *grad_f) override
SparsityConv cvt_sparsity_jac_g
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
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
sparsity::SparsityConverter< Sparsity, sparsity::SparseCOO< Index > > SparsityConv
bool get_bounds_info(Index n, Number *x_l, Number *x_u, Index m, Number *g_l, Number *g_u) override
bool eval_f(Index n, const Number *x, bool new_x, Number &obj_value) override
bool get_nlp_info(Index &n, Index &m, Index &nnz_jac_g, Index &nnz_h_lag, IndexStyleEnum &index_style) override
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(Ipopt::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 Ipopt::IpoptData *ip_data, Ipopt::IpoptCalculatedQuantities *ip_cq) override
IpoptAdapter(Problem &&)=delete
TypeErasedProblem< config_t > Problem
SparsityConv cvt_sparsity_hess_L
The main polymorphic minimization problem interface.
#define USING_ALPAQA_CONFIG(Conf)
Definition config.hpp:77
typename Conf::real_t real_t
Definition config.hpp:86
constexpr const auto NaN
Definition config.hpp:114
typename Conf::length_t length_t
Definition config.hpp:103
typename Conf::vec vec
Definition config.hpp:88
Double-precision double configuration.
Definition config.hpp:176