加快gurobipy中Model.computeIIS()运算速度的方法有哪些
加快Gurobi大规模QCQP问题IIS计算效率的方法
- 前置裁剪模型规模
QCQP问题IIS计算耗时和约束、变量规模正相关,可先根据业务逻辑手动剔除无冲突可能性的冗余约束,固定取值确定的变量,把原始15000条约束的规模先压缩再调用IIS计算接口。如果有明确不参与冲突的二次约束也可以先临时移除,缩小求解范围。 - 调整IIS求解适配参数
可以针对性修改Gurobi参数降低求解难度:- 将
IISMethod参数设置为1(筛选法)或2(增广法),默认自动选择的算法对非凸QCQP场景适配性较差,手动指定后通常能提升计算速度 - 开启
PreQLinearize=1,先对二次约束做线性化预处理,降低问题求解复杂度 - 临时关闭严格非线性校验,设置
FuncNonlinear=0先求解松弛问题的IIS,再反向定位原始问题的冲突约束
- 将
- 分块迭代缩小冲突范围
不要直接调用全量模型的IIS计算,先将约束按业务模块、约束类型拆分为多个分组,每次移除一个分组后做可行性判定:如果移除后问题从infeasible变为可行,即可确认冲突约束在当前分组内,反复迭代将冲突范围缩小到几十条约束量级后,再调用IIS计算接口,耗时会大幅降低。 - 借助可行性松弛定位候选约束
先调用model.feasRelaxS()接口计算最小可行性松弛解,所有松弛量不为0的约束就是高概率参与冲突的候选约束,直接移除其余所有松弛量为0的约束,仅保留候选约束集后再计算IIS,能把计算量降低数个量级。 - 优化运行时配置
关闭非必要的控制台日志输出(LogToConsole=0)减少IO开销,IIS计算多线程并行容易出现资源争抢,可将Threads参数设置为CPU物理核心数的1/2,反而能提升计算效率。
内容的提问来源于stack exchange,提问作者pqrz
相关产品推荐
相关产品推荐

