如何选择合适的运筹优化求解器?

news2024/11/18 11:49:34

文章目录

  • 前言
  • 求解器对比
    • 问题延伸:商用求解器和开源求解器的差别是什么?
  • 求解器PK
  • 总结
  • 参考资料

前言

求解器对于运筹算法工程师而言,常常像一个黑盒,我们扔进去输入数据和数学模型,求解器给我们吐出一个解出来。这种状态在面临规模小、形式简单的数学模型是还可以应付的,但一旦问题难度上来,原本用着舒服的求解器可能求解你的问题太慢了,又或者根本无法给到符合预期的解,这时就会面临到底选择哪个求解器更合适的问题?
在这里插入图片描述

这里的合适代表既准又快,需要综合考虑:

  1. 自己的问题类型是什么?线性规划?整数规划?二次规划?这里可以参考我的文章运筹学算法分类快速判断;
  2. 不同求解器适用的问题类型;
  3. 开源还是商用?

2和3都会在接下来的梳理中体现。

求解器对比

求解器 国家 类型 支持的数学问题 优点 缺点 Python API
Gurobi美国商用 擅长:LP、MIP、凸和非凸的二次混合整数规划;
支持:(1) 线性约束和目标模型(连续变量、混合整数);(2)二阶锥模型(连续变量、混合整数);(3)二次凸约束和目标模型(连续变量、混合整数);(4)二次非凸(双线性、二次等式约束)约束和目标模型(连续变量、混合整数);(5)非线性模型(除式、高阶多项式、指数、对数、三角函数、范数等)(连续变量、混合整数)
可以叠加许多功能:(1)约束和目标中带有最大、最小、绝对值等数学函数,或者带有AND、OR、INDICATOR逻辑条件的模型;(2)多目标优化;(3)需要获得部分或者全部可行解或者最优解的模型;(4)不可行或者无解分析;(5)优化参数自动调优功能;(6)分布式计算或者多线程计算支持
Cplex美国商用LP、QP、QCQP、二阶锥规划(SOCP)、MIP支持
Xpress美国商用LP、MILP、QP、QCQP、SOCP、NLP、CP支持
COPT中国商用LP、MIP、二阶锥规划、半定规划、凸二次(约束)规划支持
SCIP德国开源MIP、MINLP、非凸优化问题用于MIP的最快的非商业求解器之一、支持Branch&Price、支持 McCormick relaxation 和 convex envelope relaxation 这两种非凸问题处理方法支持
OR-TOOLs美国开源LP、IP、约束规划、MIP跨平台性不支持非线性规划支持
IPOPT美国开源非线性规划问题(凸和非凸均可)对初始值敏感(影响算法收敛和迭代次数)、对于非凸问题可能陷入局部最优支持
GLPK美国开源大规模线性规划、MIP不支持非线性规划支持
CBC美国开源LP、MIP不支持非线性问题支持

梳理的过程中发现了一个wikipedia提供的表格:
在这里插入图片描述

问题延伸:商用求解器和开源求解器的差别是什么?

不同求解器底层的差异是它们是否能够正确的识别并利用模型的结构,而这直接决定了求解器的表现(求解速度、支持准确求解的问题类型、支持的问题规模、解的质量)。有些问题开源求解器无法支持,只有一些商业求解器才能求解,还有的问题,商业求解器的求解速度更佳。
在这里插入图片描述

导致这一差距的原因也很好理解——“Commercial vendors with their teams of full-time developers and their large customer base who provide models from a diverse set of applications are just in a much better position to develop, implement, and tune algorithms to cover all these different aspects and structures that appear in real-world models.”

求解器PK

目前主要是参考 H. Mittelmann 教授的评测网站,会从很多维度对各个求解器进行测试,最终从解决的问题数和耗时两个方面评分。
比如对于MIP问题,最新的测评结果是:

在这里插入图片描述

在这里插入图片描述

总结

