Austin Schuh | 9049e20 | 2022-02-20 17:34:16 -0800 | [diff] [blame] | 1 | #include "osqp.h" |
| 2 | |
| 3 | |
| 4 | int main(int argc, char **argv) { |
| 5 | // Load problem data |
| 6 | c_float P_x[3] = { 4.0, 1.0, 2.0, }; |
| 7 | c_int P_nnz = 3; |
| 8 | c_int P_i[3] = { 0, 0, 1, }; |
| 9 | c_int P_p[3] = { 0, 1, 3, }; |
| 10 | c_float q[2] = { 1.0, 1.0, }; |
| 11 | c_float A_x[4] = { 1.0, 1.0, 1.0, 1.0, }; |
| 12 | c_int A_nnz = 4; |
| 13 | c_int A_i[4] = { 0, 1, 0, 2, }; |
| 14 | c_int A_p[3] = { 0, 2, 4, }; |
| 15 | c_float l[3] = { 1.0, 0.0, 0.0, }; |
| 16 | c_float u[3] = { 1.0, 0.7, 0.7, }; |
| 17 | c_int n = 2; |
| 18 | c_int m = 3; |
| 19 | |
| 20 | // Exitflag |
| 21 | c_int exitflag = 0; |
| 22 | |
| 23 | // Workspace structures |
| 24 | OSQPWorkspace *work; |
| 25 | OSQPSettings *settings = (OSQPSettings *)c_malloc(sizeof(OSQPSettings)); |
| 26 | OSQPData *data = (OSQPData *)c_malloc(sizeof(OSQPData)); |
| 27 | |
| 28 | // Populate data |
| 29 | if (data) { |
| 30 | data->n = n; |
| 31 | data->m = m; |
| 32 | data->P = csc_matrix(data->n, data->n, P_nnz, P_x, P_i, P_p); |
| 33 | data->q = q; |
| 34 | data->A = csc_matrix(data->m, data->n, A_nnz, A_x, A_i, A_p); |
| 35 | data->l = l; |
| 36 | data->u = u; |
| 37 | } |
| 38 | |
| 39 | // Define solver settings as default |
| 40 | if (settings) osqp_set_default_settings(settings); |
| 41 | |
| 42 | // Setup workspace |
| 43 | exitflag = osqp_setup(&work, data, settings); |
| 44 | |
| 45 | // Solve Problem |
| 46 | osqp_solve(work); |
| 47 | |
| 48 | // Clean workspace |
| 49 | osqp_cleanup(work); |
| 50 | if (data) { |
| 51 | if (data->A) c_free(data->A); |
| 52 | if (data->P) c_free(data->P); |
| 53 | c_free(data); |
| 54 | } |
| 55 | if (settings) c_free(settings); |
| 56 | |
| 57 | return exitflag; |
| 58 | } |