123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- /**
- * @file csocp_kkt.h
- * @brief 实现KKT模块
- * This file impelements KKT module of the CSOCP solver
- * @version 0.1
- * @date 2021-09-17
- *
- * @copyright Copyright (c) 2021
- *
- */
- #ifndef __CSOCP_KKT_H__
- #define __CSOCP_KKT_H__
- #include "csocp_config.h"
- #define KKT_OK 0 /**< KKT状态码 KKT status codes */
- #define KKT_INVALID 1 /**< KKT状态码 KKT status codes */
- /*
- * Creating and deleting methods
- */
- /** 创建KKT结构体 Creating KKT structure */
- void c_kkt_create(c_kkt **p_kkt, /**< 指针:指向KKT结构体 Pointer to KKT structure */
- c_int nK, /**< KKT矩阵中的列数 Number of columns in KKT matrix */
- c_int nnzK /**< KKT矩阵中的元素数量 Number of elements in KKT matrix */
- );
- /** 析构KKT结构体 Free KKT structure */
- void c_kkt_free(c_kkt **p_kkt /**< 指针:指向KKT结构体 Pointer to KKT structure */
- );
- /*
- * Solve related methods
- */
- /** KKT系统初始化 Initializes the KKT system */
- void c_kkt_init(c_kkt *kkt, /**< 输入:KKT结构体 Input KKT structure */
- c_int n, /**< 变量数量 Number of variables */
- c_int p, /**< 不等式约束数量 Number of inequalities */
- c_cone *cone, /**< 输入:锥结构体 Input cone */
- c_real *c, /**< 目标函数向量c Objective costs */
- c_real *b, /**< 等式约束右端项b RHS of equalities */
- c_real *h, /**< 不等式约束右端项h RHS of inequalities */
- c_param *param /**< 求解参数 Solving parametrs */
- );
- /** KKT系统的符号LDL分解 Symbolic factorization of KKT system */
- c_int c_kkt_symbolic(c_kkt *kkt, /**< 输入:KKT结构体 Input KKT structure */
- c_spmat *ku, /**< 输入:KKT矩阵 Input KKT matrix */
- c_int *sign /**< 输出:Ouput sign vector */
- );
- /** KKT系统的数值LDL分解 Numerical factorization of KKT system */
- void c_kkt_factor(c_kkt *kkt, /**< 输入:KKT结构体 Input KKT structure */
- c_param *param /**< 求解参数 Solving parameters */
- );
- /** 求解KKT系统 Solve the KKT system */
- void c_kkt_solve(c_kkt *kkt, /**< 输入:KKT结构体 Input KKT structure */
- c_int n, /**< 变量数量 Number of variables */
- c_int p, /**< 不等式约束数量 Number of inequalities */
- c_int m, /**< 等式约束数量 Number of equalities */
- c_cone *cone, /**< 输入:锥结构体 Input cone structure */
- c_spmat *A, /**< 输入:等式约束矩阵A Input equality matrix */
- c_spmat *G, /**< 输入:不等式约束矩阵G Input inequality matrix */
- c_real *rhs, /**< 右端项 RHS values */
- c_real *dx, /**< x的搜索方向 Search direction of x-part */
- c_real *dy, /**< y的搜索方向 Search direction of y-part */
- c_real *dz, /**< z的搜索方向 Search direction of z-part */
- c_int isinit, /**< 是否是第一次运行KKT系统求解 Is initial KKT solve? */
- c_param *param /**< 求解参数 Solving parameters */
- );
- /** 更新KKT系统 Update the KKT system */
- void c_kkt_update(c_kkt *kkt, /**< 输入:KKT结构体 Input KKT structure */
- c_cone *cone, /**< 输入:锥结构体 Input cone structure */
- c_param *param /**< 求解参数 Solving parameters */
- );
- /*
- * Auxiliary methods
- */
- /** 获取KKT系统的内存需求量 Get memory requirement of KKT */
- c_int c_kkt_getmem(c_int n, /**< 变量数量 Number of variables */
- c_int m, /**< 不等式约束数量 Number of inequalities */
- c_int p, /**< 等式约束数量 Number of equalities */
- c_int nnzA, /**< 等式约束矩阵A的非零元个数 Number of nonzeros of A */
- c_int nnzG, /**< 不等式约束矩阵A的非零元个数 Number of nonzeros of G */
- c_int nK, /**< KKT矩阵中的列数 Number of columns in KKT */
- c_int nnzK /**< KKT矩阵的元素数量 Number of elements in KKT */
- );
- #endif
|