回到我们文章标题的问题,拿到实际问题后怎么选择合适的求解器呢,我总结了3个步骤:
(1)判断数学问题类型,看看手头已有的求解器是否就能支持(判断方法可以查阅上面的表格);
啰嗦一句:排除不支持你这类问题的求解器,为什么单独强调这么一句呢?举个例子,你建模的问题是个整数规划问题,而IPOPT主要是用于求解非线性规划的,就不太适用于你这个问题。那问题来了,我就是把这个整数规划问题丢给IPOPT求解会怎么样呢?我亲自踩过这样的坑Pyomo调用IPOPT:0-1变量给出小数解,血泪教训!

(2)快速实验,找一个支持的求解器在小规模case上测试下;
如果你的问题规模本身就很小,而且在这一步的求解质量和速度都已经满足要求了,那么恭喜你,不用再继续往下看了!多测试一些case保证模型的鲁棒性即可。如果你不幸的发现,小规模测试OK,但测试案例规模放大,模型求解很久仍然没有给到解,无法支持上线实时计算的规模和时间要求(和现在的我一样),那么就进入下一步的打怪中。

(3)优化大规模问题的求解速度
这里持续更新中,我还在调研…

参考资料

  1. Evaluating Operational Research Solvers
  2. 整数规划求解器介绍
  3. The advantages of commercial solvers
  4. What does CPLEX solve ?
  5. Python运筹学求解器
  6. 市面上的数学规划求解器有哪些?
  7. COIN-OR
  8. H. Mittelmann 教授的评测网站
  9. Visualizations of Mittelmann benchmarks

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1294917.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

类与对象的概念:创建及调用方法

掌握类和创建对象的关系 定义类 定义对象 定义和调用方法 编程思想:面向过程编程,面向对象编程 系统提供数据类型【String,char,double】,我们也可以自己定义类型:根据自定义类型所衍生出来的变量就是…

【推荐系统】推荐算法数学基础

【大家好,我是爱干饭的猿,本文重点介绍推荐系统涉及的数学知识、推荐系统涉及的概率统计知识。 后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 上一篇文章:《【推…

RocketMq顺序消息

RocketMq顺序消息 1.RocketMq 架构图2.RocketMq顺序消息2.1部分消息有序2.1.1 生产者构建2.1.2 生产者保证有序2.1.3 消费者保证有序性 3.使用rocketmq-spring-boot-starter发送消息如何指定tag与key?问题1.MessagingException: sendDefaultImpl call timeout 1.RocketMq 架构…

高精度加法,减法,乘法,除法(下)(C语言)

前言 上一篇博客我们分享了高精度加法,减法,这一期我将为大家讲解高精度乘法和高精度除法。那让我们开始吧! 对加法和减法感兴趣的话就点我 文章目录 1,乘法2,除法3,尾声 1,乘法 让我们想想我们平时做数学…

STC15F100E单片机模拟串口

文章目录 一、芯片简介二、开发环境三、软件模拟串口参考 一、芯片简介 STC15F100系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,新一代8051单片机,指令代码完全兼容传统8051,但是速度快6-12倍。 内部集成R/C时钟,5MHz…

52 代码审计-PHP项目类RCE及文件包含下载删除

目录 漏洞关键字:演示案例:xhcms-无框架-文件包含跨站-搜索或应用-includeearmusic-无框架-文件下载-搜索或应用功能-down等zzzcms-无框架-文件删除RCE-搜索或应用-unlink、eval 漏洞关键字: SQL注入: select insert update mysql_query mysql等 文件上传&#xff…

守护安全,六氟化硫气体泄漏报警装置校准服务

在电力工业中,六氟化硫(SF6)气体是一种重要的介质,它用作封闭式中、高压开关的灭弧和绝缘气体。六氟化硫气体的卓越性能实现了装置经济化、低维护化的操作。与普通装置相比,可以节省最多90%的空间。 六氟化…

Themis: Fast, Strong Order-Fairness in Byzantine Consensus

