123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- #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
|