关于CPLEX C API中CPXbinvcol/CPXbinvrow计算基逆方式的咨询
关于CPLEX C API中CPXbinvcol/CPXbinvrow例程的疑问
背景
- 需获取线性规划的基逆用于L1回归的实时算法设计,尝试用Numpy和Scipy计算基逆,耗时比Gurobi求解对应LP的时间更长。
- Gurobi无直接访问基逆的例程,其C API中最接近的
GRBBinvRowi和GRBBinvColj仅能获取$B^{-1}A$指定索引的行或列,因此转而研究CPLEX的相关例程。
问题
CPLEX C API中的CPXbinvcol和CPXbinvrow例程是从头计算基逆矩阵,还是调用优化过程中CPLEX内部生成并存储的预计算基逆矩阵?
解答
根据IBM官方文档对CPXXbinvcol/CPXbinvcol的定义(该例程用于计算基逆的第j列),结合CPLEX的内部运行机制,这两个例程不会从头计算整个基逆矩阵:
CPLEX在求解线性规划的过程中,会通过单纯形法等核心算法实时维护基的逆矩阵(或其等价的分解形式,如LU分解),避免重复计算的开销。CPXbinvcol和CPXbinvrow正是基于这些已在优化过程中生成并存储的内部数据结构,高效地提取或计算出基逆的指定行/列,而非从头开始构建整个逆矩阵,这一设计也契合实时应用对计算效率的要求。
内容的提问来源于stack exchange,提问作者Botan Citil
相关产品推荐
相关产品推荐

