优化|优化求解器自动调参
原文信息: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/
相关文章:
优化|优化求解器自动调参
原文信息:MindOpt Tuner: Boost the Performance of Numerical Software by Automatic Parameter Tuning 作者:王孟昌 (达摩院决策智能实验室MindOpt团队成员) 一个算法开发者,可能会幻想进入这样的境界:算…...
vite vue3配置eslint和prettier以及sass
准备 教程 安装eslint 官网 vue-eslint ts-eslint 安装eslint yarn add eslint -D生成配置文件 npx eslint --init安装其他插件 yarn add -D eslint-plugin-import eslint-plugin-vue eslint-plugin-node eslint-plugin-prettier eslint-config-prettier eslint-plugin…...
C语言第入门——第十六课
目录 一、分治策略与递归 二、递归 1.求解n的阶乘 2.输入整数、倒序输出 3.输入整数、正序输出 4.计算第n位Fibonacci数列 编辑5.无序整数数组打印 6.找到对应数组下标 一、分治策略与递归 在我们遇到大问题的时候,我们的正确做法是将它分解成小问题&a…...
IntelliJ IDEA 快捷键 Windows 版本
前言:常用快捷键 IntelliJ IDEA编辑器大受欢迎的原因之一是它的智能提示和丰富的快捷键,在日常开发中熟练的使用快捷键会大大提升开发的效率,本篇文章就笔者日常开发中的总结,把常用的、好用的快捷键做一个列表,方便…...
重生之我必去大厂java开发
JavaDreamer 重生之我必去大厂java开发。主线任务进入大厂java开发。 author :developer_zxh GitHub | Gitee 本项目记录了本人从中国科学院大学硕士研究生开始,如何进入大工 java 开发岗位的学习记录(目前在校未求职,加入后此状…...
2023年中职“网络安全“—Web 渗透测试②
2023年中职“网络安全“—Web 渗透测试② Web 渗透测试任务环境说明:1.访问http://靶机IP/web1/,获取flag值,Flag格式为flag{xxx};2.访问http://靶机IP/web2/,获取flag值,Flag格式为flag{xxx};3.访问http://靶机IP/web…...
【整顿C盘】pycharm、chrome等软件,缓存移动
C盘爆了,特来找一下巨大的软件缓存,特此记录,跟随的各大教程,和自己的体会 一、爆炸家族JetBrains 这个适用于pycharm、idea、webstorm等等,只要是JetBrains家的,2020版本以上,都是一样的方法 p…...
C# using语句使用介绍
在C#中,using语句有两种主要用途:一是引入命名空间,二是提供一种简便的方式来处理资源的清理(主要用于实现了 IDisposable 接口的对象)。 引入命名空间:using 语句用于引入命名空间,从而可以在代…...
leetcode (力扣) 201. 数字范围按位与 (位运算)
文章目录 题目描述思路分析完整代码 题目描述 给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。 示例 1: 输入:left 5, right 7 输出…...
Flutter笔记: 在Flutter应用中使用SQLite数据库
Flutter笔记 在Flutter应用中使用SQLite数据库(基于sqflite) 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/q…...
OpenAI GPT5计划泄露
OpenAI的首席执行官萨姆奥特曼在最近接受《金融时报》的专访时,分享了OpenAI未来发展的一些新动向。此外,他还透露了关于即将到来的GPT-5模型以及公司对AGI的长期目标的一些细节。 奥特曼指出: 1.OpenAI正在开发GPT-5,一种更先进的…...
【面试经典150 | 数学】Pow(x, n)
文章目录 写在前面Tag题目来源题目解读解题思路方法一:快速幂-递归方法二:快速幂-迭代 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主…...
封装比较好的登录页面
封装比较好的登录页面 只在setup()函数中写流程,将逻辑代码抽离出来 <template><div class"wrapper"><img class"wrapper__img" srchttp://www.dell-lee.com/imgs/vue3/user.png /><div class"wrapper__input"&…...
如何使用Flask request对象处理请求
在 Flask 中,request 对象是处理 HTTP 请求的重要工具之一。它提供了许多属性和方法,可以帮助我们获取请求的相关信息和数据。本文将向你介绍 request 对象的常用方法以及如何在 Flask 应用程序中使用它。 1. 获取请求方法 首先,让我们看一…...
快速搜索多个word、excel等文件中内容
如何快速搜索多个word、excel等文件中内容 操作方法 以win11系统为介绍对象。 首先我们打开“我的电脑”-->“文件夹选项”-->“搜索”标签页,在“搜索内容”下方选择:"始终搜索文件名和内容(此过程可能需要几分钟)"。然后…...
Minio安装
环境 centos8,关闭防火墙 minio-20231101183725版本 参考官网:部署 MinIO:单节点单硬盘 — 适用于 Linux 的 MinIO 对象存储 单例 下载rpm,用中国镜像 wget https://dl.minio.org.cn/server/minio/release/linux-amd64/arch…...
Spring初识
未来的几周时间,大概率我会更新一下Spring家族的一些简单知识。而什么是Spring家族,好多同学还不是很清楚,我先来简单介绍一下吧: 所谓Spring家族,它其实就是一个框架,是基于Servlet再次进行封装的内容。为…...
2023全新付费进群系统源码 带定位完整版 附教程
这源码是我付费花钱买的分享给大家,功能完整。 搭建教程 Nginx1.2 PHP5.6-7.2均可 最好是7.2 第一步上传文件程序到网站根目录解压 第二步导入数据库(58soho.cn.sql) 第三步修改/config/database.php里面的数据库地址 第四步修改/conf…...
C# LINQ使用介绍
LINQ(Language-Integrated Query)是C#语言的一个强大特性,它允许开发者用声明性的方式查询和操作数据。LINQ提供了一致的查询体验,无论是操作内存中的对象(如数组或集合),还是操作外部数据源&am…...
【c++】——类和对象(中)——实现完整的日期类(优化)万字详细解疑答惑
作者:chlorine 专栏:c专栏 赋值运算符重载()()():实现完整的日期类(上) 我走的很慢,但我从不后退。 【学习目标】 日期(- - --)天数重载运算符 日期-日期 返回天数 对日期类函数进行优化(不符合常理的日期,负数,const成员)c中重载输入cin和输…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...
车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...

