1 #include "alpaqa_problem.hpp"
2 #include "alpaqa_interface.hpp"
3 #include "casadi/core/exception.hpp"
8 : alpaqa::BoxConstrProblem<alpaqa::DefaultConfig>{solver.
nx_, solver.
ng_},
9 solver_(solver), mem_(mem) {
21 mem_->
arg[0] = x.data();
23 mem_->
res[0] = &obj_value;
25 casadi_assert(solver_.
calc_function(mem_,
"nlp_f")==0,
"Failing evaluating eval_f");
27 casadi_warning(
"KeyboardInterruptException");
29 }
catch (std::exception& ex) {
31 casadi_warning(
"AlpaqaProblem::eval_f failed:" + std::string(ex.
what()));
44 mem_->
arg[0] = x.data();
46 mem_->
res[0] = &obj_value;
47 mem_->
res[1] = grad_fx.data();
49 casadi_assert(solver_.
calc_function(mem_,
"nlp_f_grad_f")==0,
"Failing evaluating eval_f_grad_f");
51 casadi_warning(
"KeyboardInterruptException");
53 }
catch (std::exception& ex) {
55 casadi_warning(
"AlpaqaProblem::eval_f_grad_f failed:" + std::string(ex.
what()));
62 template<
typename T1,
typename T2>
63 void copy(
const T1* x, casadi_int n, T2* y) {
67 for (i=0; i<n; ++i) *y++ = *x++;
69 for (i=0; i<n; ++i) *y++ = 0.;
75 mem_->
arg[0] = x.data();
77 mem_->
res[0] = g.data();
79 casadi_assert(solver_.
calc_function(mem_,
"nlp_g")==0,
"Failing evaluating eval_f_grad_f");
81 casadi_warning(
"KeyboardInterruptException");
83 }
catch (std::exception& ex) {
85 casadi_warning(
"AlpaqaProblem::eval_g failed:" + std::string(ex.
what()));
91 rindexvec outer_ptr, rvec J_values)
const {
92 if (J_values.size()>0) {
93 mem_->
arg[0] = x.data();
95 mem_->
res[0] = J_values.data();
97 casadi_assert(solver_.
calc_function(mem_,
"nlp_jac_g")==0,
"Failing evaluating eval_f_grad_f");
99 casadi_warning(
"KeyboardInterruptException");
101 }
catch (std::exception& ex) {
103 casadi_warning(
"AlpaqaProblem::eval_jac_g failed:" + std::string(ex.
what()));
110 copy(sp.
colind(), get_n()+1, outer_ptr.data());
116 rindexvec inner_idx, rindexvec outer_ptr,
117 rvec H_values)
const {
118 if (H_values.size()>0) {
119 mem_->
arg[0] = x.data();
121 mem_->
arg[2] = y.data();
122 mem_->
arg[3] = &scale;
123 mem_->
res[0] = H_values.data();
125 casadi_assert(solver_.
calc_function(mem_,
"nlp_hess_L")==0,
"Failing evaluating eval_f_grad_f");
127 casadi_warning(
"KeyboardInterruptException");
129 }
catch (std::exception& ex) {
131 casadi_warning(
"AlpaqaProblem::eval_hess_L failed:" + std::string(ex.
what()));
138 copy(sp.
colind(), get_n()+1, outer_ptr.data());
144 crvec v, rvec Hv)
const {
145 mem_->
arg[0] = x.data();
147 mem_->
arg[2] = y.data();
148 mem_->
arg[3] = &scale;
149 mem_->
arg[4] = v.data();
150 mem_->
res[0] = Hv.data();
152 casadi_assert(solver_.
calc_function(mem_,
"nlp_hess_L_prod")==0,
"Failing evaluating eval_f_grad_f");
154 casadi_warning(
"KeyboardInterruptException");
156 }
catch (std::exception& ex) {
158 casadi_warning(
"AlpaqaProblem::eval_hess_L_prod failed:" + std::string(ex.
what()));
164 casadi_error(
"Not implemented");
168 casadi_error(
"Not implemented");
173 mem_->
arg[0] = x.data();
175 mem_->
arg[2] = y.data();
176 mem_->
arg[3] = Σ.data();
177 mem_->
arg[4] = this->
D.lowerbound.data();
178 mem_->
arg[5] = this->
D.upperbound.data();
180 mem_->
res[1] = ŷ.data();
182 casadi_assert(solver_.
calc_function(mem_,
"nlp_psi")==0,
"Failing evaluating eval_f_grad_f");
184 casadi_warning(
"KeyboardInterruptException");
186 }
catch (std::exception& ex) {
188 casadi_warning(
"AlpaqaProblem::eval_psi failed:" + std::string(ex.
what()));
197 mem_->
arg[0] = x.data();
199 mem_->
arg[2] = y.data();
200 mem_->
arg[3] = Σ.data();
201 mem_->
arg[4] = this->
D.lowerbound.data();
202 mem_->
arg[5] = this->
D.upperbound.data();
204 mem_->
res[1] = grad_ψ.data();
206 casadi_assert(solver_.
calc_function(mem_,
"nlp_grad_psi")==0,
"Failing evaluating eval_f_grad_f");
208 casadi_warning(
"KeyboardInterruptException");
210 }
catch (std::exception& ex) {
212 casadi_warning(
"AlpaqaProblem::eval_grad_psi failed:" + std::string(ex.
what()));
219 rvec a, rvec b)
const {
225 mem_->
arg[0] = x.data();
227 mem_->
arg[2] = y.data();
228 mem_->
res[0] = grad_L.data();
230 casadi_assert(solver_.
calc_function(mem_,
"nlp_grad_L")==0,
"Failing evaluating eval_f_grad_f");
232 casadi_warning(
"KeyboardInterruptException");
234 }
catch (std::exception& ex) {
236 casadi_warning(
"AlpaqaProblem::eval_grad_L failed:" + std::string(ex.
what()));
242 rindexvec inner_idx, rindexvec outer_ptr,
243 rvec H_values)
const {
244 if (H_values.size()>0) {
245 mem_->
arg[0] = x.data();
247 mem_->
arg[2] = y.data();
248 mem_->
arg[3] = Σ.data();
249 mem_->
arg[4] = &scale;
250 mem_->
arg[5] = this->
D.lowerbound.data();
251 mem_->
arg[6] = this->
D.upperbound.data();
252 mem_->
res[0] = H_values.data();
254 casadi_assert(solver_.
calc_function(mem_,
"nlp_hess_psi")==0,
"Failing evaluating eval_f_grad_f");
256 casadi_warning(
"KeyboardInterruptException");
258 }
catch (std::exception& ex) {
260 casadi_warning(
"AlpaqaProblem::eval_hess_psi failed:" + std::string(ex.
what()));
267 copy(sp.
colind(), get_n()+1, outer_ptr.data());
273 real_t scale, crvec v,
275 mem_->
arg[0] = x.data();
277 mem_->
arg[2] = y.data();
278 mem_->
arg[3] = Σ.data();
279 mem_->
arg[4] = &scale;
280 mem_->
arg[5] = this->
D.lowerbound.data();
281 mem_->
arg[6] = this->
D.upperbound.data();
282 mem_->
arg[7] = v.data();
283 mem_->
res[0] = Hv.data();
285 casadi_assert(solver_.
calc_function(mem_,
"nlp_hess_psi_prod")==0,
"Failing evaluating eval_f_grad_f");
287 casadi_warning(
"KeyboardInterruptException");
289 }
catch (std::exception& ex) {
291 casadi_warning(
"AlpaqaProblem::eval_hess_psi_prod failed:" + std::string(ex.
what()));
length_t get_hess_L_num_nonzeros() const
length_t get_hess_ψ_num_nonzeros() const
void eval_hess_L_prod(crvec x, crvec y, real_t scale, crvec v, rvec Hv) const
real_t eval_ψ(crvec x, crvec y, crvec Σ, rvec ŷ) const
void eval_hess_ψ_prod(crvec x, crvec y, crvec Σ, real_t scale, crvec v, rvec Hv) const
void eval_g(crvec x, rvec g) const
void eval_grad_ψ(crvec x, crvec y, crvec Σ, rvec grad_ψ, rvec work_n, rvec work_m) const
void eval_jac_g(crvec x, rindexvec inner_idx, rindexvec outer_ptr, rvec J_values) const
length_t get_jac_g_num_nonzeros() const
void eval_grad_g_prod(crvec x, crvec y, rvec grad_gxy) const
void eval_grad_gi(crvec x, index_t i, rvec grad_i) const
void eval_grad_L(crvec x, crvec y, rvec grad_L, rvec work_n) const
real_t eval_f_grad_f(crvec x, rvec grad_fx) const
void eval_hess_L(crvec x, crvec y, real_t scale, rindexvec inner_idx, rindexvec outer_ptr, rvec H_values) const
real_t eval_f(crvec x) const
AlpaqaProblem(const AlpaqaInterface &solver, AlpaqaMemory *mem)
void eval_grad_f(crvec x, rvec grad_fx) const
void eval_hess_ψ(crvec x, crvec y, crvec Σ, real_t scale, rindexvec inner_idx, rindexvec outer_ptr, rvec H_values) const
real_t eval_ψ_grad_ψ(crvec x, crvec y, crvec Σ, rvec grad_ψ, rvec work_n, rvec work_m) const
const char * what() const override
Display error.
casadi_int ng_
Number of constraints.
casadi_int nx_
Number of variables.
int calc_function(OracleMemory *m, const std::string &fcn, const double *const *arg=nullptr, int thread_id=0) const
std::vector< std::string > get_function() const override
Get list of dependency functions.
bool show_eval_warnings_
Show evaluation warnings.
casadi_int nnz() const
Get the number of (structural) non-zeros.
const casadi_int * row() const
Get a reference to row-vector,.
const casadi_int * colind() const
Get a reference to the colindex of all column element (see class description)
bool is_dense() const
Is dense?
void copy(const T1 *x, casadi_int n, T2 *y)
casadi_nlpsol_data< double > d_nlp