alpaqa 1.0.0a8
Nonconvex constrained optimization
Loading...
Searching...
No Matches
dl-problem.cpp
Go to the documentation of this file.
2
3#include <dlfcn.h>
4#include <algorithm>
5#include <cassert>
6#include <charconv>
7#include <memory>
8#include <stdexcept>
9
10namespace alpaqa::dl {
11
12std::shared_ptr<void> DLLoader::load_lib() const {
13 assert(!so_filename.empty());
14 ::dlerror();
15 void *h = ::dlopen(so_filename.c_str(), RTLD_LOCAL | RTLD_NOW);
16 if (auto *err = ::dlerror())
17 throw std::runtime_error(err);
18 return std::shared_ptr<void>{h, &::dlclose};
19}
20
21template <class F>
22F *DLLoader::load_func(std::string_view name) const {
23 assert(handle);
24 auto full_name = symbol_prefix + "_" + std::string(name);
25 ::dlerror();
26 auto *h = ::dlsym(handle.get(), full_name.c_str());
27 if (auto *err = ::dlerror())
28 throw std::runtime_error(err);
29 // We can only hope that the user got the signature right ...
30 return reinterpret_cast<F *>(h);
31}
32
33DLLoader::DLLoader(std::string so_filename, std::string symbol_prefix)
34 : so_filename(std::move(so_filename)),
35 symbol_prefix(std::move(symbol_prefix)), handle(load_lib()) {}
36
37DLProblem::DLProblem(std::string so_filename, std::string symbol_prefix,
38 void *user_param)
39 : DLLoader{std::move(so_filename), std::move(symbol_prefix)},
40 BoxConstrProblem{0, 0} {
41 auto *register_func = load_func<problem_register_t(void *)>("register");
42 auto r = register_func(user_param);
43 // Avoid leaking if std::shared_ptr constructor throws
44 std::unique_ptr<void, void (*)(void *)> unique_inst{r.instance, r.cleanup};
45 std::unique_ptr<alpaqa_function_dict_t> unique_extra{r.extra_functions};
46 // Check the ABI version
47 static constexpr auto format_abi_version = [](uint64_t version) {
48 std::string s(16, '0');
49 auto begin = s.data(), end = begin + s.size();
50 auto [ptr, ec] = std::to_chars(begin, end, version, 16);
51 if (ec != std::errc())
52 throw std::logic_error(std::make_error_code(ec).message());
53 std::rotate(begin, ptr, end);
54 return s;
55 };
56 if (r.functions->abi_version != ALPAQA_DL_ABI_VERSION) {
57 auto prob_version = format_abi_version(r.functions->abi_version);
58 auto alpaqa_version = format_abi_version(ALPAQA_DL_ABI_VERSION);
59 throw std::runtime_error(
60 "alpaqa::dl::DLProblem::DLProblem: "
61 "Incompatible problem definition (problem ABI version 0x" +
62 prob_version + ", this version of alpaqa supports 0x" +
63 alpaqa_version + ")");
64 }
65 // Store data returned by plugin
66 instance = std::shared_ptr<void>{std::move(unique_inst)};
67 functions = r.functions;
68 this->n = r.functions->n;
69 this->m = r.functions->m;
70 this->C = Box{this->n};
71 this->D = Box{this->m};
73 functions->initialize_box_C(instance.get(), this->C.lowerbound.data(),
74 this->C.upperbound.data());
76 functions->initialize_box_D(instance.get(), this->D.lowerbound.data(),
77 this->D.upperbound.data());
79 length_t nλ = 0;
80 functions->initialize_l1_reg(instance.get(), nullptr, &nλ);
81 if (nλ > 0) {
82 this->l1_reg.resize(nλ);
83 functions->initialize_l1_reg(instance.get(), this->l1_reg.data(),
84 &nλ);
85 }
86 }
87 extra_functions = std::shared_ptr<function_dict_t>{std::move(unique_extra)};
88}
89
91 rvec p) const -> real_t {
92 if (functions->eval_prox_grad_step)
93 return functions->eval_prox_grad_step(
94 instance.get(), γ, x.data(), grad_ψ.data(), x̂.data(), p.data());
95 return BoxConstrProblem<config_t>::eval_prox_grad_step(γ, x, grad_ψ, x̂, p);
96}
97
98// clang-format off
99auto DLProblem::eval_f(crvec x) const -> real_t { return functions->eval_f(instance.get(), x.data()); }
100auto DLProblem::eval_grad_f(crvec x, rvec grad_fx) const -> void { return functions->eval_grad_f(instance.get(), x.data(), grad_fx.data()); }
101auto DLProblem::eval_g(crvec x, rvec gx) const -> void { return functions->eval_g(instance.get(), x.data(), gx.data()); }
102auto DLProblem::eval_grad_g_prod(crvec x, crvec y, rvec grad_gxy) const -> void { return functions->eval_grad_g_prod(instance.get(), x.data(), y.data(), grad_gxy.data()); }
103auto DLProblem::eval_grad_gi(crvec x, index_t i, rvec grad_gi) const -> void { return functions->eval_grad_gi(instance.get(), x.data(), i, grad_gi.data()); }
104auto DLProblem::eval_jac_g(crvec x, rindexvec inner_idx, rindexvec outer_ptr, rvec J_values) const -> void { return functions->eval_jac_g(instance.get(), x.data(), inner_idx.data(), outer_ptr.data(), J_values.size() == 0 ? nullptr : J_values.data()); }
106auto DLProblem::eval_hess_L_prod(crvec x, crvec y, real_t scale, crvec v, rvec Hv) const -> void { return functions->eval_hess_L_prod(instance.get(), x.data(), y.data(), scale, v.data(), Hv.data()); }
107auto DLProblem::eval_hess_L(crvec x, crvec y, real_t scale, rindexvec inner_idx, rindexvec outer_ptr, rvec H_values) const -> void { return functions->eval_hess_L(instance.get(), x.data(), y.data(), scale, inner_idx.data(), outer_ptr.data(), H_values.size() == 0 ? nullptr : H_values.data()); }
109auto DLProblem::eval_hess_ψ_prod(crvec x, crvec y, crvec Σ, real_t scale, crvec v, rvec Hv) const -> void { return functions->eval_hess_ψ_prod(instance.get(), x.data(), y.data(), Σ.data(), scale, D.lowerbound.data(), D.upperbound.data(), v.data(), Hv.data()); }
110auto DLProblem::eval_hess_ψ(crvec x, crvec y, crvec Σ, real_t scale, rindexvec inner_idx, rindexvec outer_ptr, rvec H_values) const -> void { return functions->eval_hess_ψ(instance.get(), x.data(), y.data(), Σ.data(), scale, D.lowerbound.data(), D.upperbound.data(), inner_idx.data(), outer_ptr.data(), H_values.size() == 0 ? nullptr : H_values.data()); }
112auto DLProblem::eval_f_grad_f(crvec x, rvec grad_fx) const -> real_t { return functions->eval_f_grad_f(instance.get(), x.data(), grad_fx.data()); }
113auto DLProblem::eval_f_g(crvec x, rvec g) const -> real_t { return functions->eval_f_g(instance.get(), x.data(), g.data()); }
114auto DLProblem::eval_grad_f_grad_g_prod(crvec x, crvec y, rvec grad_f, rvec grad_gxy) const -> void { return functions->eval_grad_f_grad_g_prod(instance.get(), x.data(), y.data(), grad_f.data(), grad_gxy.data()); }
115auto DLProblem::eval_grad_L(crvec x, crvec y, rvec grad_L, rvec work_n) const -> void { return functions->eval_grad_L(instance.get(), x.data(), y.data(), grad_L.data(), work_n.data()); }
116auto DLProblem::eval_ψ(crvec x, crvec y, crvec Σ, rvec ŷ) const -> real_t { return functions->eval_ψ(instance.get(), x.data(), y.data(), Σ.data(), D.lowerbound.data(), D.upperbound.data(), ŷ.data()); }
117auto DLProblem::eval_grad_ψ(crvec x, crvec y, crvec Σ, rvec grad_ψ, rvec work_n, rvec work_m) const -> void { return functions->eval_grad_ψ(instance.get(), x.data(), y.data(), Σ.data(), D.lowerbound.data(), D.upperbound.data(), grad_ψ.data(), work_n.data(), work_m.data()); }
118auto DLProblem::eval_ψ_grad_ψ(crvec x, crvec y, crvec Σ, rvec grad_ψ, rvec work_n, rvec work_m) const -> real_t { return functions->eval_ψ_grad_ψ(instance.get(), x.data(), y.data(), Σ.data(), D.lowerbound.data(), D.upperbound.data(), grad_ψ.data(), work_n.data(), work_m.data()); }
119
120bool DLProblem::provides_eval_f() const { return functions->eval_f != nullptr; }
121bool DLProblem::provides_eval_grad_f() const { return functions->eval_grad_f != nullptr; }
122bool DLProblem::provides_eval_g() const { return functions->eval_g != nullptr; }
124bool DLProblem::provides_eval_jac_g() const { return functions->eval_jac_g != nullptr; }
126bool DLProblem::provides_eval_grad_gi() const { return functions->eval_grad_gi != nullptr; }
128bool DLProblem::provides_eval_hess_L() const { return functions->eval_hess_L != nullptr; }
131bool DLProblem::provides_eval_hess_ψ() const { return functions->eval_hess_ψ != nullptr; }
134bool DLProblem::provides_eval_f_g() const { return functions->eval_f_g != nullptr; }
136bool DLProblem::provides_eval_grad_L() const { return functions->eval_grad_L != nullptr; }
137bool DLProblem::provides_eval_ψ() const { return functions->eval_ψ != nullptr; }
138bool DLProblem::provides_eval_grad_ψ() const { return functions->eval_grad_ψ != nullptr; }
141// clang-format on
142
143#if ALPAQA_WITH_OCP
144
146 std::string symbol_prefix, void *user_param)
147 : DLLoader{std::move(so_filename), std::move(symbol_prefix)} {
148 auto *register_func =
149 load_func<control_problem_register_t(void *)>("register");
150 auto r = register_func(user_param);
151 // Avoid leaking if std::shared_ptr constructor throws
152 std::unique_ptr<void, void (*)(void *)> unique_inst{r.instance, r.cleanup};
153 std::unique_ptr<alpaqa_function_dict_t> unique_extra{r.extra_functions};
154 // Store data returned by plugin
155 instance = std::shared_ptr<void>{std::move(unique_inst)};
156 functions = r.functions;
157 extra_functions = std::shared_ptr<function_dict_t>{std::move(unique_extra)};
158}
159
160// clang-format off
161auto DLControlProblem::get_U(Box &U) const -> void { return functions->get_U(instance.get(), U.lowerbound.data(), U.upperbound.data()); }
162auto DLControlProblem::get_D(Box &D) const -> void { return functions->get_D(instance.get(), D.lowerbound.data(), D.upperbound.data()); }
163auto DLControlProblem::get_D_N(Box &D) const -> void { return functions->get_D_N(instance.get(), D.lowerbound.data(), D.upperbound.data()); }
164auto DLControlProblem::get_x_init(rvec x_init) const -> void { return functions->get_x_init(instance.get(), x_init.data()); }
165auto DLControlProblem::eval_f(index_t timestep, crvec x, crvec u, rvec fxu) const -> void { return functions->eval_f(instance.get(), timestep, x.data(), u.data(), fxu.data()); }
166auto DLControlProblem::eval_jac_f(index_t timestep, crvec x, crvec u, rmat J_fxu) const -> void { return functions->eval_jac_f(instance.get(), timestep, x.data(), u.data(), J_fxu.data()); }
167auto DLControlProblem::eval_grad_f_prod(index_t timestep, crvec x, crvec u, crvec p, rvec grad_fxu_p) const -> void { return functions->eval_grad_f_prod(instance.get(), timestep, x.data(), u.data(), p.data(), grad_fxu_p.data()); }
168auto DLControlProblem::eval_h(index_t timestep, crvec x, crvec u, rvec h) const -> void { return functions->eval_h(instance.get(), timestep, x.data(), u.data(), h.data()); }
169auto DLControlProblem::eval_h_N(crvec x, rvec h) const -> void { return functions->eval_h_N(instance.get(), x.data(), h.data()); }
170auto DLControlProblem::eval_l(index_t timestep, crvec h) const -> real_t { return functions->eval_l(instance.get(), timestep, h.data()); }
171auto DLControlProblem::eval_l_N(crvec h) const -> real_t { return functions->eval_l_N(instance.get(), h.data()); }
172auto DLControlProblem::eval_qr(index_t timestep, crvec xu, crvec h, rvec qr) const -> void { return functions->eval_qr(instance.get(), timestep, xu.data(), h.data(), qr.data()); }
173auto DLControlProblem::eval_q_N(crvec x, crvec h, rvec q) const -> void { return functions->eval_q_N(instance.get(), x.data(), h.data(), q.data()); }
174auto DLControlProblem::eval_add_Q(index_t timestep, crvec xu, crvec h, rmat Q) const -> void { return functions->eval_add_Q(instance.get(), timestep, xu.data(), h.data(), Q.data()); }
175auto DLControlProblem::eval_add_Q_N(crvec x, crvec h, rmat Q) const -> void { return functions->eval_add_Q_N(instance.get(), x.data(), h.data(), Q.data()); }
176auto DLControlProblem::eval_add_R_masked(index_t timestep, crvec xu, crvec h, crindexvec mask, rmat R, rvec work) const -> void { return functions->eval_add_R_masked(instance.get(), timestep, xu.data(), h.data(), mask.data(), R.data(), work.data()); }
177auto DLControlProblem::eval_add_S_masked(index_t timestep, crvec xu, crvec h, crindexvec mask, rmat S, rvec work) const -> void { return functions->eval_add_S_masked(instance.get(), timestep, xu.data(), h.data(), mask.data(), S.data(), work.data()); }
178auto DLControlProblem::eval_add_R_prod_masked(index_t timestep, crvec xu, crvec h, crindexvec mask_J, crindexvec mask_K, crvec v, rvec out, rvec work) const -> void { return functions->eval_add_R_prod_masked(instance.get(), timestep, xu.data(), h.data(), mask_J.data(), mask_K.data(), v.data(), out.data(), work.data()); }
179auto DLControlProblem::eval_add_S_prod_masked(index_t timestep, crvec xu, crvec h, crindexvec mask_K, crvec v, rvec out, rvec work) const -> void { return functions->eval_add_S_prod_masked(instance.get(), timestep, xu.data(), h.data(), mask_K.data(), v.data(), out.data(), work.data()); }
182auto DLControlProblem::eval_constr(index_t timestep, crvec x, rvec c) const -> void { return functions->eval_constr(instance.get(), timestep, x.data(), c.data()); }
183auto DLControlProblem::eval_constr_N(crvec x, rvec c) const -> void { return functions->eval_constr_N(instance.get(), x.data(), c.data()); }
184auto DLControlProblem::eval_grad_constr_prod(index_t timestep, crvec x, crvec p, rvec grad_cx_p) const -> void { return functions->eval_grad_constr_prod(instance.get(), timestep, x.data(), p.data(), grad_cx_p.data()); }
185auto DLControlProblem::eval_grad_constr_prod_N(crvec x, crvec p, rvec grad_cx_p) const -> void { return functions->eval_grad_constr_prod_N(instance.get(), x.data(), p.data(), grad_cx_p.data()); }
186auto DLControlProblem::eval_add_gn_hess_constr(index_t timestep, crvec x, crvec M, rmat out) const -> void { return functions->eval_add_gn_hess_constr(instance.get(), timestep, x.data(), M.data(), out.data()); }
187auto DLControlProblem::eval_add_gn_hess_constr_N(crvec x, crvec M, rmat out) const -> void { return functions->eval_add_gn_hess_constr_N(instance.get(), x.data(), M.data(), out.data()); }
188
189bool DLControlProblem::provides_get_D() const { return functions->get_D != nullptr; }
190bool DLControlProblem::provides_get_D_N() const { return functions->get_D_N != nullptr; }
202// clang-format on
203
204#endif
205
206} // namespace alpaqa::dl
Implements common problem functions for minimization problems with box constraints.
Box C
Constraints of the decision variables, .
length_t m
Number of constraints, dimension of g(x) and z.
length_t n
Number of decision variables, dimension of x.
real_t eval_prox_grad_step(real_t γ, crvec x, crvec grad_ψ, rvec x̂, rvec p) const
vec l1_reg
(1-norm) regularization parameter.
void eval_add_S_masked(index_t timestep, crvec xu, crvec h, crindexvec mask, rmat S, rvec work) const
Definition: dl-problem.cpp:177
bool provides_eval_grad_constr_prod() const
Definition: dl-problem.cpp:198
void eval_add_Q_N(crvec x, crvec h, rmat Q) const
Definition: dl-problem.cpp:175
bool provides_eval_add_gn_hess_constr() const
Definition: dl-problem.cpp:200
void eval_q_N(crvec x, crvec h, rvec q) const
Definition: dl-problem.cpp:173
void eval_add_gn_hess_constr(index_t timestep, crvec x, crvec M, rmat out) const
Definition: dl-problem.cpp:186
void eval_grad_constr_prod(index_t timestep, crvec x, crvec p, rvec grad_cx_p) const
Definition: dl-problem.cpp:184
void eval_add_R_prod_masked(index_t timestep, crvec xu, crvec h, crindexvec mask_J, crindexvec mask_K, crvec v, rvec out, rvec work) const
Definition: dl-problem.cpp:178
bool provides_eval_add_R_prod_masked() const
Definition: dl-problem.cpp:192
length_t get_S_work_size() const
Definition: dl-problem.cpp:181
void eval_constr_N(crvec x, rvec c) const
Definition: dl-problem.cpp:183
void get_D_N(Box &D) const
Definition: dl-problem.cpp:163
bool provides_get_S_work_size() const
Definition: dl-problem.cpp:195
void eval_grad_f_prod(index_t timestep, crvec x, crvec u, crvec p, rvec grad_fxu_p) const
Definition: dl-problem.cpp:167
bool provides_eval_add_Q_N() const
Definition: dl-problem.cpp:191
std::shared_ptr< void > instance
Problem instance created by the registration function, including the deleter to destroy it.
Definition: dl-problem.hpp:223
void eval_jac_f(index_t timestep, crvec x, crvec u, rmat J_fxu) const
Definition: dl-problem.cpp:166
real_t eval_l_N(crvec h) const
Definition: dl-problem.cpp:171
void eval_h_N(crvec x, rvec h) const
Definition: dl-problem.cpp:169
real_t eval_l(index_t timestep, crvec h) const
Definition: dl-problem.cpp:170
void eval_grad_constr_prod_N(crvec x, crvec p, rvec grad_cx_p) const
Definition: dl-problem.cpp:185
control_problem_functions_t * functions
Pointer to the struct of function pointers for evaluating the objective, constraints,...
Definition: dl-problem.hpp:226
void eval_add_gn_hess_constr_N(crvec x, crvec M, rmat out) const
Definition: dl-problem.cpp:187
DLControlProblem(std::string so_filename, std::string symbol_prefix="alpaqa_control_problem", void *user_param=nullptr)
Load a problem from a shared library.
Definition: dl-problem.cpp:145
void get_U(Box &U) const
Definition: dl-problem.cpp:161
void eval_f(index_t timestep, crvec x, crvec u, rvec fxu) const
Definition: dl-problem.cpp:165
bool provides_eval_grad_constr_prod_N() const
Definition: dl-problem.cpp:199
length_t get_R_work_size() const
Definition: dl-problem.cpp:180
void eval_add_S_prod_masked(index_t timestep, crvec xu, crvec h, crindexvec mask_K, crvec v, rvec out, rvec work) const
Definition: dl-problem.cpp:179
bool provides_eval_add_S_prod_masked() const
Definition: dl-problem.cpp:193
void get_x_init(rvec x_init) const
Definition: dl-problem.cpp:164
void eval_h(index_t timestep, crvec x, crvec u, rvec h) const
Definition: dl-problem.cpp:168
void eval_add_R_masked(index_t timestep, crvec xu, crvec h, crindexvec mask, rmat R, rvec work) const
Definition: dl-problem.cpp:176
void eval_qr(index_t timestep, crvec xu, crvec h, rvec qr) const
Definition: dl-problem.cpp:172
void get_D(Box &D) const
Definition: dl-problem.cpp:162
bool provides_eval_constr_N() const
Definition: dl-problem.cpp:197
void eval_add_Q(index_t timestep, crvec xu, crvec h, rmat Q) const
Definition: dl-problem.cpp:174
bool provides_get_R_work_size() const
Definition: dl-problem.cpp:194
bool provides_eval_add_gn_hess_constr_N() const
Definition: dl-problem.cpp:201
void eval_constr(index_t timestep, crvec x, rvec c) const
Definition: dl-problem.cpp:182
DLLoader(std::string so_filename, std::string symbol_prefix)
Load a shared library.
Definition: dl-problem.cpp:33
std::shared_ptr< function_dict_t > extra_functions
An associative array of additional functions exposed by the problem.
Definition: dl-problem.hpp:34
F * load_func(std::string_view name) const
Load a function with signature F from the library using dlsym.
Definition: dl-problem.cpp:22
std::string symbol_prefix
Definition: dl-problem.hpp:27
std::string so_filename
Definition: dl-problem.hpp:26
std::shared_ptr< void > load_lib() const
Open the shared library using dlopen
Definition: dl-problem.cpp:12
dl_handle_t handle
Handle to the shared library (returned by dlopen).
Definition: dl-problem.hpp:31
bool provides_eval_hess_L() const
Definition: dl-problem.cpp:128
real_t eval_prox_grad_step(real_t γ, crvec x, crvec grad_ψ, rvec x̂, rvec p) const
Definition: dl-problem.cpp:90
real_t eval_ψ_grad_ψ(crvec x, crvec y, crvec Σ, rvec grad_ψ, rvec work_n, rvec work_m) const
Definition: dl-problem.cpp:118
void eval_grad_gi(crvec x, index_t i, rvec grad_gi) const
Definition: dl-problem.cpp:103
void eval_hess_L_prod(crvec x, crvec y, real_t scale, crvec v, rvec Hv) const
Definition: dl-problem.cpp:106
bool provides_eval_hess_ψ_prod() const
Definition: dl-problem.cpp:130
void eval_hess_ψ_prod(crvec x, crvec y, crvec Σ, real_t scale, crvec v, rvec Hv) const
Definition: dl-problem.cpp:109
bool provides_eval_ψ_grad_ψ() const
Definition: dl-problem.cpp:139
bool provides_get_box_C() const
Definition: dl-problem.cpp:140
real_t eval_f_g(crvec x, rvec g) const
Definition: dl-problem.cpp:113
bool provides_get_hess_L_num_nonzeros() const
Definition: dl-problem.cpp:129
void eval_hess_L(crvec x, crvec y, real_t scale, rindexvec inner_idx, rindexvec outer_ptr, rvec H_values) const
Definition: dl-problem.cpp:107
void eval_grad_f(crvec x, rvec grad_fx) const
Definition: dl-problem.cpp:100
bool provides_get_jac_g_num_nonzeros() const
Definition: dl-problem.cpp:125
bool provides_eval_jac_g() const
Definition: dl-problem.cpp:124
void eval_grad_f_grad_g_prod(crvec x, crvec y, rvec grad_f, rvec grad_gxy) const
Definition: dl-problem.cpp:114
real_t eval_ψ(crvec x, crvec y, crvec Σ, rvec ŷ) const
Definition: dl-problem.cpp:116
std::shared_ptr< void > instance
Problem instance created by the registration function, including the deleter to destroy it.
Definition: dl-problem.hpp:123
bool provides_eval_g() const
Definition: dl-problem.cpp:122
void eval_grad_ψ(crvec x, crvec y, crvec Σ, rvec grad_ψ, rvec work_n, rvec work_m) const
Definition: dl-problem.cpp:117
bool provides_eval_grad_f_grad_g_prod() const
Definition: dl-problem.cpp:135
bool provides_eval_f() const
Definition: dl-problem.cpp:120
bool provides_eval_hess_L_prod() const
Definition: dl-problem.cpp:127
bool provides_eval_grad_g_prod() const
Definition: dl-problem.cpp:123
bool provides_get_hess_ψ_num_nonzeros() const
Definition: dl-problem.cpp:132
real_t eval_f_grad_f(crvec x, rvec grad_fx) const
Definition: dl-problem.cpp:112
bool provides_eval_f_grad_f() const
Definition: dl-problem.cpp:133
bool provides_eval_grad_f() const
Definition: dl-problem.cpp:121
bool provides_eval_grad_gi() const
Definition: dl-problem.cpp:126
bool provides_eval_f_g() const
Definition: dl-problem.cpp:134
problem_functions_t * functions
Pointer to the struct of function pointers for evaluating the objective, constraints,...
Definition: dl-problem.hpp:126
real_t eval_f(crvec x) const
Definition: dl-problem.cpp:99
void eval_jac_g(crvec x, rindexvec inner_idx, rindexvec outer_ptr, rvec J_values) const
Definition: dl-problem.cpp:104
bool provides_eval_grad_L() const
Definition: dl-problem.cpp:136
void eval_grad_g_prod(crvec x, crvec y, rvec grad_gxy) const
Definition: dl-problem.cpp:102
bool provides_eval_grad_ψ() const
Definition: dl-problem.cpp:138
length_t get_jac_g_num_nonzeros() const
Definition: dl-problem.cpp:105
DLProblem(std::string so_filename, std::string symbol_prefix="alpaqa_problem", void *user_param=nullptr)
Load a problem from a shared library.
Definition: dl-problem.cpp:37
bool provides_eval_hess_ψ() const
Definition: dl-problem.cpp:131
void eval_grad_L(crvec x, crvec y, rvec grad_L, rvec work_n) const
Definition: dl-problem.cpp:115
void eval_g(crvec x, rvec gx) const
Definition: dl-problem.cpp:101
void eval_hess_ψ(crvec x, crvec y, crvec Σ, real_t scale, rindexvec inner_idx, rindexvec outer_ptr, rvec H_values) const
Definition: dl-problem.cpp:110
bool provides_eval_ψ() const
Definition: dl-problem.cpp:137
length_t get_hess_ψ_num_nonzeros() const
Definition: dl-problem.cpp:111
length_t get_hess_L_num_nonzeros() const
Definition: dl-problem.cpp:108
#define ALPAQA_DL_ABI_VERSION
Definition: dl-problem.h:7
typename Conf::rmat rmat
Definition: config.hpp:60
typename Conf::real_t real_t
Definition: config.hpp:51
typename Conf::rindexvec rindexvec
Definition: config.hpp:65
typename Conf::index_t index_t
Definition: config.hpp:63
typename Conf::length_t length_t
Definition: config.hpp:62
typename Conf::rvec rvec
Definition: config.hpp:55
typename Conf::crvec crvec
Definition: config.hpp:56
typename Conf::crindexvec crindexvec
Definition: config.hpp:66
void(* eval_add_gn_hess_constr)(void *instance, alpaqa_index_t timestep, const alpaqa_real_t *x, const alpaqa_real_t *M, alpaqa_real_t *out)
Definition: dl-problem.h:315
alpaqa_length_t(* get_S_work_size)(void *instance)
Definition: dl-problem.h:293
void(* eval_grad_constr_prod_N)(void *instance, const alpaqa_real_t *x, const alpaqa_real_t *p, alpaqa_real_t *grad_cx_p)
Definition: dl-problem.h:310
void(* get_D)(void *instance, alpaqa_real_t *lb, alpaqa_real_t *ub)
Definition: dl-problem.h:187
void(* eval_grad_constr_prod)(void *instance, alpaqa_index_t timestep, const alpaqa_real_t *x, const alpaqa_real_t *p, alpaqa_real_t *grad_cx_p)
Definition: dl-problem.h:304
void(* eval_add_R_prod_masked)(void *instance, alpaqa_index_t timestep, const alpaqa_real_t *xu, const alpaqa_real_t *h, const alpaqa_index_t *mask_J, const alpaqa_index_t *mask_K, const alpaqa_real_t *v, alpaqa_real_t *out, alpaqa_real_t *work)
Definition: dl-problem.h:272
void(* eval_add_gn_hess_constr_N)(void *instance, const alpaqa_real_t *x, const alpaqa_real_t *M, alpaqa_real_t *out)
Definition: dl-problem.h:321
alpaqa_length_t(* get_R_work_size)(void *instance)
Definition: dl-problem.h:291
void(* get_D_N)(void *instance, alpaqa_real_t *lb, alpaqa_real_t *ub)
Definition: dl-problem.h:191
void(* eval_constr)(void *instance, alpaqa_index_t timestep, const alpaqa_real_t *x, alpaqa_real_t *c)
Definition: dl-problem.h:295
void(* eval_add_Q_N)(void *instance, const alpaqa_real_t *x, const alpaqa_real_t *h, alpaqa_real_t *Q)
Definition: dl-problem.h:251
void(* eval_add_S_prod_masked)(void *instance, alpaqa_index_t timestep, const alpaqa_real_t *xu, const alpaqa_real_t *h, const alpaqa_index_t *mask_K, const alpaqa_real_t *v, alpaqa_real_t *out, alpaqa_real_t *work)
Definition: dl-problem.h:282
void(* eval_constr_N)(void *instance, const alpaqa_real_t *x, alpaqa_real_t *c)
Definition: dl-problem.h:300
void(* eval_grad_f)(void *instance, const alpaqa_real_t *x, alpaqa_real_t *grad_fx)
Definition: dl-problem.h:28
alpaqa_real_t(* eval_ψ)(void *instance, const alpaqa_real_t *x, const alpaqa_real_t *y, const alpaqa_real_t *Σ, const alpaqa_real_t *zl, const alpaqa_real_t *zu, alpaqa_real_t *ŷ)
Definition: dl-problem.h:114
void(* eval_hess_ψ_prod)(void *instance, const alpaqa_real_t *x, const alpaqa_real_t *y, const alpaqa_real_t *Σ, alpaqa_real_t scale, const alpaqa_real_t *zl, const alpaqa_real_t *zu, const alpaqa_real_t *v, alpaqa_real_t *Hv)
Definition: dl-problem.h:71
void(* initialize_box_C)(void *instance, alpaqa_real_t *lb, alpaqa_real_t *ub)
Definition: dl-problem.h:149
alpaqa_real_t(* eval_prox_grad_step)(void *instance, alpaqa_real_t γ, const alpaqa_real_t *x, const alpaqa_real_t *grad_ψ, alpaqa_real_t *x̂, alpaqa_real_t *p)
Definition: dl-problem.h:142
alpaqa_real_t(* eval_f_g)(void *instance, const alpaqa_real_t *x, alpaqa_real_t *g)
Definition: dl-problem.h:98
void(* eval_grad_f_grad_g_prod)(void *instance, const alpaqa_real_t *x, const alpaqa_real_t *y, alpaqa_real_t *grad_f, alpaqa_real_t *grad_gxy)
Definition: dl-problem.h:102
alpaqa_length_t(* get_hess_ψ_num_nonzeros)(void *instance)
Definition: dl-problem.h:92
void(* eval_grad_L)(void *instance, const alpaqa_real_t *x, const alpaqa_real_t *y, alpaqa_real_t *grad_L, alpaqa_real_t *work_n)
Definition: dl-problem.h:108
alpaqa_real_t(* eval_f_grad_f)(void *instance, const alpaqa_real_t *x, alpaqa_real_t *grad_fx)
Definition: dl-problem.h:94
alpaqa_real_t(* eval_f)(void *instance, const alpaqa_real_t *x)
Definition: dl-problem.h:25
void(* eval_hess_L)(void *instance, const alpaqa_real_t *x, const alpaqa_real_t *y, alpaqa_real_t scale, alpaqa_index_t *inner_idx, alpaqa_index_t *outer_ptr, alpaqa_real_t *H_values)
Definition: dl-problem.h:61
void(* eval_grad_ψ)(void *instance, const alpaqa_real_t *x, const alpaqa_real_t *y, const alpaqa_real_t *Σ, const alpaqa_real_t *zl, const alpaqa_real_t *zu, alpaqa_real_t *grad_ψ, alpaqa_real_t *work_n, alpaqa_real_t *work_m)
Definition: dl-problem.h:122
void(* eval_grad_gi)(void *instance, const alpaqa_real_t *x, alpaqa_index_t i, alpaqa_real_t *grad_gi)
Definition: dl-problem.h:49
void(* eval_hess_ψ)(void *instance, const alpaqa_real_t *x, const alpaqa_real_t *y, const alpaqa_real_t *Σ, alpaqa_real_t scale, const alpaqa_real_t *zl, const alpaqa_real_t *zu, alpaqa_index_t *inner_idx, alpaqa_index_t *outer_ptr, alpaqa_real_t *H_values)
Definition: dl-problem.h:81
void(* initialize_l1_reg)(void *instance, alpaqa_real_t *lambda, alpaqa_length_t *size)
Definition: dl-problem.h:157
alpaqa_length_t(* get_jac_g_num_nonzeros)(void *instance)
Definition: dl-problem.h:47
void(* eval_hess_L_prod)(void *instance, const alpaqa_real_t *x, const alpaqa_real_t *y, alpaqa_real_t scale, const alpaqa_real_t *v, alpaqa_real_t *Hv)
Definition: dl-problem.h:54
void(* eval_g)(void *instance, const alpaqa_real_t *x, alpaqa_real_t *gx)
Definition: dl-problem.h:32
void(* initialize_box_D)(void *instance, alpaqa_real_t *lb, alpaqa_real_t *ub)
Definition: dl-problem.h:153
void(* eval_jac_g)(void *instance, const alpaqa_real_t *x, alpaqa_index_t *inner_idx, alpaqa_index_t *outer_ptr, alpaqa_real_t *J_values)
Definition: dl-problem.h:41
alpaqa_length_t(* get_hess_L_num_nonzeros)(void *instance)
Definition: dl-problem.h:69
alpaqa_real_t(* eval_ψ_grad_ψ)(void *instance, const alpaqa_real_t *x, const alpaqa_real_t *y, const alpaqa_real_t *Σ, const alpaqa_real_t *zl, const alpaqa_real_t *zu, alpaqa_real_t *grad_ψ, alpaqa_real_t *work_n, alpaqa_real_t *work_m)
Definition: dl-problem.h:132
void(* eval_grad_g_prod)(void *instance, const alpaqa_real_t *x, const alpaqa_real_t *y, alpaqa_real_t *grad_gxy)
Definition: dl-problem.h:36