大规模线性规划求解中mosekopt迭代实现相关问题咨询
大规模线性规划求解问题解答
手动实现的约束子集迭代逻辑是否与MOSEK内置逻辑重复
你实现的流程属于**约束生成(行生成)**类方法,并不是MOSEK默认求解线性规划的内置逻辑,没有获得预期加速通常是以下几个原因:
- 随机抽取约束子集的策略效率极低:如果抽取的子集没有包含原问题的核心紧约束,需要多轮迭代才能覆盖有效约束,每一轮全量校验所有原问题约束的开销本身就很高,很容易抵消子集求解节省的时间
- 约束集膨胀过快:你选择保留所有历史使用过的约束,会让后续迭代的约束子集规模快速逼近原问题,自然没有加速效果,常规约束生成方法每次仅新增当前解违反的少量约束即可,不需要全量保留历史约束
- MOSEK原生求解器的底层优化已经非常成熟:对于绝大多数大规模稀疏线性规划问题,MOSEK内点法的直接求解开销已经低于多轮子集求解+全量校验的总开销
传入上一轮求解结果作为初始值是否能提升效率
和你使用的求解器类型有关:
- 若使用内点法求解:基本没有提升。内点法对初始点的质量不敏感,优质初始点最多能减少1-2步迭代,收益可以忽略,你之前设置
MSK_IPAR_INTPNT_BASIS为MSK_BI_NEVER的操作也和内点法初始点无关 - 若切换为单纯形法求解:收益非常明显。单纯形法支持暖启动,可基于上一轮的基信息快速求解约束修改后的线性规划,使用该特性时需要取消
MSK_BI_NEVER的配置,允许求解器返回基信息 - 额外优化建议:如果你的问题适配切割平面、Benders分解等结构,不要使用随机抽取约束的策略,改为每次仅新增当前解违反的1-3个最紧约束,同时可放弃全量约束校验,仅维护待校验的约束池,能大幅降低额外开销;另外需要确认你传入
mosekopt的系数矩阵是否为稀疏格式,大规模问题用稠密格式存储会浪费数倍的求解时间
内容的提问来源于stack exchange,提问作者Star
相关产品推荐
相关产品推荐

