/** * @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