目录 笔记后续的研究方向摘要引言秩序井然 Themis: Fast, Strong Order-Fairness in Byzantine Consensus CCS 2023 笔记 后续的研究方向 摘要 我们介绍了Themis,这是一种将交易的公平排序引入(许可的)拜占庭共识协议的方案,最…

ubuntu系统下搭建本地物联网mqtt服务器的步骤

那么假如我们需要做一些终端设备,例如温湿度传感器、光照等物联网采集设备要接入呢?怎么样才能将数据报送到服务器呢? 以下内容基于我们ubuntu系统下的emqx成功启动的基础上。我们可以用浏览器键入控制板的地址,如果启动成功&…

python pyaudio显示音频波形图

python pyaudio显示音频波形图 代码如下: import numpy as np import matplotlib.pylab as plb import wave# 读取 wav wf wave.open("./output.wav", "rb")# 获取音频相关参数:声道数、量化位数、采样频率、采样帧数 nchannels,…

案例二:SQL Server数据库的备份和还原

1、备份类型。 在 SQL Server 中提供了三种常用的备份类型,分别是完整备份.差异备份和事务日志备份。 完整备份: 完整备份包括对整个数据库、部分事务日志、数据库结构和文件结构的备份。完整备份代表的是备份完成时刻的数据库。 完整备份是…

「Verilog学习笔记」格雷码计数器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 timescale 1ns/1nsmodule gray_counter(input clk,input rst_n,output reg [3:0] gray_out );reg [3:0] binary_cnt ; reg flag ; always (posedge clk or negedge r…

【高效开发工具系列】Mac删除启动台图标

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

IP地址如何用于流量管理?

随着互联网的普及和网络流量的不断增加,流量管理成为了网络运营中至关重要的一环。而IP地址作为互联网中的重要标识符,也可以被广泛应用于流量管理中。 IP地址是互联网协议(IP)中用于标识和定位网络设备的32位二进制地址。通过IP地…

Redis Reactor事件驱动模型源码

前置学习:Redis server启动源码-CSDN博客 Redis采用单线程Reactor模型 三个关键角色,即 reactor、acceptor、handler 三类处理事件,即连接事件、写事件、读事件。 建立连接(Acceptor)、监听accept、read、write事件…

使用高防IP防护有哪些优势

高防IP是针对互联网服务器在遭受大流量的DDoS攻击后导致服务不可用的情况下,推出的付费增值服务,用户可以通过配置高防IP,将攻击流量引流到高防IP,确保源站的稳定可靠。高防IP相当于搭建完转发的服务器。 高防IP有两种接入方式&a…

《Easy3d+Qt+VTK》学习

《Easy3dQtVTK》学习-1、编译与配置 一、编译二、配置注 一、编译 1、 资源下载:easy3d giuhub 2、解压缩 3、用qt打开CMakeLists.txt即可 4、点击项目,选择debug或者release,图中3处可自行选择,因为我的qt版本是6&#xff0c…

unity 2d 入门 飞翔小鸟 小鸟跳跃 碰撞停止挥动翅膀动画(十)

1、切换到动画器 点击make transition和exit关联起来 2、设置参数 勾选掉Has Exit Time 3、脚本给动画器传参 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Fly : MonoBehaviour {//获取小鸟(刚体)p…

云原生系列1

1、虚拟机集群环境准备 VirtualBox类似vmware的虚拟化软件,去官网https://www.virtualbox.org/下载最新版本免费的,VirtualBox中鼠标右ctrl加home跳出鼠标到wins中。 VirtualBox安装步骤 https://blog.csdn.net/rfc2544/article/details/131338906 cent…

【广州华锐互动】VR煤矿生产事故体验系统为矿工提供一个身临其境的安全实训环境

随着科技的不断发展,虚拟现实(VR)技术已经逐渐走进我们的生活,为我们带来了前所未有的沉浸式体验。在许多领域,如教育、医疗、娱乐等,VR技术都发挥着重要作用。然而,当这项技术被用于模拟煤矿坍…