优化|优化求解器自动调参

原文信息:MindOpt Tuner: Boost the Performance of Numerical Software by Automatic Parameter Tuning

作者:王孟昌 (达摩院决策智能实验室MindOpt团队成员)

一个算法开发者,可能会幻想进入这样的境界:算法只用开发一次,但可以到处部署交付。这种 ROI 无穷大的壮丽景象,不光开发者很喜欢,老板们更喜欢。

但是,早在 1997 年,IBM 两位学者就给这个幻想泼下一盆冷水,他们在一篇论文里证明了一个结论:著名的「没有免费午餐定理」。在这篇论文里,他们写道 (大意):「如果算法在某一类问题上性能特别好,那在其它问题上就会很糟糕」。

所以,现实中一个算法的性能表现,往往在有的场景里性能非常好,但在有的场景里却非常糟糕,有些客户能收到惊喜,而有些客户可能会受到惊吓。对于这些受到惊吓的客户,他们场景里的需求该怎么交付呢?

聪明的开发者们在算法中引入了算法参数,使用可变的算法参数来刻画不同场景里面的关键特征,这使得算法具备了适应多种场景的能力。通过小心地配置这些算法参数,我们可以让算法的实际性能达到或超出期待的水平,这样来实现一次算法开发,然后通过参数配置达成在多个场景里面交付的效果。

以求解优化问题为例,优化求解器里就内置了很多参数,这些参数的引入,使得求解器拥有了支持多种不同场景的潜力。在有些场景中,求解器的默认参数就能很好地适应;但在一些新场景里,默认参数可能不再与场景特征相匹配,甚至会明显拖慢求解效率。这时候,我们可以将新场景中的优化模型输入到调参器,让它寻找与场景更匹配的求解器参数配置,这样就能充分释放求解器在新场景中的潜力。

调参器背后的算法模拟了人类认识问题然后解决问题的过程,它通过观测参数对应的输出 (性能) 数据来拟合或学习参数与输出之间隐含的数量关系,再根据学习到的关系,来推测最有潜力的参数,然后对参数进行验证。如此反复,不断积累关于参数与性能之间关系的知识,从而作出更优的推测。

这类算法在未知的数量关系上进行优化,所以通常也称之为黑盒优化算法,因为在优化过程中没有梯度信息可以利用,所以也称为无梯度优化算法。此外,在某些应用场景里它还被称为仿真优化算法、零阶优化算法等。

我们测试了一个算例(neos-2978193-inde),这个算例来自混合整数规划的标准测试集 MIPLIB2017,它有 2 万多个变量,近 400 个约束。使用开源的优化求解器 Cbc 直接进行求解,需要 24000 秒,而使用老牌霸主级商业求解器 CPLEX 进行求解,只需要 46 秒 ------ 不愧是商用求解器,效率是开源求解器的 512 倍。

而使用我们的调参器 (MindOpt Tuner) 推荐的参数,Cbc 的求解耗时居然下降到了 20 秒,足足提速 1200 倍。从 24000 秒到 20 秒,1200 倍提速!也就是说,在这个问题上,使用调参器推荐的参数,开源的 Cbc 一举反超 CPLEX,实现 2.3 倍的效率领先。

我们对 MIPLIB2017 中的 240 个算例进行了测试,如果把每个模型的求解时间放开到 3 万秒,Cbc 使用默认参数只能解出 106 个模型,而使用我们的调参器推荐的参数,Cbc解出了 121 个模型,最大加速倍数达到 1226 倍,这106 个算例的平均求解时间从 4209 秒下降到 1196 秒,平均加速倍数达到 17.85 倍。

所以,对于你设计的算法或程序,倘若一时性能不如意,千万不要妄自菲薄,不调一下参数,你咋知道它不会使出惊世骇俗的洪荒之力呢?

调参器本质上是在对输入输出关系进行学习,并在此之上进行推理,因此,除了对求解器进行参数优化,只要我们的算法或程序能对参数输入进行响应,我们就能借助调参器 (或者说黑盒优化算法) 找到最符合我们需求的输入。

如果把矿石的投料配比作为参数,我们可以通过冶炼化学反应过程的模拟器,来计算某一配比下铁水的成份和冶炼的成本,接入调参器,我们就能得到能满足成份要求且成本最低的配比方案。如果把药物的分子结构编码为参数,我们可以把生物化学反应的模拟程序接入调参器,我们就能得到最有潜力的药物成份。如果把工件加工顺序作为参数,我们可以通过生产仿真程序来推演订单交付的准时率,把仿真模型接入调参器,我们就能得到交付最及时的生产计划。

总之,如果某个业务场景可以进行模拟或验证,那么调参器(黑盒优化算法)就可以帮助我们找到最佳的答案。

参考文献

[1] Wolpert & Macready (1997). No Free Lunch Theorems for Optimization. IEEE Transactions on Evolutionary Computation, 1(1), 67-82

[2] Zhang et al (2023). MindOpt Tuner: Boost the Performance of Numerical Software by Automatic Parameter Tuning. arXiv.2307.08085

[3] Cbc: https://github.com/coin-or/Cbc

[4] CPLEX: https://www.ibm.com/cn-zh/products/ilog-cplex-optimization-studio

[5] MindOpt: https://opt.aliyun.com/

[6] MIPLIB2017: https://miplib.zib.de/

相关推荐
&梧桐树夏5 分钟前
【算法系列-链表】删除链表的倒数第N个结点
数据结构·算法·链表
创意锦囊6 分钟前
ChatGPT推出Canvas功能
人工智能·chatgpt
QuantumStack8 分钟前
【C++ 真题】B2037 奇偶数判断
数据结构·c++·算法
知来者逆16 分钟前
V3D——从单一图像生成 3D 物体
人工智能·计算机视觉·3d·图像生成
今天好像不上班17 分钟前
软件验证与确认实验二-单元测试
测试工具·算法
碳苯1 小时前
【rCore OS 开源操作系统】Rust 枚举与模式匹配
开发语言·人工智能·后端·rust·操作系统·os
wclass-zhengge1 小时前
数据结构篇(绪论)
java·数据结构·算法
何事驚慌1 小时前
2024/10/5 数据结构打卡
java·数据结构·算法
结衣结衣.1 小时前
C++ 类和对象的初步介绍
java·开发语言·数据结构·c++·笔记·学习·算法
whaosoft-1431 小时前
51c视觉~CV~合集3
人工智能