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

原文信息: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/

相关推荐
超级大只老咪1 分钟前
一维度前缀和解题通用模板(java)
java·开发语言·算法
weixin_513449966 分钟前
walk_these_ways项目学习记录第十篇(通过行为多样性 (MoB) 实现地形泛化)--从仿真到部署
人工智能·学习·算法
2501_948114248 分钟前
Claude Sonnet 4.6 深度评测:性能逼近 Opus、成本打骨折,附接入方案与选型指南
大数据·网络·人工智能·安全·架构
小欣加油10 分钟前
leetcode 42 接雨水
c++·算法·leetcode·职场和发展
angleboy812 分钟前
【原创】如何WIN 10/11系统下解决YOLOv13训练异常的安装指南
人工智能·深度学习·yolo
kobesdu14 分钟前
ROS导航调参指南:机器人模型、TEB/DWA与Costmap全解析
人工智能·机器人·ros
沫儿笙14 分钟前
库卡焊接机器人混合气节气装置
人工智能·机器人
tankeven17 分钟前
动态规划专题(14):石子合并问题(未完待续)
c++·算法·动态规划
ZhuNian的学习乐园19 分钟前
LLM智能体调度:从ReAct到多智能体调度
人工智能·python·深度学习
沫儿笙20 分钟前
弧焊机器人节气装置
人工智能·机器人