/** * @file csocp_cone.h * @brief 实现锥结构相关的函数。本模块是核心模块的一部分。 * This file implements routines for cone. This module serves as part of core module * @version 0.1 * @date 2021-09-17 * * @copyright Copyright (c) 2021 * */ #ifndef __CSOCP_CONE_H__ #define __CSOCP_CONE_H__ #include "csocp_config.h" #define CONE_OK 0 /**< Cone status */ #define CONE_INVALID 1 /**< Cone status */ /* * Creating and deleting methods */ /** 创建锥 Creating cone */ void c_cone_create(c_cone **p_cone, /**< 指针:指向锥结构体 Pointer to cone structure */ c_int nlpdim, /**< 线性锥维度 Dimension of LP cone */ c_int nsoc, /**< 二阶锥数量 Number of SOC cones */ c_int *socdim /**< 指针:二阶锥维度 Dimensions of SOC cones */ ); /** 析构锥结构体 Free cone */ void c_cone_free(c_cone **p_cone /* 指针:指向锥结构体 Pointer to cone structure */ ); /* * Solving related methods */ /** 将变量推入到锥的内部 Push variables to inside of cones */ void c_cone_pushbnd(c_cone *cone, /**< 输入:锥结构体 Input cone structure */ c_real *srcval, /**< 输入变量 Input values */ c_real *dstval, /**< 输出变量 Output values */ c_param *param /**< 求解器参数 Solver parameters */ ); /** 缩放原始变量值 Scale primal values */ void c_cone_scaleprimal(c_cone *cone, /**< 输入:锥结构 Input cone structure */ c_real *srcprim, /**< 输入:原始变量值 Input primal values */ c_real *dstscal /**< 输出结果 Output scalings */ ); /** 缩放对偶变量 Scale dual values */ void c_cone_scaledual(c_cone *cone, /**< 输入:锥结构 Input cone structure */ c_real *srcdual, /**< 输出:对偶变量值 Input dual values */ c_real *dstscal /**< 输出结果 Output scalings */ ); /** 更新缩放结果 Update scalings */ c_int c_cone_updatescale(c_cone *cone, /**< 输入:锥结构 Input cone structure */ c_real *srcprim, /**< 输入:原始变量值 Input primal values */ c_real *srcdual, /**< 输入:对偶变量值 Input dual values */ c_real *dstscal /**< 输出:缩放结果 Output scalings */ ); /** 返回后处理的搜索方向 Post-solve search directions */ void c_cone_postsolve(c_cone *cone, /**< 输入:锥结构 Input cone structure */ c_int ncol, /**< 变量数量 Number of variables */ c_int neq, /**< 等式约束数量 Number of equalities */ c_int *invmap, /**< 逆索引映射 Inverse index map */ c_real *invval, /**< 逆数值映射 Inverse values */ c_real *dx, /**< x的搜索方向 Search direction of x */ c_real *dy, /**< y的搜索方向 Search direction of y */ c_real *dz /**< z的搜索方向 Search direction of z */ ); /* * Basic operator methods */ /** 锥乘积 Conic product: w = u o v */ c_real c_cone_prod(c_cone *cone, /**< 输入:锥结构 Input cone structure */ c_real *srcU, /**< 输入:U Input U values */ c_real *srcV, /**< 输入:V Input V values */ c_real *dstW /**< 输出:W Ouput W values */ ); /** 锥除法 Conic division: w = u \ v */ void c_cone_div(c_cone *cone, /**< 输入:锥结构 Input cone structure */ c_real *srcU, /**< 输入:U Input U values */ c_real *srcW, /**< 输入:W Input W values */ c_real *dstV /**< 输出:V Output V values */ ); /* * Auxiliary methods */ /** 获取锥结构的内存需求量 Get memory requirement of cone */ c_int c_cone_getmem(c_int lpdim, /**< 线性锥维度 Dimension of LP cone */ c_int nsoc, /**< 二阶锥数量 Number of SOC cones */ c_int *socdim /**< 二阶锥维度 Dimensions of SOC cones */ ); #endif