csocp_kkt.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /**
  2. * @file csocp_kkt.h
  3. * @brief 实现KKT模块
  4. * This file impelements KKT module of the CSOCP solver
  5. * @version 0.1
  6. * @date 2021-09-17
  7. *
  8. * @copyright Copyright (c) 2021
  9. *
  10. */
  11. #ifndef __CSOCP_KKT_H__
  12. #define __CSOCP_KKT_H__
  13. #include "csocp_config.h"
  14. #define KKT_OK 0 /**< KKT状态码 KKT status codes */
  15. #define KKT_INVALID 1 /**< KKT状态码 KKT status codes */
  16. /*
  17. * Creating and deleting methods
  18. */
  19. /** 创建KKT结构体 Creating KKT structure */
  20. void c_kkt_create(c_kkt **p_kkt, /**< 指针:指向KKT结构体 Pointer to KKT structure */
  21. c_int nK, /**< KKT矩阵中的列数 Number of columns in KKT matrix */
  22. c_int nnzK /**< KKT矩阵中的元素数量 Number of elements in KKT matrix */
  23. );
  24. /** 析构KKT结构体 Free KKT structure */
  25. void c_kkt_free(c_kkt **p_kkt /**< 指针:指向KKT结构体 Pointer to KKT structure */
  26. );
  27. /*
  28. * Solve related methods
  29. */
  30. /** KKT系统初始化 Initializes the KKT system */
  31. void c_kkt_init(c_kkt *kkt, /**< 输入:KKT结构体 Input KKT structure */
  32. c_int n, /**< 变量数量 Number of variables */
  33. c_int p, /**< 不等式约束数量 Number of inequalities */
  34. c_cone *cone, /**< 输入:锥结构体 Input cone */
  35. c_real *c, /**< 目标函数向量c Objective costs */
  36. c_real *b, /**< 等式约束右端项b RHS of equalities */
  37. c_real *h, /**< 不等式约束右端项h RHS of inequalities */
  38. c_param *param /**< 求解参数 Solving parametrs */
  39. );
  40. /** KKT系统的符号LDL分解 Symbolic factorization of KKT system */
  41. c_int c_kkt_symbolic(c_kkt *kkt, /**< 输入:KKT结构体 Input KKT structure */
  42. c_spmat *ku, /**< 输入:KKT矩阵 Input KKT matrix */
  43. c_int *sign /**< 输出:Ouput sign vector */
  44. );
  45. /** KKT系统的数值LDL分解 Numerical factorization of KKT system */
  46. void c_kkt_factor(c_kkt *kkt, /**< 输入:KKT结构体 Input KKT structure */
  47. c_param *param /**< 求解参数 Solving parameters */
  48. );
  49. /** 求解KKT系统 Solve the KKT system */
  50. void c_kkt_solve(c_kkt *kkt, /**< 输入:KKT结构体 Input KKT structure */
  51. c_int n, /**< 变量数量 Number of variables */
  52. c_int p, /**< 不等式约束数量 Number of inequalities */
  53. c_int m, /**< 等式约束数量 Number of equalities */
  54. c_cone *cone, /**< 输入:锥结构体 Input cone structure */
  55. c_spmat *A, /**< 输入:等式约束矩阵A Input equality matrix */
  56. c_spmat *G, /**< 输入:不等式约束矩阵G Input inequality matrix */
  57. c_real *rhs, /**< 右端项 RHS values */
  58. c_real *dx, /**< x的搜索方向 Search direction of x-part */
  59. c_real *dy, /**< y的搜索方向 Search direction of y-part */
  60. c_real *dz, /**< z的搜索方向 Search direction of z-part */
  61. c_int isinit, /**< 是否是第一次运行KKT系统求解 Is initial KKT solve? */
  62. c_param *param /**< 求解参数 Solving parameters */
  63. );
  64. /** 更新KKT系统 Update the KKT system */
  65. void c_kkt_update(c_kkt *kkt, /**< 输入:KKT结构体 Input KKT structure */
  66. c_cone *cone, /**< 输入:锥结构体 Input cone structure */
  67. c_param *param /**< 求解参数 Solving parameters */
  68. );
  69. /*
  70. * Auxiliary methods
  71. */
  72. /** 获取KKT系统的内存需求量 Get memory requirement of KKT */
  73. c_int c_kkt_getmem(c_int n, /**< 变量数量 Number of variables */
  74. c_int m, /**< 不等式约束数量 Number of inequalities */
  75. c_int p, /**< 等式约束数量 Number of equalities */
  76. c_int nnzA, /**< 等式约束矩阵A的非零元个数 Number of nonzeros of A */
  77. c_int nnzG, /**< 不等式约束矩阵A的非零元个数 Number of nonzeros of G */
  78. c_int nK, /**< KKT矩阵中的列数 Number of columns in KKT */
  79. c_int nnzK /**< KKT矩阵的元素数量 Number of elements in KKT */
  80. );
  81. #endif