26 #include <ocp/OCPAbstract.hpp>
27 #include <ocp/StageOCPApplication.hpp>
28 #include <casadi/core/casadi_misc.hpp>
142 class CasadiStructuredQP :
public fatrop::OCPAbstract {
145 fatrop_int get_nxk(
const fatrop_int k)
const override {
146 std::vector<fatrop_int> res = {2,3,2,1};
151 fatrop_int get_nuk(
const fatrop_int k)
const override {
152 std::vector<fatrop_int> res = {1, 2,1};
157 fatrop_int get_ngk(
const fatrop_int k)
const override {
158 std::vector<fatrop_int> res = {2, 0,0,0};
164 fatrop_int get_n_stage_params_k(
const fatrop_int k)
const override {
return 0;}
170 fatrop_int get_default_stage_paramsk(
double *stage_params,
const fatrop_int k)
const override {
return 0;}
176 virtual fatrop_int get_ng_ineq_k(
const fatrop_int k)
const {
177 std::vector<fatrop_int> res_lbg = {2, 1, 0, 0};
178 std::vector<fatrop_int> res_lbx = {1, 5, 3, 1};
179 return res_lbg[k]+res_lbx[k];
193 fatrop_int eval_BAbtk(
194 const double *states_kp1,
195 const double *inputs_k,
196 const double *states_k,
197 const double *stage_params_k,
198 const double *global_params,
200 const fatrop_int k)
override {
201 printf(
"eval_BAbtk k=%d\n", k);
203 std::vector<double> r = {1, 0.2, 1, 0,
208 PACKMAT(out_m, out_n,
get_ptr(r), out_m, res, 0, 0);
209 blasfeo_print_dmat(out_m, out_n, res, 0, 0);
211 std::vector<double> r2 = {1, -0.1, 0.3, 0.2, 0.4, 0.2, 1, 0, 0, 0, 0, 0};
213 blasfeo_pack_tran_dmat(out_n, out_m,
get_ptr(r2), out_n, res, 0, 0);
215 blasfeo_print_dmat(out_m, out_n, res, 0, 0);
220 std::vector<double> r = {1, 4, 2, 1, 0.3, 0,
221 3, 1, 00, 1, 0.2, 0};
224 PACKMAT(out_m, out_n,
get_ptr(r), out_m, res, 0, 0);
225 blasfeo_print_dmat(out_m, out_n, res, 0, 0);
228 std::vector<double> r2 = {1,3,4,1,2,0,1,1,0.3,0.2,0,0,0,0,0};
235 std::vector<double> r = {2, 4, 0, 0};
238 PACKMAT(out_m, out_n,
get_ptr(r), out_m, res, 0, 0);
239 blasfeo_print_dmat(out_m, out_n, res, 0, 0);
258 fatrop_int eval_RSQrqtk(
259 const double *objective_scale,
260 const double *inputs_k,
261 const double *states_k,
262 const double *lam_dyn_k,
263 const double *lam_eq_k,
264 const double *lam_eq_ineq_k,
265 const double *stage_params_k,
266 const double *global_params,
268 const fatrop_int k)
override {
281 fatrop_int eval_Ggtk(
282 const double *inputs_k,
283 const double *states_k,
284 const double *stage_params_k,
285 const double *global_params,
287 const fatrop_int k)
override {
288 printf(
"eval_Ggtk k=%d\n", k);
290 std::vector<double> r = {2, 0, 0.3, 0,
294 PACKMAT(out_m, out_n,
get_ptr(r), out_m, res, 0, 0);
295 blasfeo_print_dmat(out_m, out_n, res, 0, 0);
308 fatrop_int eval_Ggt_ineqk(
309 const double *inputs_k,
310 const double *states_k,
311 const double *stage_params_k,
312 const double *global_params,
314 const fatrop_int k) {
315 printf(
"eval_Ggt_ineqk k=%d\n", k);
327 const double *states_kp1,
328 const double *inputs_k,
329 const double *states_k,
330 const double *stage_params_k,
331 const double *global_params,
333 const fatrop_int k)
override {
334 printf(
"eval_bk k=%d\n", k);
344 const double *states_k,
345 const double *inputs_k,
346 const double *stage_params_k,
347 const double *global_params,
349 const fatrop_int k)
override {
350 printf(
"eval_gk k=%d\n", k);
359 fatrop_int eval_gineqk(
360 const double *states_k,
361 const double *inputs_k,
362 const double *stage_params_k,
363 const double *global_params,
365 const fatrop_int k)
override {
366 printf(
"eval_gineqk k=%d\n", k);
377 const double *objective_scale,
378 const double *inputs_k,
379 const double *states_k,
380 const double *stage_params_k,
381 const double *global_params,
383 const fatrop_int k)
override {
384 printf(
"eval_rqk k=%d\n", k);
395 const double *objective_scale,
396 const double *inputs_k,
397 const double *states_k,
398 const double *stage_params_k,
399 const double *global_params,
401 const fatrop_int k)
override {
402 printf(
"eval_Lk k=%d\n", k);
408 fatrop_int get_boundsk(
double *lower,
double *upper,
const fatrop_int k)
const override {
409 printf(
"get_boundsk k=%d\n", k);
414 fatrop_int
get_initial_xk(
double *xk,
const fatrop_int k)
const override {
415 printf(
"get_initial_xk k=%d\n", k);
420 fatrop_int
get_initial_uk(
double *uk,
const fatrop_int k)
const override {
421 printf(
"get_initial_uk k=%d\n", k);
434 size_t s = blasfeo_memsize_dmat(m, n);
435 std::vector<double> mem(s, 0);
438 blasfeo_create_dmat(m, n, &res, &mem.front());
440 blasfeo_print_dmat(m, n, &res, 0, 0);
443 std::vector<double> a(100);
444 for (
int i=0;i<100;++i) a[i] = i+1;
450 blasfeo_pack_tran_dmat(1, 3, &a.front(), 2, &res, 1, 3);
452 blasfeo_print_dmat(m, n, &res, 0, 0);
463 casadi::CasadiStructuredQP qp;
465 fatrop::OCPApplication app(std::make_shared<casadi::CasadiStructuredQP>(qp));
fatrop_int get_initial_uk(double *uk, const fatrop_int k, void *user_data)
fatrop_int get_horizon_length(void *user_data)
fatrop_int get_n_global_params(void *user_data)
T * get_ptr(std::vector< T > &v)
Get a pointer to the data contained in the vector.
fatrop_int get_default_global_params(double *global_params, void *user_data)
fatrop_int get_initial_xk(double *xk, const fatrop_int k, void *user_data)