Gurobi 10.0性能提升汇总
LP 性能
新增⽹络单纯形算法 New network simplex algorithm
• LP 并发算法改进: 仅对预优化之后的最终模型进⾏并⾏计算
• Crossover 改进
• 并⾏原始单纯形外推 Parallel primal pushes
• 外推前内点法解调整 Barrier solution adjustment before pushes
• 新增和改进模型精简算法,提供更多选项
• 把⼀些 MIP精简算法应⽤到 LP, 例如 PreSparsify
• 处理对偶和基的反压缩 Handle dual and basis uncrush
• Aggregate 合并参数新增数值 2
⽹络单纯形算法 (Network Simplex Algorithm)
• 针对问题
• 最⼩成本流 Minimum cost flow
• 可以建模为常规 LP 模型,⽤常规LP 求解器
• 开发动⼒
• 众所周知: 经常在 OR, CS 和 Math 课程上讲到
• 研究较多: 许多不同算法
• 连续最短路径算法 Successive shortest path algorithm
• 缩放算法,多项式运⾏时间 Scaling algorithms, polynomial
• Cost scaling, capacity scaling, double scaling, etc.
• ⽹络单纯形算法 Network simplex algorithms
• Primal and dual network simplex
• Reference: Network Flows, R. Ahuja, T. Magnanti and J. Orlin
• Gurobi ⽹络单纯形算法
• 只实现原始单纯形
• 最主要的挑战部分
• ⽣成树(spanning tree, i.e., basis)的数据结构
• 维护/更新⽣成树
• 原始单纯形⽹络算法相比常规 LP 原始单纯形算法优势在于
• 可以利⽤特殊结构加快速度: ⼤概在五倍速
• 强可⾏⽣成树: 保证没有循环(cycling)
• 较容易构造特殊算法,产⽣较好的初始⽣成树(basis crash)等
• 在我们⽹络数据集的性能
• Vs. ⼴义原始单纯形: 36X, ⼤约减少 50% 迭代
• Vs. ⼴义对偶单纯形: 3.9X, ⼤约增加10X 迭代
• 对偶⽹络单纯形
• 还未开发: 类似的挑战,也许更难⼀些
• 还不清楚简单好⽤的⽅法来保证没有循环
• 预期比原始⽹络单纯形算法要快
并发LP算法(Concurrent LP Algorithms)
Gurobi LP 算法求解过程 (单纯形和内点法)
• 决定求解原始还是对偶形式
• 结论经常对于单纯形法或内点法⽽不同
• 应⽤ LP 精简算法产⽣预优化模型
• 对于原始和对偶单纯形相同,对于内点法稍有不同
• 折叠(Fold)预优化模型,如果存在弱对称性
• 再次应⽤ LP 精简算法产⽣更⼩的预优化模型
• ⽤单纯形或者内点法求解最终的预优化模型
• 反压缩(Uncrush) 折叠的预优化模型,应⽤单纯形法在折叠的模型上
• 反折叠(Unfold) 并采⽤交叉转换(Crossover) 得到基解
• 反压缩(Uncrush) 并采⽤单纯形法在初始模型上直到结束
• 开发动⼒
• 计算机核数持续增加
• 越来越多⽤户使⽤并发LP求解器
• 并发LP 求解器通常使⽤更多的内存;⼀些⽤户建议设置软性内存限制参数,以便限制内
点法内存占⽤
V9.5 及以前版本的并发LP算法
• 每个并发任务都会保留⼀个模型拷⻉
• 通常占⽤很⼤内存
• 每个任务,不论原始单纯形,对偶单纯形还是内点法独立运算所有步骤
• 每个步骤都由并发任务各⾃独立并发完成
• 并发运⾏的任务可能会让计算速度显著降低
• 取决于机器和模型规模,速度可能会降低 30% - 60%
• 新并发LP算法
• 只在最终预优化模型上应⽤并发算法
• 其他步骤顺序执⾏
• 挑战在于
• 决定求解形式是原始形式还是对偶形式
• 管理单纯形和内点法的预优化差异
• 对于规模较⼤模型的提速经常远超 10%
• 如今使⽤更少的内存
• 取决于预优化模型规模,⽽不是初始模型规模。
MIP 性能
各种增强分⽀(Strong branching)⽅法的改进
• 多种对称性改进
• 深度搜索时(diving), 关闭非有效切平⾯以便更好求解松弛问题
• 求解⼦MIP问题时, ⽤⼒度更⼤的设置
• 新预优化简化算法和改进
• 对于松弛问题的并发LP算法改进和调优
• ⼒度更⼤地融和聚类(cliques) 和VUB
• 基于优化的边界紧缩算法 Optimization-based bound tightening (OBBT)
• 对 MIQP/MIQCP/MINLP 有帮助,后续还会介绍
• 对于机器学习模型的多种改进
• 将在后续开源 Github 应⽤库中介绍。
增强分⽀⽅法的改进
增强分⽀(Strong branching)
• 选择取分数值的0-1变量/整数变量的集合
• 对于每个变量,执⾏向上和向下分⽀的⼀定数量的对偶迭代
• 利⽤⽬标值在⼆个分⽀上的变化来选择分⽀变量
• 尝试各种⽅法
• 增强分⽀通常代价较⾼,需要事半功倍
• 具有前瞻性, 定义终⽌数值
• 利⽤对称性节省步骤
• 利⽤从向上和向下分⽀获得的引导
• 传播引申的边界值
• 传播聚类(cliques)
• 传播 SOS 约束
• 应⽤增强分⽀的频率
• 各种其他考虑
MIQP/MIQCP 性能
新 QUBO 启发算法
• 远景强化 Perspective strengthening
• 把⽬标中的Q 项移到约束中
• 对于 QC 固定启发算法的⼯作限度(work limit)调整
• 加强⼆次约束中0-1变量的系数
• 在启发算法中以⼀定次序固定0-1变量
• 求解集覆盖问题来选择线性化⽅式
• 移除共同变量
• 基于优化的边界紧缩算法 OBBT
• 其他 MIP 改进同样适⽤
新 QUBO 启发算法
• ⼆种类型的启发算法
• 构造: 发现新的可⾏解
• 改进: 提升已有可⾏解
• 9.5 版本中的QUBO 算法
• 禁忌搜索(Tabu search) – 改进算法
• 从⼀个随机起点出发
• 局部改进对于 QUBO 相对容易
• 没有约束
• 10.0版本中的新 QUBO 算法
• Rank-2 松弛启发算法 – 构造算法
• Burer, Monteiro, and Zhang, Rank-Two Relaxation Heuristics for MAX-Cut and Other Binary
Quadratic Programs
• ⾏和列映射到圆上的点
• 考虑所有可能切分圆的弦。
我们计算结果显⽰
• 对于 QUBO 问题可以快速找到好的解
• 并且可以显著缩短优化的时间,对于启发算法来说很少⻅
非凸 MIQCP 性能
• 基于优化的边界紧缩算法 OBBT
• 在乘积项覆盖中显性处理⼆分图 (Dealing explicitly with bipartite graphs in the
product term covering)
• NLP 启发算法终⽌条件的改进
• NLP 启发算法的多次启动
• 其他 MIP 和 凸 MIQCP 改进同样适⽤
基于优化的边界紧缩算法
Optimization Based Bound Tightening
• 对于 MINLP 求解器的通常技术
• 给定⼀个(非凸)MINLP 的LP松弛模型
• 对于任何⼀个变量
• 最⼩化/最⼤化 松弛数值
• ⽤最优值当作 的下界/上界
• ⽤新的上下界紧缩松弛系数
• OBBT 改进 (Gleixner et al. 2017)
• 筛选变量
• 利⽤热启动
• 利⽤ OBBT LP的对偶解紧缩分⽀树的边界
对于 MINLP 求解器的通常技术
• 给定⼀个(非凸)MINLP 的LP松弛模型
• 对于任何⼀个变量
• 最⼩化/最⼤化 松弛数值
• ⽤最优值当作 的下界/上界
• ⽤新的上下界紧缩松弛系数
• OBBT 改进 (Gleixner et al. 2017)
• 筛选变量
• 利⽤热启动
• 利⽤ OBBT LP的对偶解紧缩分⽀树的边界
对于 MINLP 求解器的通常技术
• 给定⼀个(非凸)MINLP 的LP松弛模型
• 对于任何⼀个变量
• 最⼩化/最⼤化 松弛数值
• ⽤最优值当作 的下界/上界
• ⽤新的上下界紧缩松弛系数
• OBBT 改进 (Gleixner et al. 2017)
• 筛选变量
• 利⽤热启动
• 利⽤ OBBT LP的对偶解紧缩分⽀树的边界
上一条:understand工具
下一条:Gurobi 10.0 优化引擎