Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
8900896
add option to set reg_epsilon, more clear default regularization in P…
FreyJo Sep 28, 2023
6b8355b
integrator doesnt report max iter
FreyJo Sep 28, 2023
3dad44b
const field
FreyJo Oct 2, 2023
aa8cb93
remove outdated property ext_qp_res in python
FreyJo Oct 2, 2023
dbfcbbf
Python: docstrings in model
FreyJo Oct 10, 2023
8c74cbb
allow more casadi versions
FreyJo Oct 10, 2023
41324e3
more docstrings
FreyJo Oct 10, 2023
ca79f50
add main in example
FreyJo Oct 10, 2023
f9c3f38
add sensitivity experiment
FreyJo Oct 10, 2023
bb9f583
some more experimenting
sandmaennchen Oct 10, 2023
47b324e
some more experimenting
sandmaennchen Oct 10, 2023
27484e3
debugging stuff
FreyJo Oct 10, 2023
7110d20
TEMP: set nbxe_0=0 for testing
FreyJo Oct 10, 2023
2cc747f
linearized discrete model
sandmaennchen Oct 10, 2023
a18b608
allow 0 step length
FreyJo Oct 11, 2023
435aa15
add print_stats_on_failure to solve_for_x0
FreyJo Oct 11, 2023
eac2387
compare solution sensitivities with finite differences
FreyJo Oct 11, 2023
cec9746
comparing 'exact' hessians
FreyJo Oct 11, 2023
4e8541c
get qp status via statistics and again eliminate x0_bar
sandmaennchen Oct 11, 2023
d866a93
merged!
sandmaennchen Oct 11, 2023
7df26e2
minor
FreyJo Oct 11, 2023
2073607
compare hessians
sandmaennchen Oct 11, 2023
a27ac51
ahhhh
sandmaennchen Oct 11, 2023
9d435ff
get P from acados: very WIP
FreyJo Oct 12, 2023
7e905cb
compute K manually
sandmaennchen Oct 12, 2023
627f11e
habemus P, K of HPIPM
FreyJo Oct 12, 2023
85ac503
P in get_from_qp_in for now
FreyJo Oct 12, 2023
757577f
add documentation and checks to eval_param_sens
sandmaennchen Oct 16, 2023
e19878b
fix K, S dimensions
FreyJo Oct 13, 2023
0ce97b4
check reduced Hessian
FreyJo Oct 13, 2023
090a821
verbose store and load iterate
FreyJo Oct 16, 2023
1fe703a
get_hessian_block
FreyJo Oct 16, 2023
16f16a8
improve sensitivity example
FreyJo Oct 16, 2023
03e1662
move example
FreyJo Oct 16, 2023
aa41116
refactor sensitivity example
FreyJo Oct 16, 2023
83a42d6
rename example and test exact Hessians wrt casai
FreyJo Oct 16, 2023
9b35c6e
fix EXACT check
FreyJo Oct 16, 2023
01932c7
add policy gradient example: state augmented with parameter M
FreyJo Oct 16, 2023
e9ea1af
finalize example, test
FreyJo Oct 16, 2023
f4c9849
fix test
FreyJo Oct 16, 2023
9ee8923
add reg_epsilon in MEX
FreyJo Oct 16, 2023
882e1a1
improve docstrings
FreyJo Oct 16, 2023
3682492
polish example
FreyJo Oct 16, 2023
7bbf83f
undo changes to solution sens example
FreyJo Oct 16, 2023
3cd047d
add warning
FreyJo Oct 16, 2023
f10ed47
update example
FreyJo Oct 16, 2023
4a8c43c
implement not implemented functions in QP solvers
FreyJo Oct 17, 2023
6c37ff5
add check on getting K, P
FreyJo Oct 17, 2023
210c688
fix projected Hessian reconstruction in example and plot sign of min eig
FreyJo Oct 17, 2023
4d0d370
compute correct projected Hessian
FreyJo Oct 17, 2023
a36761f
add Note
FreyJo Oct 17, 2023
15b7436
add dimension check to solver_get
FreyJo Oct 18, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion acados/dense_qp/dense_qp_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,9 @@ typedef struct
void *(*memory_assign)(void *config, void *dims, void *args, void *raw_memory);
void (*memory_get)(void *config_, void *mem_, const char *field, void* value);
acados_size_t (*workspace_calculate_size)(void *config, void *dims, void *args);
int (*evaluate)(void *config, void *qp_in, void *qp_out, void *args, void *mem, void *work);
int (*evaluate)(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work);
void (*solver_get)(void *config_, void *qp_in_, void *qp_out_, void *opts_, void *mem_, const char *field, int stage, void* value, int size1, int size2);
void (*memory_reset)(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work);
void (*eval_sens)(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work);
} qp_solver_config;
#endif
Expand Down
15 changes: 14 additions & 1 deletion acados/dense_qp/dense_qp_daqp.c
Original file line number Diff line number Diff line change
Expand Up @@ -746,6 +746,18 @@ void dense_qp_daqp_eval_sens(void *config_, void *qp_in, void *qp_out, void *opt
exit(1);
}

