csocp_cone.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /**
  2. * @file csocp_cone.h
  3. * @brief 实现锥结构相关的函数。本模块是核心模块的一部分。
  4. * This file implements routines for cone. This module serves as part of core module
  5. * @version 0.1
  6. * @date 2021-09-17
  7. *
  8. * @copyright Copyright (c) 2021
  9. *
  10. */
  11. #ifndef __CSOCP_CONE_H__
  12. #define __CSOCP_CONE_H__
  13. #include "csocp_config.h"
  14. #define CONE_OK 0 /**< Cone status */
  15. #define CONE_INVALID 1 /**< Cone status */
  16. /*
  17. * Creating and deleting methods
  18. */
  19. /** 创建锥 Creating cone */
  20. void c_cone_create(c_cone **p_cone, /**< 指针:指向锥结构体 Pointer to cone structure */
  21. c_int nlpdim, /**< 线性锥维度 Dimension of LP cone */
  22. c_int nsoc, /**< 二阶锥数量 Number of SOC cones */
  23. c_int *socdim /**< 指针:二阶锥维度 Dimensions of SOC cones */
  24. );
  25. /** 析构锥结构体 Free cone */
  26. void c_cone_free(c_cone **p_cone /* 指针:指向锥结构体 Pointer to cone structure */
  27. );
  28. /*
  29. * Solving related methods
  30. */
  31. /** 将变量推入到锥的内部 Push variables to inside of cones */
  32. void c_cone_pushbnd(c_cone *cone, /**< 输入:锥结构体 Input cone structure */
  33. c_real *srcval, /**< 输入变量 Input values */
  34. c_real *dstval, /**< 输出变量 Output values */
  35. c_param *param /**< 求解器参数 Solver parameters */
  36. );
  37. /** 缩放原始变量值 Scale primal values */
  38. void c_cone_scaleprimal(c_cone *cone, /**< 输入:锥结构 Input cone structure */
  39. c_real *srcprim, /**< 输入:原始变量值 Input primal values */
  40. c_real *dstscal /**< 输出结果 Output scalings */
  41. );
  42. /** 缩放对偶变量 Scale dual values */
  43. void c_cone_scaledual(c_cone *cone, /**< 输入:锥结构 Input cone structure */
  44. c_real *srcdual, /**< 输出:对偶变量值 Input dual values */
  45. c_real *dstscal /**< 输出结果 Output scalings */
  46. );
  47. /** 更新缩放结果 Update scalings */
  48. c_int c_cone_updatescale(c_cone *cone, /**< 输入:锥结构 Input cone structure */
  49. c_real *srcprim, /**< 输入:原始变量值 Input primal values */
  50. c_real *srcdual, /**< 输入:对偶变量值 Input dual values */
  51. c_real *dstscal /**< 输出:缩放结果 Output scalings */
  52. );
  53. /** 返回后处理的搜索方向 Post-solve search directions */
  54. void c_cone_postsolve(c_cone *cone, /**< 输入:锥结构 Input cone structure */
  55. c_int ncol, /**< 变量数量 Number of variables */
  56. c_int neq, /**< 等式约束数量 Number of equalities */
  57. c_int *invmap, /**< 逆索引映射 Inverse index map */
  58. c_real *invval, /**< 逆数值映射 Inverse values */
  59. c_real *dx, /**< x的搜索方向 Search direction of x */
  60. c_real *dy, /**< y的搜索方向 Search direction of y */
  61. c_real *dz /**< z的搜索方向 Search direction of z */
  62. );
  63. /*
  64. * Basic operator methods
  65. */
  66. /** 锥乘积 Conic product: w = u o v */
  67. c_real c_cone_prod(c_cone *cone, /**< 输入:锥结构 Input cone structure */
  68. c_real *srcU, /**< 输入:U Input U values */
  69. c_real *srcV, /**< 输入:V Input V values */
  70. c_real *dstW /**< 输出:W Ouput W values */
  71. );
  72. /** 锥除法 Conic division: w = u \ v */
  73. void c_cone_div(c_cone *cone, /**< 输入:锥结构 Input cone structure */
  74. c_real *srcU, /**< 输入:U Input U values */
  75. c_real *srcW, /**< 输入:W Input W values */
  76. c_real *dstV /**< 输出:V Output V values */
  77. );
  78. /*
  79. * Auxiliary methods
  80. */
  81. /** 获取锥结构的内存需求量 Get memory requirement of cone */
  82. c_int c_cone_getmem(c_int lpdim, /**< 线性锥维度 Dimension of LP cone */
  83. c_int nsoc, /**< 二阶锥数量 Number of SOC cones */
  84. c_int *socdim /**< 二阶锥维度 Dimensions of SOC cones */
  85. );
  86. #endif