当前位置: 首页 > news >正文

运筹优化算法常用求解器汇总

运筹学从形成到发展,在此过程中积累的大量理论和方法在国防、能源、制造、交通、金融、通信等各个领域发挥着越来越重要的作用。我们在生产生活中遇到的很多实际问题,都可以通过运筹学所涉及的优化方法对其进行数学建模,表示为数学问题,而为了解决这些数学问题,求解器应运而生。

目前市面上的主流优化求解器主要分为商用求解器(比如Gurobi、IBM Cplex等)、开源求解器(比如SCIP等)两大类。此外还有一些商业计算软件比如Matlab,甚至是常用的Excel表格中都包含有求解器工具,可以求解部分规模较小的数学规划问题,不过求解效率和商用求解器相比还是有一定差距。

商用求解器

Gurobi

Gurobi是由美国 Gurobi Optimization 公司开发新一代大规模求解器。在全球最著名的专业求解器评比网站 Decision Tree for Optimization Software (http://plato.asu.edu/bench.html) 中,Gurobi 展示出更快的求解速度和精度。Gurobi 全球用户超过2600家,广泛应用在金融、物流、制造、航空、石油石化、商业服务等多个领域。

技术优势:

  • 可以求解大规模线性问题,二次型问题和混合整数线性和二次型问题
  • 支持非凸目标和非凸约束的二次优化
  • 支持多目标优化
  • 支持包括SUM, MAX, MIN, AND, OR等广义约束和逻辑约束
  • 支持包括高阶多项式、指数、三角函数等的广义函数约束
  • 问题尺度只受限制于计算机内存容量,不对变量数量和约束数量有限制
  • 采用最新优化技术,充分利用多核处理器优势。支持并行计算
  • 提供了方便轻巧的接口,支持 C++, Java, Python, .Net, Matlab 和R,内存消耗少
  • 支持多种平台,包括 Windows, Linux, Mac OS X

支持模型:

  • 连续和混合整数线性问题
  • 凸目标或约束连续和混合整数二次问题
  • 非凸目标或约束连续和混合整数二次问题
  • 含有对数、指数、三角函数、高阶多项式目标或约束,以及任何形式的分段约束的非线性问题
  • 含有绝对值、最大值、最小值、逻辑与或非目标或约束的非线性问题

支持接口语言: C++, Java, Python, .Net, Matlab 和R

IBM CPLEX Optimizer

CPLEX历史悠久,最初版本在1988年就被开发出来,1997年被ILOG公司收购,2009年纳入IBM怀抱,如今已发展成为IBM决策优化系统IBM ILOG CPLEX Optimization Studio(简称COS)。作为COS系统中的关键组件,CPLEX Optimizer 为线性规划、混合整数规划、二次规划和二次约束规划问题提供灵活的高性能数学规划求解器。 这些求解器包括用于混合整数规划的分布式并行算法,支持利用多台计算机来解决难题。

支持模型:

  • 专门用于求解大规模的线性规划(LP)
  • 二次规划(QP)
  • 带约束的二次规划(QCQP)
  • 二阶锥规划(SOCP)等四类基本问题
  • 以及相应的混合整数规划(MIP)问题。

支持接口语言: C, C++, Java, C# or Python APIs

FICO Xpress

管网:https://www.fico.com/en/products/fico-xpress-optimization
Xpress 于 1983 年发布,是第一个在PC上运行的商业LP和MIP求解器。1992年,发布了并行计算的Xpress版本,五年后扩展到分布式计算。2008 年被FICO收购。Xpress 是第一个通过在 2010 年引入 64 位索引而跨越十亿决策变量阈值的 MIP 求解器。自 2014 年以来,Xpress 首次实现了并行对偶单纯形方法的商业实现。Xpress 包括其建模语言 Xpress Mosel和集成开发环境 Xpress Workbench。Mosel 包含分布式计算功能,可并行解决优化问题的多个场景。输入数据的不确定性可以通过稳健的优化方法来处理。
支持接口语言:.NET、Java、C、C++、VB、Python、Matlab、Solver API、Mosel API、BCL

Lingo

LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”,由美国LINDO系统公司(Lindo System Inc.)推出的专门用于求解最优化问题的软件包。其特色在于内置建模语言,提供许多常用函数方便使用者建立优化模型时调用,并提供与其他数据文件(如文本、EXCEL、数据库等)的接口,易于方便地输入、求解和分析大规模最优化问题。

杉数COPT

杉数求解器COPT(Cardinal Optimizer),是杉数自主研发的针对大规模优化问题的高效数学规划求解器套件,也是支撑杉数端到端供应链平台的核心组件。COPT是目前同时具备大规模混合整数规划、线性规划(单纯形法和内点法)、二阶锥规划、半定规划以及凸二次规划和凸二次约束规划问题求解能力的综合性能数学规划求解器,为企业应对高性能求解的需求提供了更多选择。
支持接口语言:C、C++、C#、Python、Julia、Java、AMPL、GAMS、Pyomo、PuLP、CVXPY等。

阿里MindOPT

MindOpt是阿里达摩院决策智能实验室自主研发的一款具备线性规划等多种功能的数学规划求解器套件。通过对大规模线性规划的快速稳定求解,为客户提供从数据到决策的全链路建模和求解能力。目前已应用于云计算等多项阿里业务,通过对弹性计算资源的调度优化,每年可为阿里云节约数亿元成本。

华为天筹AI求解器OPTV

天筹(OptVerse)AI求解器将运筹学和AI相结合,突破业界运筹优化极限,针对线性和整数模型寻找最优解,以通用形式描述问题,高效计算最优方案,助力企业量化决策和精细化运营,提升资源利用率和运转效率,增强决策水平和竞争力。

天筹(OptVerse)AI求解器已成功支撑华为供应能力及冗余分析等13个场景的模拟应用,计划预案周期从周缩短到天,保障了高效的连续性作战。

开源求解器

SCIP

SCIP是目前混合整数规划(MIP)和混合整数非线性规划(MINLP)最快的非商业求解器之一。SCIP也是一个用于约束整数规划、分支定界以及分支定价的框架[CCZ1] ,主要由德国ZIB研究所开发。与大多数商业求解器不同,SCIP 允许用户对求解过程进行完全控制,并允许用户访问求解器内部的详细信息。

谷歌 OR-Tools

官网:https://developers.google.cn/op
OR-Tools是一款谷歌旗下的开源优化工具。支持线性规划、整数规划,可以方便的求解Routing、Bin packing、Network flows、Assignment、Scheduling等问题。

Coin-OR开源项目套件 CLP/CBC/CGL/SYMPHONY等

COIN-OR (Computational Infrastructure for Operations Research) 是运筹和优化圈维护开源基础软件和项目的著名基金会,是一个公益组织,维护着市面上几乎所有的开源优化求解器,包括cbc, clp, ipopt, pyomo等数十种求解器和建模语言,并且使得它们之间的交互变得可能。可以说 COIN-OR 在开源求解器方面占有举足轻重的位置。目前所有项目都托管在 GitHub 上(https://github.com/coin-or),仅一些原有的基础设施(网站、wiki 和邮件列表)仍然托管在 Clemson 大学的服务器上。

COIN-OR 项目维护的诸多开源求解器和建模工具现在仍被全球数千个组织使用,其中值得注意的是Cbc、Clp、Ipopt这三个求解器在各自的领域中仍然处于十分领先的地位(线性规划、混合整数规划和非线性规划)。

LP_sovle

LP_solve是一个混合整数线性规划(MILP)求解器,来自sourceforge下的一个开源项目,是一个基于修正单纯形法和分支定界法的免费线性(整数)规划求解器,能够求解纯线性、(混合)整数/二进制、半连续和特殊有序集(SOS)模型。
支持模型:纯线性、(混合)整数/二进制、半连续和特殊有序集(SOS)模型
支持接口语言:C/C++、Java、Delphi、Free Pascal、VB、VBScript、http://VB.NET、C#.NET
官网:https://lpsolve.sourceforge.net/5.5/

GLPK

GLPK (GNU Linear Programming Kit,GNU线性编程工具)是GNU下的一个项目,用于建立大规模线性规划LP和混合型整数规划MIP问题,并对模型进行最优化求解。由于是GNU下的项目,因此没有商业非商业的版本限制,可以自由使用。
官网:https://www.gnu.org/software/glpk/g

中科院CMIP混合整数求解器

著名陈省身数学奖获得者、冯康科学计算奖获得者、中国科学院数学与系统科学院戴彧虹研究员带领CMIP团队从2015年开始,历经30个月,终于自主研发了我国第一个具有国际水平的整数规划求解器CMIP,并于2018年3月确定版本为CMIP 1.0版本。

CMIP代码总量已经超过五万行,涵盖国际现有求解器预处理、启发式、割平面、分支、节点选择、区域传播等各种功能模块,并已经较好地具备了求解大规模整数规划的能力。

相关文章:

运筹优化算法常用求解器汇总

运筹学从形成到发展,在此过程中积累的大量理论和方法在国防、能源、制造、交通、金融、通信等各个领域发挥着越来越重要的作用。我们在生产生活中遇到的很多实际问题,都可以通过运筹学所涉及的优化方法对其进行数学建模,表示为数学问题&#…...

字符串函数(一)

✨博客主页:小钱编程成长记 🎈博客专栏:进阶C语言 字符串函数(一) 0.前言1.求字符串长度的函数1.1 strlen(字符串长度) 2.长度不受限制的字符串函数2.1 strcpy(字符串拷贝&#xff0…...

Ubuntu 安装 Docker 的详细步骤

文章目录 简介1.更新2.安装必要的软件包2.1 基于阿里源 3.验证 Docker 安装是否成功4.安装后的一些常规设置及常用的命令4.1 启动 Docker4.2 Docker 在系统启动时自动运行4.3 运行一个 Hello World 镜像4.4 查看docker运行状态 欢迎来到这篇关于在 Ubuntu 上安装 Docker 的教程…...

使用Python进行App用户细分

App用户细分是根据用户与App的互动方式对用户进行分组的任务。它有助于找到保留用户,找到营销活动的用户群,并解决许多其他需要基于相似特征搜索用户的业务问题。这篇文章中,将带你完成使用Python进行机器学习的App用户细分任务。 App用户细…...

博弈论——伯特兰德寡头模型(Bertrand Model)

伯特兰德寡头模型(Bertrand Model) 0 引言 在前面几篇文章中,我们介绍了古诺模型(Cournot duopoly model)和斯塔克尔伯格模型(Stackelberg model) 博弈论——连续产量古诺模型(Cournot duopoly model) 博弈论——斯塔克尔伯格模型(Stackelberg model) 这两个模型…...

第一百六十回 SliverPadding组件

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了SliverAppBar组件相关的内容,本章回中将介绍 SliverPadding组件.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的SliverPadding组件类似Pading组件,它主要用…...

Mapfree智驾方案,怎样实现成本可控?

整理|睿思 编辑|祥威 编者注:本文是HiEV出品的系列直播「智驾地图之变」第二期问答环节内容整理。 元戎启行副总裁刘轩与连线嘉宾奥维咨询董事合伙人张君毅、北汽研究总院智能网联中心专业总师林大洋、主持嘉宾周琳展开深度交流,并进行了答疑。 本期元…...

javascript: Bubble Sort

// Sorting Algorithms int JavaScript /** * file Sort.js * 1. Bubble Sort冒泡排序法 */ function BubbleSort(arry, nszie) {var i, j, temp;var swapped;for (i 0; i < nszie - 1; i){swapped false;for (j 0; j < nszie - i - 1; j){if (arry[j] > arry[j …...

DM数据库根据rowid删除重复的记录

oracle中rowid的用法-CSDN博客 delete from stu a where rowid not in (select max(b.rowid) from stu b where a.nob.no and a.name b.name and a.sex b.sex); //这里max使用min也可以...

【AI视野·今日Robot 机器人论文速览 第四十期】Mon, 25 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Mon, 25 Sep 2023 Totally 36 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;CloudGripper, 一套云化的机器抓取人数据采集系统&#xff0c;包含了32个机械臂的集群。(from KTH Royal Institute of Te…...

HashMap底层源码,数据结构

HashMap的底层结构在jdk1.7中由数组链表实现&#xff0c;在jdk1.8中由数组链表红黑树实现&#xff0c;以数组链表的结构为例。 JDK1.8之前Put方法&#xff1a; JDK1.8之后Put方法&#xff1a; HashMap基于哈希表的Map接口实现&#xff0c;是以key-value存储形式存在&#xff0c…...

计算机等级考试—信息安全三级真题八

一、单选题...

番外6:下载+安装+配置Linux

#########配置Linux---后续 step08: 点击编辑虚拟机设置&#xff0c;选择下载好的映像文件.iso进行挂载&#xff1b; step09: 点击编辑虚拟机选项&#xff0c;选择UEFI启动模式并点击确定&#xff1b; step10: 点击开启虚拟机&#xff0c;选择Install rhel &#xff1b; 备注&…...

javascript验证表单字段有效性,使用checkValidity()方法和他的属性

<script type"text/javascript">function LoginCheckValidity(){var txt"";var rmb1document.getElementById("rmb1");if(rmb1.checkValidity()false){if(rmb1.validitionMessageundefined){txt"输入金额有误,金额10-200之间";}…...

pdf怎么调整大小kb?pdf文件过大这样压缩

在日常的工作和生活中&#xff0c;我们常常会遇到需要调整PDF文件大小的问题。有时候&#xff0c;我们需要将大型的PDF文件上传到某些平台&#xff0c;但平台的限制让我们不得不压缩文件的大小。那么&#xff0c;如何有效地调整PDF文件的大小呢&#xff1f; 一、使用嗨格式压缩…...

vue3中的watch

在Vue3中&#xff0c;watch中的参数可以分为两部分&#xff0c;即要监听的响应式数据以及回调函数。 语法格式如下&#xff1a; watch(要监听的响应式数据, 回调函数)除了以上的两个还有其他的参数 immediate&#xff1a;是否在初始化时立即执行一次回调函数&#xff0c;默认…...

开绕组电机零序Bakc EMF-based无感控制以及正交锁相环inverse Park-based

前言 最近看论文遇到了基于反Park变换的锁相环&#xff0c;用于从开绕组永磁同步电机零序电压信号中提取转子速度与位置信息&#xff0c;实现无感控制。在此记录 基于零序Back EMF的转子估算 开绕组电机的零序反电动势 e 0 − 3 ω e ψ 0 s i n 3 θ e e_0-3\omega_e\psi_…...

番外5:下载+安装+配置Linux

任务前期工作&#xff1a; 01. 电脑已安装好VMware Workstation软件&#xff1b; 02.提前下载好Rhel-8.iso映像文件&#xff08;文件较大一般在9.4GB&#xff0c;建议采用迅雷下载&#xff09;&#xff0c;本人使用的以下版本&#xff08;地址ed2k://|file|rhel-8.4-x86_64-dvd…...

新手--安装好Quartus II13.0(带modelsim集成包)并用Quartus II搭建一个工程

前言 今天是国庆节&#xff0c;我们正式来学习Quartus II13.0软件的安装与使用。学习verilog与学习C语言都是学习一门语言&#xff0c;那么学习一门语言&#xff0c;光看理论不敲代码绝对是学习不好的。要用verilog语言敲代码&#xff0c;就要像C语言那样搭建起语言的编译环境&…...

python监控软件内存、cpu和GDI

目录 前言代码 前言 最近做软件测试需要监控软件内存、cpu和GDI对象数&#xff0c;用psutil库可以很方便的实现监控内存和CPU&#xff0c;但是GDI好像还不行&#xff0c;最后来的win32api来调用的Windows API接口来实现GDI监控的&#xff0c;在此做个记录。 代码 import psu…...

wordpress搭建自己的博客详细过程以及踩坑

WordPress作为一款开源的内容管理系统&#xff08;CMS&#xff09;&#xff0c;具有诸多优势。首先&#xff0c;它的易用性使得即使对于没有编程经验的用户来说也能轻松上手&#xff0c;通过直观的用户界面和友好的管理工具&#xff0c;用户可以方便地创建、编辑和发布内容。其…...

在jupyter中更改、增加内核

今天在配置llama2的环境&#xff0c;在学院实验室的服务器上面用jupyter&#xff0c;怎么都不会增加内核。今天说一下怎么把创建好的conda环境增加到jupyter列表中。 例如我有个环境叫做llama2&#xff0c;很简单只要两步。 第一步先激活conda环境。 conda activate llama2第…...

Redis代码实践总结(二)

使用 CLI 探索 Redis 外部程序使用 TCP 套接字和 Redis 特定协议与 Redis 进行通信。该协议在不同编程语言的 Redis 客户端库中实现。然而&#xff0c;为了使使用 Redis 进行黑客攻击变得更简单&#xff0c;Redis 提供了一个命令行实用程序&#xff0c;可用于向 Redis 发送命令…...

读取一张图片各种颜色占比

提问之初 <small> 读取一张图片各种颜色占比 /storage/emulated/0/Pictures/Screenshots/Screenshot_20230725_195440.jpg有趣优雅热情沉着的代码与注释/每行每行 from PIL import Image # 导入PIL大法&#xff0c;这是处理图像的必备神器# 图片路径&#xff0c;此处为…...

C程序设计内容与例题讲解 -- 第四章--选择结构程序设计(第五版)谭浩强

前言&#xff1a;在第三章我们介绍了顺序结构程序设计。在顺序结构中&#xff0c;各个语句是按自上而下的顺序执行的&#xff0c;执行完上一个语句就自动执行下一个语句&#xff0c;是无条件的&#xff0c;不必做任何判断。是这最简单的程序结构。实际上&#xff0c;在很多情况…...

Blued引流脚本

于多数人来说&#xff0c;引流都是一个比较困难的操作&#xff0c;因为流量不会听你的。所以任何人在网上做生意&#xff0c;或者开一个实体店&#xff0c;都会为流量而发愁&#xff0c;其实对于流量的吸引来说&#xff0c;我们越是刻意为之&#xff0c;可能所获得的效果也越不…...

数据结构之美:如何优化搜索和排序算法

文章目录 搜索算法的优化1. 二分搜索2. 哈希表 排序算法的优化1. 快速排序2. 归并排序 总结 &#x1f389;欢迎来到数据结构学习专栏~数据结构之美&#xff1a;如何优化搜索和排序算法 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x…...

Unity 鼠标悬浮时文本滚动(Text Mesh Pro)

效果 直接将脚本挂载在Text Mesh Pro上&#xff0c;但是需要滚动的文本必须在Scroll View中&#xff0c;否侧会定位错误&#xff0c;还需要给Scroll View中看需求添加垂直或者水平布局的组件 代码 using System.Collections; using System.Collections.Generic; using UnityE…...

GNN PyG~torch_geometric 学习理解

目录 1. PyG Introduction 2. PyG Installation 2.1 PyG 安装常见错误及原因 2.2 PyG 具体安装步骤 3. torch_geometric packages torch_geometric.data.Data Dataset 与 DataLoader Dropout、BatchNorm 3. torch_geometric: 理解edge_index 3.1 理解 mini-batch edg…...

ChatGPT 调教指南:从 PDF 提取标题并保存

一、请使用python编写一段代码&#xff0c;使用pymupdf包从pdf中提取标题&#xff0c;保存标题名称和页数。 我没有加任何的答案提示&#xff0c;看看 GPT 如何反应。它应该是知道 PDF 没有任何语义信息&#xff0c;一切标题或者正文全是文本框。 好的&#xff0c;以下是使用py…...

汝州网站建设汝州/域名备案查询官网

数据类型Java语言是静态类型的&#xff08;statical typed)&#xff0c;也就是说所有变量和表达式的类型再编译时就已经完全确定。由于是statical typed&#xff0c;导致Java语言也是强类型&#xff08;Strong typed&#xff09;的。强类型意味着每个变量都具有一种类型&#x…...

网站技术维护/搜易网托管模式的特点

计算机应用技术第3章word (107页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;19.90 积分MMSS--WWoorrdd的的基基础础应应用用 Version 2.0 本章结构Page 2/40 本章结构(Cont.)Page 3/40 本章目标v …...

张家港网站建设/创建一个网站

首先&#xff0c;先考虑一个问题&#xff0c;什么条件会触发cancelAcquire()方法&#xff1f; cancelAcquire()方法的反向查找可以清楚的看到在互斥锁和共享锁的拿锁过程中都是有调用此方法的&#xff0c;而cancelAcquire()方法是写在finally代码块中&#xff0c;并且使用faile…...

国内做网站建设好的/环球网最新消息疫情

在hadoop1中NameNode存在一个单点故障问题&#xff0c;也就是说如果NameNode所在的机器发生故障&#xff0c;那么整个集群就将不可用(hadoop1中有个SecorndaryNameNode&#xff0c;但是它并不是NameNode的备份&#xff0c;它只是namenode的一个助理&#xff0c;协助namenode工作…...

wordpress基本教程/阿里指数查询官网入口

如何提升自己的硬实力 转载&#xff1a;https://www.toutiao.com/a6649888961923662343/?timestamp1575646544&appnews_article&group_id6649888961923662343&req_id201912062335440100200470131B81682B 转载理由&#xff1a;激励下...

杭州网站建设wguser/seo交流论坛

JavaScript 是一种功能强大的编程语言,广泛用于 Web 和移动开发等。无论您是刚开始学习 JavaScript 的初学者,还是希望更新技能的有经验的开发人员,这 8 个技巧都将帮助您编写更好的代码并提高工作效率。 让我们开始吧: 1. console.log调试你的代码 let x = 10; let y =…...