void dense_qp_daqp_memory_reset(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work)
{
printf("\nerror: dense_qp_daqp_memory_reset: not implemented yet\n");
exit(1);
}

void dense_qp_daqp_solver_get(void *config_, void *qp_in_, void *qp_out_, void *opts_, void *mem_, const char *field, int stage, void* value, int size1, int size2)
{
printf("\nerror: dense_qp_daqp_solver_get: not implemented yet\n");
exit(1);
}


void dense_qp_daqp_config_initialize_default(void *config_)
{
Expand All @@ -765,8 +777,9 @@ void dense_qp_daqp_config_initialize_default(void *config_)
config->workspace_calculate_size =
(acados_size_t (*)(void *, void *, void *)) & dense_qp_daqp_workspace_calculate_size;
config->eval_sens = &dense_qp_daqp_eval_sens;
// config->memory_reset = &dense_qp_daqp_memory_reset;
config->evaluate = (int (*)(void *, void *, void *, void *, void *, void *)) & dense_qp_daqp;
config->memory_reset = &dense_qp_daqp_memory_reset;
config->solver_get = &dense_qp_daqp_solver_get;

return;
}
7 changes: 6 additions & 1 deletion acados/dense_qp/dense_qp_daqp.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ void dense_qp_daqp_opts_initialize_default(void *config, dense_qp_dims *dims, vo
//
void dense_qp_daqp_opts_update(void *config, dense_qp_dims *dims, void *opts_);
//
// memory
// memory
acados_size_t dense_qp_daqp_workspace_calculate_size(void *config, dense_qp_dims *dims, void *opts_);
//
void *dense_qp_daqp_workspace_assign(void *config, dense_qp_dims *dims, void *raw_memory);
Expand All @@ -102,6 +102,11 @@ void dense_qp_daqp_eval_sens(void *config_, void *qp_in, void *qp_out, void *opt
void dense_qp_daqp_memory_reset(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
//
void dense_qp_daqp_config_initialize_default(void *config_);
//
void dense_qp_daqp_memory_reset(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work);
//
void dense_qp_daqp_solver_get(void *config_, void *qp_in_, void *qp_out_, void *opts_, void *mem_, const char *field, int stage, void* value, int size1, int size2);


#ifdef __cplusplus
} /* extern "C" */
Expand Down
14 changes: 14 additions & 0 deletions acados/dense_qp/dense_qp_hpipm.c
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,18 @@ void dense_qp_hpipm_eval_sens(void *config_, void *param_qp_in_, void *sens_qp_o
}


void dense_qp_hpipm_memory_reset(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work)
{
printf("\nerror: dense_qp_hpipm_memory_reset: not implemented yet\n");
exit(1);
}

void dense_qp_hpipm_solver_get(void *config_, void *qp_in_, void *qp_out_, void *opts_, void *mem_, const char *field, int stage, void* value, int size1, int size2)
{
printf("\nerror: dense_qp_hpipm_solver_get: not implemented yet\n");
exit(1);
}


void dense_qp_hpipm_config_initialize_default(void *config_)
{
Expand All @@ -339,6 +351,8 @@ void dense_qp_hpipm_config_initialize_default(void *config_)
config->workspace_calculate_size = &dense_qp_hpipm_workspace_calculate_size;
config->evaluate = &dense_qp_hpipm;
config->eval_sens = &dense_qp_hpipm_eval_sens;
config->memory_reset = &dense_qp_hpipm_memory_reset;
config->solver_get = &dense_qp_hpipm_solver_get;

return;
}
5 changes: 5 additions & 0 deletions acados/dense_qp/dense_qp_hpipm.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,11 @@ int dense_qp_hpipm(void *config, void *qp_in, void *qp_out, void *opts_, void *m
void dense_qp_hpipm_eval_sens(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
//
void dense_qp_hpipm_config_initialize_default(void *config_);
//
void dense_qp_hpipm_memory_reset(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work);
//
void dense_qp_hpipm_solver_get(void *config_, void *qp_in_, void *qp_out_, void *opts_, void *mem_, const char *field, int stage, void* value, int size1, int size2);


#ifdef __cplusplus
} /* extern "C" */
Expand Down
12 changes: 12 additions & 0 deletions acados/dense_qp/dense_qp_ooqp.c
Original file line number Diff line number Diff line change
Expand Up @@ -621,7 +621,17 @@ void dense_qp_ooqp_eval_sens(void *config_, void *qp_in, void *qp_out, void *opt
exit(1);
}

void dense_qp_ooqp_memory_reset(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work)
{
printf("\nerror: dense_qp_ooqp_memory_reset: not implemented yet\n");
exit(1);
}

void dense_qp_ooqp_solver_get(void *config_, void *qp_in_, void *qp_out_, void *opts_, void *mem_, const char *field, int stage, void* value, int size1, int size2)
{
printf("\nerror: dense_qp_ooqp_solver_get: not implemented yet\n");
exit(1);
}

void dense_qp_ooqp_config_initialize_default(void *config_)
{
Expand All @@ -642,4 +652,6 @@ void dense_qp_ooqp_config_initialize_default(void *config_)
(acados_size_t (*)(void *, void *, void *)) & dense_qp_ooqp_workspace_calculate_size;
config->evaluate = (int (*)(void *, void *, void *, void *, void *, void *)) & dense_qp_ooqp;
config->eval_sens = &dense_qp_ooqp_eval_sens;
config->memory_reset = &dense_qp_ooqp_memory_reset;
config->solver_get = &dense_qp_ooqp_solver_get;
}
4 changes: 4 additions & 0 deletions acados/dense_qp/dense_qp_ooqp.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,10 @@ void dense_qp_ooqp_destroy(void *mem_, void *work);
//
void dense_qp_ooqp_eval_sens(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
//
void dense_qp_ooqp_memory_reset(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work);
//
void dense_qp_ooqp_solver_get(void *config_, void *qp_in_, void *qp_out_, void *opts_, void *mem_, const char *field, int stage, void* value, int size1, int size2);
//
void dense_qp_ooqp_config_initialize_default(void *config_);

#ifdef __cplusplus
Expand Down
12 changes: 12 additions & 0 deletions acados/dense_qp/dense_qp_qore.c
Original file line number Diff line number Diff line change
Expand Up @@ -556,7 +556,17 @@ void dense_qp_qore_eval_sens(void *config_, void *qp_in, void *qp_out, void *opt
exit(1);
}

void dense_qp_qore_memory_reset(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work)
{
printf("\nerror: dense_qp_qore_memory_reset: not implemented yet\n");
exit(1);
}

void dense_qp_qore_solver_get(void *config_, void *qp_in_, void *qp_out_, void *opts_, void *mem_, const char *field, int stage, void* value, int size1, int size2)
{
printf("\nerror: dense_qp_qore_solver_get: not implemented yet\n");
exit(1);
}

void dense_qp_qore_config_initialize_default(void *config_)
{
Expand All @@ -577,6 +587,8 @@ void dense_qp_qore_config_initialize_default(void *config_)
(acados_size_t (*)(void *, void *, void *)) & dense_qp_qore_workspace_calculate_size;
config->evaluate = (int (*)(void *, void *, void *, void *, void *, void *)) & dense_qp_qore;
config->eval_sens = &dense_qp_qore_eval_sens;
config->memory_reset = &dense_qp_qore_memory_reset;
config->solver_get = &dense_qp_qore_solver_get;

return;
}
4 changes: 4 additions & 0 deletions acados/dense_qp/dense_qp_qore.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,10 @@ int dense_qp_qore(void *config, dense_qp_in *qp_in, dense_qp_out *qp_out, void *
//
void dense_qp_qore_eval_sens(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
//
void dense_qp_qore_memory_reset(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work);
//
void dense_qp_qore_solver_get(void *config_, void *qp_in_, void *qp_out_, void *opts_, void *mem_, const char *field, int stage, void* value, int size1, int size2);
//
void dense_qp_qore_config_initialize_default(void *config);

#ifdef __cplusplus
Expand Down
16 changes: 16 additions & 0 deletions acados/dense_qp/dense_qp_qpoases.c
Original file line number Diff line number Diff line change
Expand Up @@ -772,6 +772,20 @@ void dense_qp_qpoases_eval_sens(void *config_, void *qp_in, void *qp_out, void *
// }



void dense_qp_qpoases_memory_reset(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work)
{
printf("\nerror: dense_qp_qpoases_memory_reset: not implemented yet\n");
exit(1);
}

void dense_qp_qpoases_solver_get(void *config_, void *qp_in_, void *qp_out_, void *opts_, void *mem_, const char *field, int stage, void* value, int size1, int size2)
{
printf("\nerror: dense_qp_qpoases_solver_get: not implemented yet\n");
exit(1);
}


void dense_qp_qpoases_config_initialize_default(void *config_)
{
qp_solver_config *config = config_;
Expand All @@ -792,6 +806,8 @@ void dense_qp_qpoases_config_initialize_default(void *config_)
config->eval_sens = &dense_qp_qpoases_eval_sens;
// config->memory_reset = &dense_qp_qpoases_memory_reset;
config->evaluate = (int (*)(void *, void *, void *, void *, void *, void *)) & dense_qp_qpoases;
config->memory_reset = &dense_qp_qpoases_memory_reset;
config->solver_get = &dense_qp_qpoases_solver_get;

return;
}
5 changes: 5 additions & 0 deletions acados/dense_qp/dense_qp_qpoases.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,11 @@ void dense_qp_qpoases_eval_sens(void *config_, void *qp_in, void *qp_out, void *
void dense_qp_qpoases_memory_reset(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
//
void dense_qp_qpoases_config_initialize_default(void *config_);
//
void dense_qp_qpoases_memory_reset(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work);
//
void dense_qp_qpoases_solver_get(void *config_, void *qp_in_, void *qp_out_, void *opts_, void *mem_, const char *field, int stage, void* value, int size1, int size2);


#ifdef __cplusplus
} /* extern "C" */
Expand Down
5 changes: 5 additions & 0 deletions acados/ocp_nlp/ocp_nlp_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -1159,6 +1159,11 @@ void ocp_nlp_opts_set(void *config_, void *opts_, const char *field, void* value
config->qp_solver->opts_set(config->qp_solver, opts->qp_solver_opts,
field+module_length+1, value);
}
else if ( ptr_module!=NULL && (!strcmp(ptr_module, "reg")) )
{
config->regularize->opts_set(config->regularize, opts->regularize,
field+module_length+1, value);
}
else // nlp opts
{
if (!strcmp(field, "reuse_workspace"))
Expand Down
2 changes: 1 addition & 1 deletion acados/ocp_nlp/ocp_nlp_reg_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ typedef struct
acados_size_t (*opts_calculate_size)(void);
void *(*opts_assign)(void *raw_memory);
void (*opts_initialize_default)(void *config, ocp_nlp_reg_dims *dims, void *opts);
void (*opts_set)(void *config, ocp_nlp_reg_dims *dims, void *opts, char *field, void* value);
void (*opts_set)(void *config, void *opts, const char *field, void* value);
/* memory */
acados_size_t (*memory_calculate_size)(void *config, ocp_nlp_reg_dims *dims, void *opts);
void *(*memory_assign)(void *config, ocp_nlp_reg_dims *dims, void *opts, void *raw_memory);
Expand Down
2 changes: 1 addition & 1 deletion acados/ocp_nlp/ocp_nlp_reg_convexify.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ void ocp_nlp_reg_convexify_opts_initialize_default(void *config_, ocp_nlp_reg_di



void ocp_nlp_reg_convexify_opts_set(void *config_, ocp_nlp_reg_dims *dims, void *opts_, char *field, void* value)
void ocp_nlp_reg_convexify_opts_set(void *config_, void *opts_, const char *field, void* value)
{

ocp_nlp_reg_convexify_opts *opts = opts_;
Expand Down
2 changes: 1 addition & 1 deletion acados/ocp_nlp/ocp_nlp_reg_convexify.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ void *ocp_nlp_reg_convexify_opts_assign(void *raw_memory);
//
void ocp_nlp_reg_convexify_opts_initialize_default(void *config_, ocp_nlp_reg_dims *dims, void *opts_);
//
void ocp_nlp_reg_convexify_opts_set(void *config_, ocp_nlp_reg_dims *dims, void *opts_, char *field, void* value);
void ocp_nlp_reg_convexify_opts_set(void *config_, void *opts_, const char *field, void* value);



Expand Down
2 changes: 1 addition & 1 deletion acados/ocp_nlp/ocp_nlp_reg_mirror.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ void ocp_nlp_reg_mirror_opts_initialize_default(void *config_, ocp_nlp_reg_dims



void ocp_nlp_reg_mirror_opts_set(void *config_, ocp_nlp_reg_dims *dims, void *opts_, char *field, void* value)
void ocp_nlp_reg_mirror_opts_set(void *config_, void *opts_, const char *field, void* value)
{

ocp_nlp_reg_mirror_opts *opts = opts_;
Expand Down
2 changes: 1 addition & 1 deletion acados/ocp_nlp/ocp_nlp_reg_mirror.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ void *ocp_nlp_reg_mirror_opts_assign(void *raw_memory);
//
void ocp_nlp_reg_mirror_opts_initialize_default(void *config_, ocp_nlp_reg_dims *dims, void *opts_);
//
void ocp_nlp_reg_mirror_opts_set(void *config_, ocp_nlp_reg_dims *dims, void *opts_, char *field, void* value);
void ocp_nlp_reg_mirror_opts_set(void *config_, void *opts_, const char *field, void* value);



Expand Down
2 changes: 1 addition & 1 deletion acados/ocp_nlp/ocp_nlp_reg_noreg.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ void ocp_nlp_reg_noreg_opts_initialize_default(void *config_, ocp_nlp_reg_dims *



void ocp_nlp_reg_noreg_opts_set(void *config_, ocp_nlp_reg_dims *dims, void *opts_, char *field, void* value)
void ocp_nlp_reg_noreg_opts_set(void *config_, void *opts_, const char *field, void* value)
{

printf("\nerror: field %s not available in ocp_nlp_reg_noreg_opts_set\n", field);
Expand Down
2 changes: 1 addition & 1 deletion acados/ocp_nlp/ocp_nlp_reg_noreg.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ void *ocp_nlp_reg_noreg_opts_assign(void *raw_memory);
//
void ocp_nlp_reg_noreg_opts_initialize_default(void *config_, ocp_nlp_reg_dims *dims, void *opts_);
//
void ocp_nlp_reg_noreg_opts_set(void *config_, ocp_nlp_reg_dims *dims, void *opts_, char *field, void* value);
void ocp_nlp_reg_noreg_opts_set(void *config_, void *opts_, const char *field, void* value);



Expand Down
2 changes: 1 addition & 1 deletion acados/ocp_nlp/ocp_nlp_reg_project.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ void ocp_nlp_reg_project_opts_initialize_default(void *config_, ocp_nlp_reg_dims



void ocp_nlp_reg_project_opts_set(void *config_, ocp_nlp_reg_dims *dims, void *opts_, char *field, void* value)
void ocp_nlp_reg_project_opts_set(void *config_, void *opts_, const char *field, void* value)
{

ocp_nlp_reg_project_opts *opts = opts_;
Expand Down
2 changes: 1 addition & 1 deletion acados/ocp_nlp/ocp_nlp_reg_project.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ void *ocp_nlp_reg_project_opts_assign(void *raw_memory);
//
void ocp_nlp_reg_project_opts_initialize_default(void *config_, ocp_nlp_reg_dims *dims, void *opts_);
//
void ocp_nlp_reg_project_opts_set(void *config_, ocp_nlp_reg_dims *dims, void *opts_, char *field, void* value);
void ocp_nlp_reg_project_opts_set(void *config_, void *opts_, const char *field, void* value);



Expand Down
2 changes: 1 addition & 1 deletion acados/ocp_nlp/ocp_nlp_reg_project_reduc_hess.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ void ocp_nlp_reg_project_reduc_hess_opts_initialize_default(void *config_, ocp_n



void ocp_nlp_reg_project_reduc_hess_opts_set(void *config_, ocp_nlp_reg_dims *dims, void *opts_, char *field, void* value)
void ocp_nlp_reg_project_reduc_hess_opts_set(void *config_, void *opts_, const char *field, void* value)
{

ocp_nlp_reg_project_reduc_hess_opts *opts = opts_;
Expand Down
2 changes: 1 addition & 1 deletion acados/ocp_nlp/ocp_nlp_reg_project_reduc_hess.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ void *ocp_nlp_reg_project_reduc_hess_opts_assign(void *raw_memory);
//
void ocp_nlp_reg_project_reduc_hess_opts_initialize_default(void *config_, ocp_nlp_reg_dims *dims, void *opts_);
//
void ocp_nlp_reg_project_reduc_hess_opts_set(void *config_, ocp_nlp_reg_dims *dims, void *opts_, char *field, void* value);
void ocp_nlp_reg_project_reduc_hess_opts_set(void *config_, void *opts_, const char *field, void* value);



Expand Down
1 change: 1 addition & 0 deletions acados/ocp_qp/ocp_qp_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ typedef struct
void (*memory_get)(void *config_, void *mem_, const char *field, void* value);
acados_size_t (*workspace_calculate_size)(void *config, void *dims, void *opts);
int (*evaluate)(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work);
void (*solver_get)(void *config_, void *qp_in_, void *qp_out_, void *opts_, void *mem_, const char *field, int stage, void* value, int size1, int size2);
void (*memory_reset)(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work);
void (*eval_sens)(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work);
} qp_solver_config;
Expand Down
45 changes: 45 additions & 0 deletions acados/ocp_qp/ocp_qp_hpipm.c
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,50 @@ void ocp_qp_hpipm_memory_reset(void *config_, void *qp_in_, void *qp_out_, void
ocp_qp_hpipm_memory_assign(config_, qp_in->dim, opts_, mem_);
}

void ocp_qp_hpipm_solver_get(void *config_, void *qp_in_, void *qp_out_, void *opts_, void *mem_, const char *field, int stage, void* value, int size1, int size2)
{
ocp_qp_in *qp_in = qp_in_;
// ocp_qp_out *qp_out = qp_out_;
ocp_qp_hpipm_opts *opts = opts_;
ocp_qp_hpipm_memory *mem = mem_;

double *double_values = value;
int nx = qp_in->dim->nx[stage];
int nu = qp_in->dim->nu[stage];

// d_ocp_qp_ipm_get_ric_P
if (!strcmp(field, "P"))
{
if ((size1 != nx) || (size2 != nx))
{
printf("ocp_qp_hpipm_solver_get: size of P not as expected, got size %d %d.", size1, size2);
}
d_ocp_qp_ipm_get_ric_P(qp_in, opts->hpipm_opts, mem->hpipm_workspace, stage, double_values);
// void OCP_QP_IPM_GET_RIC_P(struct OCP_QP *qp, struct OCP_QP_IPM_ARG *arg, struct OCP_QP_IPM_WS *ws, int stage, REAL *P)
}
else if (!strcmp(field, "K"))
{
if ((size1 != nu) || (size2 != nx))
{
printf("ocp_qp_hpipm_solver_get: size of K not as expected, got size %d %d.", size1, size2);
}
d_ocp_qp_ipm_get_ric_K(qp_in, opts->hpipm_opts, mem->hpipm_workspace, stage, double_values);
}
else if (!strcmp(field, "Lr"))
{
if ((size1 != nu) || (size2 != nu))
{
printf("ocp_qp_hpipm_solver_get: size of Lr not as expected, got size %d %d.", size1, size2);
}
d_ocp_qp_ipm_get_ric_Lr(qp_in, opts->hpipm_opts, mem->hpipm_workspace, stage, double_values);
}
else
{
printf("\nocp_qp_hpipm_solver_get: field %s not supported", field);
}
return;
}


void ocp_qp_hpipm_eval_sens(void *config_, void *param_qp_in_, void *sens_qp_out_, void *opts_, void *mem_, void *work_)
{
Expand Down Expand Up @@ -368,6 +412,7 @@ void ocp_qp_hpipm_config_initialize_default(void *config_)
config->memory_get = &ocp_qp_hpipm_memory_get;
config->workspace_calculate_size = &ocp_qp_hpipm_workspace_calculate_size;
config->evaluate = &ocp_qp_hpipm;
config->solver_get = &ocp_qp_hpipm_solver_get;
config->memory_reset = &ocp_qp_hpipm_memory_reset;
config->eval_sens = &ocp_qp_hpipm_eval_sens;

Expand Down
Loading