1 #include "alpaqa_problem.hpp"
2 #include "alpaqa_interface.hpp"
3 #include "casadi/core/exception.hpp"
8 : alpaqa::BoxConstrProblem<alpaqa::DefaultConfig>{
9 static_cast<alpaqa::DefaultConfig::length_t
>(solver.
nx_),
10 static_cast<alpaqa::DefaultConfig::length_t
>(solver.
ng_)},
11 solver_(solver), mem_(mem) {
23 mem_->
arg[0] = x.data();
25 mem_->
res[0] = &obj_value;
27 casadi_assert(solver_.
calc_function(mem_,
"nlp_f")==0,
"Failing evaluating eval_f");
29 casadi_warning(
"KeyboardInterruptException");
31 }
catch (std::exception& ex) {
33 casadi_warning(
"AlpaqaProblem::eval_f failed:" + std::string(ex.
what()));
46 mem_->
arg[0] = x.data();
48 mem_->
res[0] = &obj_value;
49 mem_->
res[1] = grad_fx.data();
51 casadi_assert(solver_.
calc_function(mem_,
"nlp_f_grad_f")==0,
"Failing evaluating eval_f_grad_f");
53 casadi_warning(
"KeyboardInterruptException");
55 }
catch (std::exception& ex) {
57 casadi_warning(
"AlpaqaProblem::eval_f_grad_f failed:" + std::string(ex.
what()));
64 template<
typename T1,
typename T2>
65 void copy(
const T1* x, casadi_int n, T2* y) {
69 for (i=0; i<n; ++i) *y++ = *x++;
71 for (i=0; i<n; ++i) *y++ = 0.;
77 mem_->
arg[0] = x.data();
79 mem_->
res[0] = g.data();
81 casadi_assert(solver_.
calc_function(mem_,
"nlp_g")==0,
"Failing evaluating eval_f_grad_f");
83 casadi_warning(
"KeyboardInterruptException");
85 }
catch (std::exception& ex) {
87 casadi_warning(
"AlpaqaProblem::eval_g failed:" + std::string(ex.
what()));
93 rindexvec outer_ptr, rvec J_values)
const {
94 if (J_values.size()>0) {
95 mem_->
arg[0] = x.data();
97 mem_->
res[0] = J_values.data();
99 casadi_assert(solver_.
calc_function(mem_,
"nlp_jac_g")==0,
"Failing evaluating eval_f_grad_f");
101 casadi_warning(
"KeyboardInterruptException");
103 }
catch (std::exception& ex) {
105 casadi_warning(
"AlpaqaProblem::eval_jac_g failed:" + std::string(ex.
what()));
112 copy(sp.
colind(), get_n()+1, outer_ptr.data());
118 rindexvec inner_idx, rindexvec outer_ptr,
119 rvec H_values)
const {
120 if (H_values.size()>0) {
121 mem_->
arg[0] = x.data();
123 mem_->
arg[2] = y.data();
124 mem_->
arg[3] = &scale;
125 mem_->
res[0] = H_values.data();
127 casadi_assert(solver_.
calc_function(mem_,
"nlp_hess_L")==0,
"Failing evaluating eval_f_grad_f");
129 casadi_warning(
"KeyboardInterruptException");
131 }
catch (std::exception& ex) {
133 casadi_warning(
"AlpaqaProblem::eval_hess_L failed:" + std::string(ex.
what()));
140 copy(sp.
colind(), get_n()+1, outer_ptr.data());
146 crvec v, rvec Hv)
const {
147 mem_->
arg[0] = x.data();
149 mem_->
arg[2] = y.data();
150 mem_->
arg[3] = &scale;
151 mem_->
arg[4] = v.data();
152 mem_->
res[0] = Hv.data();
154 casadi_assert(solver_.
calc_function(mem_,
"nlp_hess_L_prod")==0,
"Failing evaluating eval_f_grad_f");
156 casadi_warning(
"KeyboardInterruptException");
158 }
catch (std::exception& ex) {
160 casadi_warning(
"AlpaqaProblem::eval_hess_L_prod failed:" + std::string(ex.
what()));
166 casadi_error(
"Not implemented");
170 casadi_error(
"Not implemented");
175 mem_->
arg[0] = x.data();
177 mem_->
arg[2] = y.data();
178 mem_->
arg[3] = Σ.data();
179 mem_->
arg[4] = this->
D.lowerbound.data();
180 mem_->
arg[5] = this->
D.upperbound.data();
182 mem_->
res[1] = ŷ.data();
184 casadi_assert(solver_.
calc_function(mem_,
"nlp_psi")==0,
"Failing evaluating eval_f_grad_f");
186 casadi_warning(
"KeyboardInterruptException");
188 }
catch (std::exception& ex) {
190 casadi_warning(
"AlpaqaProblem::eval_psi failed:" + std::string(ex.
what()));
199 mem_->
arg[0] = x.data();
201 mem_->
arg[2] = y.data();
202 mem_->
arg[3] = Σ.data();
203 mem_->
arg[4] = this->
D.lowerbound.data();
204 mem_->
arg[5] = this->
D.upperbound.data();
206 mem_->
res[1] = grad_ψ.data();
208 casadi_assert(solver_.
calc_function(mem_,
"nlp_grad_psi")==0,
"Failing evaluating eval_f_grad_f");
210 casadi_warning(
"KeyboardInterruptException");
212 }
catch (std::exception& ex) {
214 casadi_warning(
"AlpaqaProblem::eval_grad_psi failed:" + std::string(ex.
what()));
221 rvec a, rvec b)
const {
227 mem_->
arg[0] = x.data();
229 mem_->
arg[2] = y.data();
230 mem_->
res[0] = grad_L.data();
232 casadi_assert(solver_.
calc_function(mem_,
"nlp_grad_L")==0,
"Failing evaluating eval_f_grad_f");
234 casadi_warning(
"KeyboardInterruptException");
236 }
catch (std::exception& ex) {
238 casadi_warning(
"AlpaqaProblem::eval_grad_L failed:" + std::string(ex.
what()));
244 rindexvec inner_idx, rindexvec outer_ptr,
245 rvec H_values)
const {
246 if (H_values.size()>0) {
247 mem_->
arg[0] = x.data();
249 mem_->
arg[2] = y.data();
250 mem_->
arg[3] = Σ.data();
251 mem_->
arg[4] = &scale;
252 mem_->
arg[5] = this->
D.lowerbound.data();
253 mem_->
arg[6] = this->
D.upperbound.data();
254 mem_->
res[0] = H_values.data();
256 casadi_assert(solver_.
calc_function(mem_,
"nlp_hess_psi")==0,
"Failing evaluating eval_f_grad_f");
258 casadi_warning(
"KeyboardInterruptException");
260 }
catch (std::exception& ex) {
262 casadi_warning(
"AlpaqaProblem::eval_hess_psi failed:" + std::string(ex.
what()));
269 copy(sp.
colind(), get_n()+1, outer_ptr.data());
275 real_t scale, crvec v,
277 mem_->
arg[0] = x.data();
279 mem_->
arg[2] = y.data();
280 mem_->
arg[3] = Σ.data();
281 mem_->
arg[4] = &scale;
282 mem_->
arg[5] = this->
D.lowerbound.data();
283 mem_->
arg[6] = this->
D.upperbound.data();
284 mem_->
arg[7] = v.data();
285 mem_->
res[0] = Hv.data();
287 casadi_assert(solver_.
calc_function(mem_,
"nlp_hess_psi_prod")==0,
"Failing evaluating eval_f_grad_f");
289 casadi_warning(
"KeyboardInterruptException");
291 }
catch (std::exception& ex) {
293 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