| #ifndef KKT_H |
| # define KKT_H |
| |
| # ifdef __cplusplus |
| extern "C" { |
| # endif // ifdef __cplusplus |
| |
| # include "types.h" |
| |
| # ifndef EMBEDDED |
| |
| # include "cs.h" |
| |
| /** |
| * Form square symmetric KKT matrix of the form |
| * |
| * [P + param1 I, A'; |
| * A -diag(param2)] |
| * |
| * NB: Only the upper triangular part is stuffed! |
| * |
| * |
| * If Pdiag_idx is not OSQP_NULL, it saves the index of the diagonal |
| * elements of P there and the number of diagonal elements in Pdiag_n. |
| * |
| * Similarly, if rhotoKKT is not null, |
| * it saves where the values of param2 go in the final KKT matrix |
| * |
| * NB: Pdiag_idx needs to be freed! |
| * |
| * @param P cost matrix (already just upper triangular part) |
| * @param A linear constraint matrix |
| * @param format CSC (0) or CSR (1) |
| * @param param1 regularization parameter |
| * @param param2 regularization parameter (vector) |
| * @param PtoKKT (modified) index mapping from elements of P to KKT matrix |
| * @param AtoKKT (modified) index mapping from elements of A to KKT matrix |
| * @param Pdiag_idx (modified) Address of the index of diagonal elements in P |
| * @param Pdiag_n (modified) Address to the number of diagonal elements in P |
| * @param param2toKKT (modified) index mapping from param2 to elements of |
| *KKT |
| * @return return status flag |
| */ |
| csc* form_KKT(const csc *P, |
| const csc *A, |
| c_int format, |
| c_float param1, |
| c_float *param2, |
| c_int *PtoKKT, |
| c_int *AtoKKT, |
| c_int **Pdiag_idx, |
| c_int *Pdiag_n, |
| c_int *param2toKKT); |
| # endif // ifndef EMBEDDED |
| |
| |
| # if EMBEDDED != 1 |
| |
| /** |
| * Update KKT matrix using the elements of P |
| * |
| * @param KKT KKT matrix in CSC form (upper-triangular) |
| * @param P P matrix in CSC form (upper-triangular) |
| * @param PtoKKT Vector of pointers from P->x to KKT->x |
| * @param param1 Parameter added to the diagonal elements of P |
| * @param Pdiag_idx Index of diagonal elements in P->x |
| * @param Pdiag_n Number of diagonal elements of P |
| */ |
| void update_KKT_P(csc *KKT, |
| const csc *P, |
| const c_int *PtoKKT, |
| const c_float param1, |
| const c_int *Pdiag_idx, |
| const c_int Pdiag_n); |
| |
| |
| /** |
| * Update KKT matrix using the elements of A |
| * |
| * @param KKT KKT matrix in CSC form (upper-triangular) |
| * @param A A matrix in CSC form (upper-triangular) |
| * @param AtoKKT Vector of pointers from A->x to KKT->x |
| */ |
| void update_KKT_A(csc *KKT, |
| const csc *A, |
| const c_int *AtoKKT); |
| |
| |
| /** |
| * Update KKT matrix with new param2 |
| * |
| * @param KKT KKT matrix |
| * @param param2 Parameter of the KKT matrix (vector) |
| * @param param2toKKT index where param2 enters in the KKT matrix |
| * @param m number of constraints |
| */ |
| void update_KKT_param2(csc *KKT, |
| const c_float *param2, |
| const c_int *param2toKKT, |
| const c_int m); |
| |
| # endif // EMBEDDED != 1 |
| |
| |
| # ifdef __cplusplus |
| } |
| # endif // ifdef __cplusplus |
| |
| #endif // ifndef KKT_H |